From 3c0fdcf78527e3af1ce8ad7cbef522135cb9fcd6 Mon Sep 17 00:00:00 2001 From: Anas Nashif Date: Tue, 6 Nov 2012 07:33:20 -0800 Subject: [PATCH] Imported Upstream version 3.2.19 --- ABOUT-NLS | 1111 ++ AUTHORS | 3 + COPYING | 340 + ChangeLog | 2241 ++++ INSTALL | 229 + Makefile.am | 14 + Makefile.in | 689 + NEWS | 252 + README | 11 + THANKS | 13 + TODO | 14 + aclocal.m4 | 958 ++ compile | 142 + config.guess | 1510 +++ config.h.in | 269 + config.rpath | 614 + config.sub | 1616 +++ configure | 21486 +++++++++++++++++++++++++++++++ configure.in | 341 + depcomp | 530 + etc/Makefile.am | 33 + etc/Makefile.in | 613 + etc/default/passwd | 30 + etc/default/useradd | 8 + etc/groupadd.local | 29 + etc/init.d/rpasswdd | 139 + etc/login.defs | 174 + etc/login.defs.5 | 269 + etc/pam.d/chage | 6 + etc/pam.d/chfn | 8 + etc/pam.d/chsh | 8 + etc/pam.d/passwd | 5 + etc/pam.d/rpasswd | 6 + etc/pam.d/shadow | 7 + etc/pam.d/useradd | 6 + etc/pwdutils/logging | 8 + etc/rpasswd.conf | 5 + etc/useradd.local | 44 + etc/userdel-post.local | 30 + etc/userdel-pre.local | 28 + install-sh | 276 + lib/Makefile.am | 34 + lib/Makefile.in | 558 + lib/authentication.c | 106 + lib/call_script.c | 82 + lib/check_home.c | 39 + lib/check_name.c | 80 + lib/chown_dir_rec.c | 109 + lib/copy_dir_rec.c | 224 + lib/copy_xattr.c | 169 + lib/date2str.c | 43 + lib/dbg_log.c | 70 + lib/dbg_log.h | 30 + lib/error_codes.h | 50 + lib/get_caller_dn.c | 50 + lib/get_ldap_password.c | 52 + lib/get_value.c | 96 + lib/group.c | 712 + lib/group.h | 50 + lib/i18n.h | 33 + lib/init_environment.c | 60 + lib/is_logged_in.c | 44 + lib/libldap.c | 2083 +++ lib/libldap.h | 178 + lib/lock_database.c | 46 + lib/logging.c | 196 + lib/logging.h | 113 + lib/logindefs.c | 281 + lib/logindefs.h | 29 + lib/msg_table.h | 93 + lib/nispasswd.h | 124 + lib/nsw.c | 183 + lib/nsw.h | 29 + lib/parse_crypt_arg.c | 151 + lib/parse_crypt_arg.h | 28 + lib/parse_grent.c | 189 + lib/parse_pwent.c | 202 + lib/passwd_nisplus.c | 617 + lib/print_error.c | 32 + lib/print_version.c | 37 + lib/public.h | 125 + lib/read-files-group.c | 253 + lib/read-files.c | 380 + lib/read-files.h | 50 + lib/remove_dir_rec.c | 91 + lib/remove_gr_mem.c | 48 + lib/selinux_utils.c | 132 + lib/str2date.c | 48 + lib/strtoid.c | 46 + lib/use_slp.c | 234 + lib/use_slp.h | 23 + lib/user.c | 1108 ++ lib/utf8conv.c | 109 + lib/utf8conv.h | 18 + lib/yesno.c | 50 + lib/yesno.h | 23 + lib/yppasswd.h | 47 + lib/yppasswd_xdr.c | 52 + ltmain.sh | 8406 ++++++++++++ m4/Makefile.am | 4 + m4/Makefile.in | 369 + m4/codeset.m4 | 21 + m4/getline.m4 | 42 + m4/gettext.m4 | 631 + m4/glibc2.m4 | 30 + m4/glibc21.m4 | 30 + m4/iconv.m4 | 101 + m4/intdiv0.m4 | 70 + m4/intmax.m4 | 30 + m4/inttypes-h.m4 | 25 + m4/inttypes-pri.m4 | 30 + m4/inttypes.m4 | 27 + m4/inttypes_h.m4 | 26 + m4/isc-posix.m4 | 26 + m4/japhar_grep_cflags.m4 | 16 + m4/lcmessage.m4 | 30 + m4/lib-ld.m4 | 110 + m4/lib-link.m4 | 630 + m4/lib-prefix.m4 | 185 + m4/libtool.m4 | 7357 +++++++++++ m4/lock.m4 | 289 + m4/longdouble.m4 | 31 + m4/longlong.m4 | 23 + m4/ltoptions.m4 | 368 + m4/ltsugar.m4 | 123 + m4/ltversion.m4 | 23 + m4/lt~obsolete.m4 | 92 + m4/nls.m4 | 31 + m4/po.m4 | 428 + m4/printf-posix.m4 | 44 + m4/progtest.m4 | 92 + m4/signed.m4 | 17 + m4/size_max.m4 | 60 + m4/stdint_h.m4 | 26 + m4/uintmax_t.m4 | 30 + m4/ulonglong.m4 | 23 + m4/visibility.m4 | 52 + m4/wchar_t.m4 | 20 + m4/wint_t.m4 | 20 + m4/xsize.m4 | 13 + missing | 360 + mkinstalldirs | 111 + packaging/pam.patch | 63 + packaging/pwdutils-no-add-needed.patch | 217 + packaging/pwdutils.changes | 6 + packaging/pwdutils.spec | 96 + packaging/useradd.default | 9 + plugins/Makefile.am | 38 + plugins/Makefile.in | 554 + plugins/liblog_audit.c | 91 + plugins/liblog_audit.map | 6 + plugins/liblog_laus.c | 96 + plugins/liblog_laus.map | 6 + plugins/liblog_syslog.c | 52 + plugins/liblog_syslog.map | 6 + po/LINGUAS | 8 + po/Makefile.in.in | 393 + po/Makevars | 41 + po/POTFILES.in | 65 + po/Rules-quot | 47 + po/boldquot.sed | 10 + po/da.gmo | Bin 0 -> 61147 bytes po/da.po | 3101 +++++ po/de.gmo | Bin 0 -> 21098 bytes po/de.po | 2988 +++++ po/en@boldquot.header | 25 + po/en@quot.header | 22 + po/fr.gmo | Bin 0 -> 65709 bytes po/fr.po | 3157 +++++ po/id.gmo | Bin 0 -> 62472 bytes po/id.po | 3115 +++++ po/insert-header.sin | 23 + po/nl.gmo | Bin 0 -> 63234 bytes po/nl.po | 3100 +++++ po/pl.gmo | Bin 0 -> 62519 bytes po/pl.po | 3101 +++++ po/pwdutils.pot | 2936 +++++ po/quot.sed | 6 + po/remove-potcdate.sin | 19 + po/stamp-po | 1 + po/sv.gmo | Bin 0 -> 61460 bytes po/sv.po | 3086 +++++ po/vi.gmo | Bin 0 -> 70810 bytes po/vi.po | 3142 +++++ src/Makefile.am | 159 + src/Makefile.in | 1278 ++ src/chage.1 | 109 + src/chage.c | 776 ++ src/chfn.1 | 104 + src/chfn.c | 740 ++ src/chpasswd.8 | 61 + src/chpasswd.c | 407 + src/chsh.1 | 86 + src/chsh.c | 584 + src/expiry.1 | 41 + src/expiry.c | 317 + src/gpasswd.1 | 50 + src/gpasswd.c | 479 + src/groupadd.8 | 88 + src/groupadd.c | 613 + src/groupdel.8 | 63 + src/groupdel.c | 406 + src/groupmod.8 | 80 + src/groupmod.c | 528 + src/grpck.8 | 53 + src/grpck.c | 828 ++ src/grpconv.8 | 32 + src/grpconv.c | 109 + src/grpunconv.8 | 44 + src/grpunconv.c | 311 + src/newgrp.1 | 69 + src/newgrp.c | 444 + src/pam_rpasswd.8 | 99 + src/pam_rpasswd.c | 638 + src/pam_rpasswd.map | 6 + src/passwd.1 | 194 + src/passwd.c | 1049 ++ src/pwck.8 | 29 + src/pwck.c | 1106 ++ src/pwconv.8 | 63 + src/pwconv.c | 500 + src/pwunconv.8 | 45 + src/pwunconv.c | 258 + src/rpasswd-client.c | 1064 ++ src/rpasswd-client.h | 55 + src/rpasswd.1 | 95 + src/rpasswd.c | 611 + src/rpasswd.conf.5 | 93 + src/rpasswdd.8 | 72 + src/rpasswdd.c | 1464 +++ src/sg.1 | 1 + src/tst-32bit-uid-gid | 82 + src/tst-chage | 67 + src/tst-gpasswd | 33 + src/tst-groupadd | 35 + src/tst-groupmod | 118 + src/tst-grpck | 104 + src/tst-long-group-entry | 49 + src/tst-passwd | 46 + src/tst-pwck | 73 + src/tst-pwconv | 84 + src/tst-pwunconv | 89 + src/tst-useradd | 81 + src/tst-userdel | 34 + src/tst-usermod | 38 + src/useradd.8 | 165 + src/useradd.c | 1917 +++ src/userdel.8 | 79 + src/userdel.c | 667 + src/usermod.8 | 158 + src/usermod.c | 1829 +++ src/vigr.8 | 1 + src/vipw.8 | 69 + src/vipw.c | 432 + 254 files changed, 116903 insertions(+) create mode 100644 ABOUT-NLS create mode 100644 AUTHORS create mode 100644 COPYING create mode 100644 ChangeLog create mode 100644 INSTALL create mode 100644 Makefile.am create mode 100644 Makefile.in create mode 100644 NEWS create mode 100644 README create mode 100644 THANKS create mode 100644 TODO create mode 100644 aclocal.m4 create mode 100755 compile create mode 100755 config.guess create mode 100644 config.h.in create mode 100755 config.rpath create mode 100755 config.sub create mode 100755 configure create mode 100644 configure.in create mode 100755 depcomp create mode 100644 etc/Makefile.am create mode 100644 etc/Makefile.in create mode 100644 etc/default/passwd create mode 100644 etc/default/useradd create mode 100755 etc/groupadd.local create mode 100755 etc/init.d/rpasswdd create mode 100644 etc/login.defs create mode 100644 etc/login.defs.5 create mode 100644 etc/pam.d/chage create mode 100644 etc/pam.d/chfn create mode 100644 etc/pam.d/chsh create mode 100644 etc/pam.d/passwd create mode 100644 etc/pam.d/rpasswd create mode 100644 etc/pam.d/shadow create mode 100644 etc/pam.d/useradd create mode 100644 etc/pwdutils/logging create mode 100644 etc/rpasswd.conf create mode 100755 etc/useradd.local create mode 100755 etc/userdel-post.local create mode 100755 etc/userdel-pre.local create mode 100755 install-sh create mode 100644 lib/Makefile.am create mode 100644 lib/Makefile.in create mode 100644 lib/authentication.c create mode 100644 lib/call_script.c create mode 100644 lib/check_home.c create mode 100644 lib/check_name.c create mode 100644 lib/chown_dir_rec.c create mode 100644 lib/copy_dir_rec.c create mode 100644 lib/copy_xattr.c create mode 100644 lib/date2str.c create mode 100644 lib/dbg_log.c create mode 100644 lib/dbg_log.h create mode 100644 lib/error_codes.h create mode 100644 lib/get_caller_dn.c create mode 100644 lib/get_ldap_password.c create mode 100644 lib/get_value.c create mode 100644 lib/group.c create mode 100644 lib/group.h create mode 100644 lib/i18n.h create mode 100644 lib/init_environment.c create mode 100644 lib/is_logged_in.c create mode 100644 lib/libldap.c create mode 100644 lib/libldap.h create mode 100644 lib/lock_database.c create mode 100644 lib/logging.c create mode 100644 lib/logging.h create mode 100644 lib/logindefs.c create mode 100644 lib/logindefs.h create mode 100644 lib/msg_table.h create mode 100644 lib/nispasswd.h create mode 100644 lib/nsw.c create mode 100644 lib/nsw.h create mode 100644 lib/parse_crypt_arg.c create mode 100644 lib/parse_crypt_arg.h create mode 100644 lib/parse_grent.c create mode 100644 lib/parse_pwent.c create mode 100644 lib/passwd_nisplus.c create mode 100644 lib/print_error.c create mode 100644 lib/print_version.c create mode 100644 lib/public.h create mode 100644 lib/read-files-group.c create mode 100644 lib/read-files.c create mode 100644 lib/read-files.h create mode 100644 lib/remove_dir_rec.c create mode 100644 lib/remove_gr_mem.c create mode 100644 lib/selinux_utils.c create mode 100644 lib/str2date.c create mode 100644 lib/strtoid.c create mode 100644 lib/use_slp.c create mode 100644 lib/use_slp.h create mode 100644 lib/user.c create mode 100644 lib/utf8conv.c create mode 100644 lib/utf8conv.h create mode 100644 lib/yesno.c create mode 100644 lib/yesno.h create mode 100644 lib/yppasswd.h create mode 100644 lib/yppasswd_xdr.c create mode 100755 ltmain.sh create mode 100644 m4/Makefile.am create mode 100644 m4/Makefile.in create mode 100644 m4/codeset.m4 create mode 100644 m4/getline.m4 create mode 100644 m4/gettext.m4 create mode 100644 m4/glibc2.m4 create mode 100644 m4/glibc21.m4 create mode 100644 m4/iconv.m4 create mode 100644 m4/intdiv0.m4 create mode 100644 m4/intmax.m4 create mode 100644 m4/inttypes-h.m4 create mode 100644 m4/inttypes-pri.m4 create mode 100644 m4/inttypes.m4 create mode 100644 m4/inttypes_h.m4 create mode 100644 m4/isc-posix.m4 create mode 100644 m4/japhar_grep_cflags.m4 create mode 100644 m4/lcmessage.m4 create mode 100644 m4/lib-ld.m4 create mode 100644 m4/lib-link.m4 create mode 100644 m4/lib-prefix.m4 create mode 100644 m4/libtool.m4 create mode 100644 m4/lock.m4 create mode 100644 m4/longdouble.m4 create mode 100644 m4/longlong.m4 create mode 100644 m4/ltoptions.m4 create mode 100644 m4/ltsugar.m4 create mode 100644 m4/ltversion.m4 create mode 100644 m4/lt~obsolete.m4 create mode 100644 m4/nls.m4 create mode 100644 m4/po.m4 create mode 100644 m4/printf-posix.m4 create mode 100644 m4/progtest.m4 create mode 100644 m4/signed.m4 create mode 100644 m4/size_max.m4 create mode 100644 m4/stdint_h.m4 create mode 100644 m4/uintmax_t.m4 create mode 100644 m4/ulonglong.m4 create mode 100644 m4/visibility.m4 create mode 100644 m4/wchar_t.m4 create mode 100644 m4/wint_t.m4 create mode 100644 m4/xsize.m4 create mode 100755 missing create mode 100755 mkinstalldirs create mode 100644 packaging/pam.patch create mode 100644 packaging/pwdutils-no-add-needed.patch create mode 100644 packaging/pwdutils.changes create mode 100644 packaging/pwdutils.spec create mode 100644 packaging/useradd.default create mode 100644 plugins/Makefile.am create mode 100644 plugins/Makefile.in create mode 100644 plugins/liblog_audit.c create mode 100644 plugins/liblog_audit.map create mode 100644 plugins/liblog_laus.c create mode 100644 plugins/liblog_laus.map create mode 100644 plugins/liblog_syslog.c create mode 100644 plugins/liblog_syslog.map create mode 100644 po/LINGUAS create mode 100644 po/Makefile.in.in create mode 100644 po/Makevars create mode 100644 po/POTFILES.in create mode 100644 po/Rules-quot create mode 100644 po/boldquot.sed create mode 100644 po/da.gmo create mode 100644 po/da.po create mode 100644 po/de.gmo create mode 100644 po/de.po create mode 100644 po/en@boldquot.header create mode 100644 po/en@quot.header create mode 100644 po/fr.gmo create mode 100644 po/fr.po create mode 100644 po/id.gmo create mode 100644 po/id.po create mode 100644 po/insert-header.sin create mode 100644 po/nl.gmo create mode 100644 po/nl.po create mode 100644 po/pl.gmo create mode 100644 po/pl.po create mode 100644 po/pwdutils.pot create mode 100644 po/quot.sed create mode 100644 po/remove-potcdate.sin create mode 100644 po/stamp-po create mode 100644 po/sv.gmo create mode 100644 po/sv.po create mode 100644 po/vi.gmo create mode 100644 po/vi.po create mode 100644 src/Makefile.am create mode 100644 src/Makefile.in create mode 100644 src/chage.1 create mode 100644 src/chage.c create mode 100644 src/chfn.1 create mode 100644 src/chfn.c create mode 100644 src/chpasswd.8 create mode 100644 src/chpasswd.c create mode 100644 src/chsh.1 create mode 100644 src/chsh.c create mode 100644 src/expiry.1 create mode 100644 src/expiry.c create mode 100644 src/gpasswd.1 create mode 100644 src/gpasswd.c create mode 100644 src/groupadd.8 create mode 100644 src/groupadd.c create mode 100644 src/groupdel.8 create mode 100644 src/groupdel.c create mode 100644 src/groupmod.8 create mode 100644 src/groupmod.c create mode 100644 src/grpck.8 create mode 100644 src/grpck.c create mode 100644 src/grpconv.8 create mode 100644 src/grpconv.c create mode 100644 src/grpunconv.8 create mode 100644 src/grpunconv.c create mode 100644 src/newgrp.1 create mode 100644 src/newgrp.c create mode 100644 src/pam_rpasswd.8 create mode 100644 src/pam_rpasswd.c create mode 100644 src/pam_rpasswd.map create mode 100644 src/passwd.1 create mode 100644 src/passwd.c create mode 100644 src/pwck.8 create mode 100644 src/pwck.c create mode 100644 src/pwconv.8 create mode 100644 src/pwconv.c create mode 100644 src/pwunconv.8 create mode 100644 src/pwunconv.c create mode 100644 src/rpasswd-client.c create mode 100644 src/rpasswd-client.h create mode 100644 src/rpasswd.1 create mode 100644 src/rpasswd.c create mode 100644 src/rpasswd.conf.5 create mode 100644 src/rpasswdd.8 create mode 100644 src/rpasswdd.c create mode 100644 src/sg.1 create mode 100755 src/tst-32bit-uid-gid create mode 100755 src/tst-chage create mode 100755 src/tst-gpasswd create mode 100755 src/tst-groupadd create mode 100755 src/tst-groupmod create mode 100755 src/tst-grpck create mode 100755 src/tst-long-group-entry create mode 100755 src/tst-passwd create mode 100755 src/tst-pwck create mode 100755 src/tst-pwconv create mode 100755 src/tst-pwunconv create mode 100755 src/tst-useradd create mode 100755 src/tst-userdel create mode 100755 src/tst-usermod create mode 100644 src/useradd.8 create mode 100644 src/useradd.c create mode 100644 src/userdel.8 create mode 100644 src/userdel.c create mode 100644 src/usermod.8 create mode 100644 src/usermod.c create mode 100644 src/vigr.8 create mode 100644 src/vipw.8 create mode 100644 src/vipw.c diff --git a/ABOUT-NLS b/ABOUT-NLS new file mode 100644 index 0000000..3575535 --- /dev/null +++ b/ABOUT-NLS @@ -0,0 +1,1111 @@ +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. + + When reporting bugs in the `intl/' directory or bugs which may be +related to internationalization, you should tell about the version of +`gettext' which is used. The information can be found in the +`intl/VERSION' file, in internationalized packages. + +1.1 Quick configuration advice +============================== + +If you want to exploit the full power of internationalization, you +should configure it using + + ./configure --with-included-gettext + +to force usage of internationalizing routines provided within this +package, despite the existence of internationalizing capabilities in the +operating system where this package is being installed. So far, only +the `gettext' implementation in the GNU C library version 2 provides as +many features (such as locale alias, message inheritance, automatic +charset conversion or plural form handling) as the implementation here. +It is also not possible to offer this additional functionality on top +of a `catgets' implementation. Future versions of GNU `gettext' will +very likely convey even more functionality. So it might be a good idea +to change to GNU `gettext' as soon as possible. + + So you need _not_ provide this option if you are using GNU libc 2 or +you have installed a recent copy of the GNU gettext package with the +included `libintl'. + +1.2 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. If not, the included GNU +`gettext' library will be used. This library is wholly contained +within this package, usually in the `intl/' subdirectory, so prior +installation of the GNU `gettext' package is _not_ required. +Installers may use special options at configuration time for changing +the default behaviour. The commands: + + ./configure --with-included-gettext + ./configure --disable-nls + +will, respectively, bypass any pre-existing `gettext' to use the +internationalizing routines provided within this package, or else, +_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.a' file and +will decide to use this. This might not be desirable. You should use +the more recent version of the GNU `gettext' library. I.e. if the file +`intl/VERSION' shows that the library which comes with this package is +more recent, you should use + + ./configure --with-included-gettext + +to prevent auto-detection. + + The configuration process will not test for the `catgets' function +and therefore it will not be used. The reason is that even an +emulation of `gettext' on top of `catgets' could not provide all the +extensions of the GNU `gettext' library. + + 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.3 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. 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.4 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://www.iro.umontreal.ca/contrib/po/HTML/', in the "National 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 `translation@iro.umontreal.ca' 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 skill are praised more than +programming skill, here. + +1.5 Available Packages +====================== + +Languages are not equally supported in all packages. The following +matrix shows the current state of internationalization, as of July +2006. 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 ar az be bg bs ca cs cy da de el en en_GB eo + +----------------------------------------------------+ + GNUnet | [] | + a2ps | [] [] [] [] [] | + aegis | () | + ant-phone | () | + anubis | [] | + ap-utils | | + aspell | [] [] [] [] | + bash | [] [] [] | + batchelor | [] | + bfd | | + bibshelf | [] | + binutils | [] | + bison | [] [] | + bison-runtime | [] | + bluez-pin | [] [] [] [] [] | + cflow | [] | + clisp | [] [] | + console-tools | [] [] | + coreutils | [] [] [] [] | + cpio | | + cpplib | [] [] [] | + cryptonit | [] | + darkstat | [] () [] | + dialog | [] [] [] [] [] [] | + diffutils | [] [] [] [] [] [] | + doodle | [] | + e2fsprogs | [] [] | + enscript | [] [] [] [] | + error | [] [] [] [] | + fetchmail | [] [] () [] | + fileutils | [] [] | + findutils | [] [] [] | + flex | [] [] [] | + fslint | [] | + gas | | + gawk | [] [] [] | + gbiff | [] | + gcal | [] | + gcc | [] | + gettext-examples | [] [] [] [] [] | + gettext-runtime | [] [] [] [] [] | + gettext-tools | [] [] | + gimp-print | [] [] [] [] | + gip | [] | + gliv | [] | + glunarclock | [] | + gmult | [] [] | + gnubiff | () | + gnucash | () () [] | + gnucash-glossary | [] () | + gnuedu | | + gnulib | [] [] [] [] [] [] | + gnunet-gtk | | + gnutls | | + gpe-aerial | [] [] | + gpe-beam | [] [] | + gpe-calendar | [] [] | + gpe-clock | [] [] | + gpe-conf | [] [] | + gpe-contacts | | + gpe-edit | [] | + gpe-filemanager | | + gpe-go | [] | + gpe-login | [] [] | + gpe-ownerinfo | [] [] | + gpe-package | | + gpe-sketchbook | [] [] | + gpe-su | [] [] | + gpe-taskmanager | [] [] | + gpe-timesheet | [] | + gpe-today | [] [] | + gpe-todo | | + gphoto2 | [] [] [] [] | + gprof | [] [] | + gpsdrive | () () | + gramadoir | [] [] | + grep | [] [] [] [] [] [] | + gretl | | + gsasl | | + gss | | + gst-plugins | [] [] [] [] | + gst-plugins-base | [] [] [] | + gst-plugins-good | [] [] [] [] [] [] [] | + gstreamer | [] [] [] [] [] [] [] | + gtick | [] () | + gtkam | [] [] [] | + gtkorphan | [] [] | + gtkspell | [] [] [] [] | + gutenprint | [] | + hello | [] [] [] [] [] | + id-utils | [] [] | + impost | | + indent | [] [] [] | + iso_3166 | [] [] | + iso_3166_1 | [] [] [] [] [] | + iso_3166_2 | | + iso_3166_3 | [] | + iso_4217 | [] | + iso_639 | [] [] | + jpilot | [] | + jtag | | + jwhois | | + kbd | [] [] [] [] | + keytouch | | + keytouch-editor | | + keytouch-keyboa... | | + latrine | () | + ld | [] | + leafpad | [] [] [] [] [] | + libc | [] [] [] [] [] | + libexif | [] | + libextractor | [] | + libgpewidget | [] [] [] | + libgpg-error | [] | + libgphoto2 | [] [] | + libgphoto2_port | [] [] | + libgsasl | | + libiconv | [] [] | + libidn | [] [] | + lifelines | [] () | + lilypond | [] | + lingoteach | | + lynx | [] [] [] [] | + m4 | [] [] [] [] | + mailutils | [] | + make | [] [] | + man-db | [] () [] [] | + minicom | [] [] [] | + mysecretdiary | [] [] | + nano | [] [] () [] | + nano_1_0 | [] () [] [] | + opcodes | [] | + parted | | + pilot-qof | [] | + psmisc | [] | + pwdutils | | + python | | + qof | | + radius | [] | + recode | [] [] [] [] [] [] | + rpm | [] [] | + screem | | + scrollkeeper | [] [] [] [] [] [] [] [] | + sed | [] [] [] | + sh-utils | [] [] | + shared-mime-info | [] [] [] | + sharutils | [] [] [] [] [] [] | + shishi | | + silky | | + skencil | [] () | + sketch | [] () | + solfege | | + soundtracker | [] [] | + sp | [] | + stardict | [] | + system-tools-ba... | [] [] [] [] [] [] [] [] [] | + tar | [] | + texinfo | [] [] [] | + textutils | [] [] [] | + tin | () () | + tp-robot | [] | + tuxpaint | [] [] [] [] [] | + unicode-han-tra... | | + unicode-transla... | | + util-linux | [] [] [] [] | + vorbis-tools | [] [] [] [] | + wastesedge | () | + wdiff | [] [] [] [] | + wget | [] [] | + xchat | [] [] [] [] [] | + xkeyboard-config | | + xpad | [] [] | + +----------------------------------------------------+ + af am ar az be bg bs ca cs cy da de el en en_GB eo + 11 0 1 2 8 21 1 42 43 2 62 99 18 1 16 16 + + es et eu fa fi fr ga gl gu he hi hr hu id is it + +--------------------------------------------------+ + GNUnet | | + a2ps | [] [] [] () | + aegis | | + ant-phone | [] | + anubis | [] | + ap-utils | [] [] | + aspell | [] [] [] | + bash | [] [] [] | + batchelor | [] [] | + bfd | [] | + bibshelf | [] [] [] | + binutils | [] [] [] | + bison | [] [] [] [] [] [] | + bison-runtime | [] [] [] [] [] | + bluez-pin | [] [] [] [] [] | + cflow | | + clisp | [] [] | + console-tools | | + coreutils | [] [] [] [] [] [] | + cpio | [] [] [] | + cpplib | [] [] | + cryptonit | [] | + darkstat | [] () [] [] [] | + dialog | [] [] [] [] [] [] [] [] | + diffutils | [] [] [] [] [] [] [] [] [] | + doodle | [] [] | + e2fsprogs | [] [] [] | + enscript | [] [] [] | + error | [] [] [] [] [] | + fetchmail | [] | + fileutils | [] [] [] [] [] [] | + findutils | [] [] [] [] | + flex | [] [] [] | + fslint | [] | + gas | [] [] | + gawk | [] [] [] [] | + gbiff | [] | + gcal | [] [] | + gcc | [] | + gettext-examples | [] [] [] [] [] | + gettext-runtime | [] [] [] [] [] [] | + gettext-tools | [] [] [] | + gimp-print | [] [] | + gip | [] [] [] | + gliv | () | + glunarclock | [] [] [] | + gmult | [] [] [] | + gnubiff | () () | + gnucash | () () () | + gnucash-glossary | [] [] | + gnuedu | [] | + gnulib | [] [] [] [] [] [] [] [] | + gnunet-gtk | | + gnutls | | + gpe-aerial | [] [] | + gpe-beam | [] [] | + gpe-calendar | [] [] [] [] | + gpe-clock | [] [] [] [] | + gpe-conf | [] | + gpe-contacts | [] [] | + gpe-edit | [] [] [] [] | + gpe-filemanager | [] | + gpe-go | [] [] [] | + gpe-login | [] [] [] | + gpe-ownerinfo | [] [] [] [] [] | + gpe-package | [] | + gpe-sketchbook | [] [] | + gpe-su | [] [] [] [] | + gpe-taskmanager | [] [] [] | + gpe-timesheet | [] [] [] [] | + gpe-today | [] [] [] [] | + gpe-todo | [] | + gphoto2 | [] [] [] [] [] | + gprof | [] [] [] [] | + gpsdrive | () () [] () | + gramadoir | [] [] | + grep | [] [] [] [] [] [] [] [] [] [] [] [] | + gretl | [] [] [] | + gsasl | [] | + gss | [] | + gst-plugins | [] [] [] | + gst-plugins-base | [] [] | + gst-plugins-good | [] [] [] | + gstreamer | [] [] [] | + gtick | [] [] [] [] [] | + gtkam | [] [] [] [] | + gtkorphan | [] [] | + gtkspell | [] [] [] [] [] [] | + gutenprint | [] | + hello | [] [] [] [] [] [] [] [] [] [] [] [] [] | + id-utils | [] [] [] [] [] | + impost | [] [] | + indent | [] [] [] [] [] [] [] [] [] [] | + iso_3166 | [] [] [] | + iso_3166_1 | [] [] [] [] [] [] [] | + iso_3166_2 | [] | + iso_3166_3 | [] | + iso_4217 | [] [] [] [] | + iso_639 | [] [] [] [] [] | + jpilot | [] [] | + jtag | [] | + jwhois | [] [] [] [] [] | + kbd | [] [] | + keytouch | [] | + keytouch-editor | [] | + keytouch-keyboa... | [] | + latrine | [] [] [] | + ld | [] [] | + leafpad | [] [] [] [] [] [] | + libc | [] [] [] [] [] | + libexif | [] | + libextractor | [] | + libgpewidget | [] [] [] [] [] | + libgpg-error | | + libgphoto2 | [] [] [] | + libgphoto2_port | [] [] | + libgsasl | [] [] | + libiconv | [] | + libidn | [] [] | + lifelines | () | + lilypond | [] | + lingoteach | [] [] [] | + lynx | [] [] [] | + m4 | [] [] [] [] | + mailutils | [] [] | + make | [] [] [] [] [] [] [] [] | + man-db | () | + minicom | [] [] [] [] | + mysecretdiary | [] [] [] | + nano | [] () [] [] [] [] | + nano_1_0 | [] [] [] [] [] | + opcodes | [] [] [] [] | + parted | [] [] [] [] | + pilot-qof | | + psmisc | [] [] [] | + pwdutils | | + python | | + qof | | + radius | [] [] | + recode | [] [] [] [] [] [] [] [] | + rpm | [] [] | + screem | | + scrollkeeper | [] [] [] | + sed | [] [] [] [] [] | + sh-utils | [] [] [] [] [] [] [] | + shared-mime-info | [] [] [] [] [] [] | + sharutils | [] [] [] [] [] [] [] [] | + shishi | | + silky | [] | + skencil | [] [] | + sketch | [] [] | + solfege | [] | + soundtracker | [] [] [] | + sp | [] | + stardict | [] | + system-tools-ba... | [] [] [] [] [] [] [] [] | + tar | [] [] [] [] [] [] | + texinfo | [] [] | + textutils | [] [] [] [] [] | + tin | [] () | + tp-robot | [] [] [] [] | + tuxpaint | [] [] | + unicode-han-tra... | | + unicode-transla... | [] [] | + util-linux | [] [] [] [] [] [] [] | + vorbis-tools | [] [] | + wastesedge | () | + wdiff | [] [] [] [] [] [] [] [] | + wget | [] [] [] [] [] [] [] [] | + xchat | [] [] [] [] [] [] [] [] | + xkeyboard-config | [] [] [] [] | + xpad | [] [] [] | + +--------------------------------------------------+ + es et eu fa fi fr ga gl gu he hi hr hu id is it + 89 21 16 2 41 119 61 14 1 8 1 6 61 30 0 53 + + ja ko ku ky lg lt lv mk mn ms mt nb ne nl nn no + +--------------------------------------------------+ + GNUnet | | + a2ps | () [] [] () | + aegis | () | + ant-phone | [] | + anubis | [] [] [] | + ap-utils | [] | + aspell | [] [] | + bash | [] | + batchelor | [] [] | + bfd | | + bibshelf | [] | + binutils | | + bison | [] [] [] | + bison-runtime | [] [] [] | + bluez-pin | [] [] [] | + cflow | | + clisp | [] | + console-tools | | + coreutils | [] | + cpio | | + cpplib | [] | + cryptonit | [] | + darkstat | [] [] | + dialog | [] [] | + diffutils | [] [] [] | + doodle | | + e2fsprogs | [] | + enscript | [] | + error | [] | + fetchmail | [] [] | + fileutils | [] [] | + findutils | [] | + flex | [] [] | + fslint | [] [] | + gas | | + gawk | [] [] | + gbiff | [] | + gcal | | + gcc | | + gettext-examples | [] [] | + gettext-runtime | [] [] [] | + gettext-tools | [] [] | + gimp-print | [] [] | + gip | [] [] | + gliv | [] | + glunarclock | [] [] | + gmult | [] [] | + gnubiff | | + gnucash | () () | + gnucash-glossary | [] | + gnuedu | | + gnulib | [] [] [] [] | + gnunet-gtk | | + gnutls | | + gpe-aerial | [] | + gpe-beam | [] | + gpe-calendar | [] | + gpe-clock | [] [] | + gpe-conf | [] [] | + gpe-contacts | [] | + gpe-edit | [] [] | + gpe-filemanager | [] | + gpe-go | [] [] | + gpe-login | [] [] | + gpe-ownerinfo | [] | + gpe-package | [] | + gpe-sketchbook | [] [] | + gpe-su | [] [] | + gpe-taskmanager | [] [] [] | + gpe-timesheet | [] | + gpe-today | [] | + gpe-todo | | + gphoto2 | [] [] | + gprof | | + gpsdrive | () () () | + gramadoir | () | + grep | [] [] [] | + gretl | | + gsasl | [] | + gss | | + gst-plugins | [] | + gst-plugins-base | | + gst-plugins-good | [] | + gstreamer | [] | + gtick | [] | + gtkam | [] | + gtkorphan | [] | + gtkspell | [] [] | + gutenprint | | + hello | [] [] [] [] [] [] [] [] | + id-utils | [] | + impost | | + indent | [] [] | + iso_3166 | [] | + iso_3166_1 | [] [] | + iso_3166_2 | [] | + iso_3166_3 | [] | + iso_4217 | [] [] [] | + iso_639 | [] [] | + jpilot | () () () | + jtag | | + jwhois | [] | + kbd | [] | + keytouch | [] | + keytouch-editor | | + keytouch-keyboa... | | + latrine | [] | + ld | | + leafpad | [] [] | + libc | [] [] [] [] [] | + libexif | | + libextractor | | + libgpewidget | [] | + libgpg-error | | + libgphoto2 | [] | + libgphoto2_port | [] | + libgsasl | [] | + libiconv | | + libidn | [] [] | + lifelines | [] | + lilypond | | + lingoteach | [] | + lynx | [] [] | + m4 | [] [] | + mailutils | | + make | [] [] [] | + man-db | () | + minicom | [] | + mysecretdiary | [] | + nano | [] [] [] | + nano_1_0 | [] [] [] | + opcodes | [] | + parted | [] [] | + pilot-qof | | + psmisc | [] [] [] | + pwdutils | | + python | | + qof | | + radius | | + recode | [] | + rpm | [] [] | + screem | [] | + scrollkeeper | [] [] [] [] | + sed | [] [] | + sh-utils | [] [] | + shared-mime-info | [] [] [] [] [] | + sharutils | [] [] | + shishi | | + silky | [] | + skencil | | + sketch | | + solfege | | + soundtracker | | + sp | () | + stardict | [] [] | + system-tools-ba... | [] [] [] [] | + tar | [] [] [] | + texinfo | [] [] [] | + textutils | [] [] [] | + tin | | + tp-robot | [] | + tuxpaint | [] | + unicode-han-tra... | | + unicode-transla... | | + util-linux | [] [] | + vorbis-tools | [] | + wastesedge | [] | + wdiff | [] [] | + wget | [] [] | + xchat | [] [] [] [] | + xkeyboard-config | [] | + xpad | [] [] [] | + +--------------------------------------------------+ + ja ko ku ky lg lt lv mk mn ms mt nb ne nl nn no + 40 24 2 1 1 3 1 2 3 21 0 15 1 101 5 3 + + nso or pa pl pt pt_BR rm ro ru rw sk sl sq sr sv ta + +------------------------------------------------------+ + GNUnet | | + a2ps | () [] [] [] [] [] [] | + aegis | () () | + ant-phone | [] [] | + anubis | [] [] [] | + ap-utils | () | + aspell | [] [] | + bash | [] [] [] | + batchelor | [] [] | + bfd | | + bibshelf | [] | + binutils | [] [] | + bison | [] [] [] [] [] | + bison-runtime | [] [] [] [] | + bluez-pin | [] [] [] [] [] [] [] [] [] | + cflow | [] | + clisp | [] | + console-tools | [] | + coreutils | [] [] [] [] | + cpio | [] [] [] | + cpplib | [] | + cryptonit | [] [] | + darkstat | [] [] [] [] [] [] | + dialog | [] [] [] [] [] [] [] [] [] | + diffutils | [] [] [] [] [] [] | + doodle | [] [] | + e2fsprogs | [] [] | + enscript | [] [] [] [] [] | + error | [] [] [] [] | + fetchmail | [] [] [] | + fileutils | [] [] [] [] [] | + findutils | [] [] [] [] [] [] | + flex | [] [] [] [] [] | + fslint | [] [] [] [] | + gas | | + gawk | [] [] [] [] | + gbiff | [] | + gcal | [] | + gcc | [] | + gettext-examples | [] [] [] [] [] [] [] [] | + gettext-runtime | [] [] [] [] [] [] [] [] | + gettext-tools | [] [] [] [] [] [] [] | + gimp-print | [] [] | + gip | [] [] [] [] | + gliv | [] [] [] [] | + glunarclock | [] [] [] [] [] [] | + gmult | [] [] [] [] | + gnubiff | () | + gnucash | () [] | + gnucash-glossary | [] [] [] | + gnuedu | | + gnulib | [] [] [] [] [] | + gnunet-gtk | [] | + gnutls | [] [] | + gpe-aerial | [] [] [] [] [] [] [] | + gpe-beam | [] [] [] [] [] [] [] | + gpe-calendar | [] [] [] [] [] [] [] [] | + gpe-clock | [] [] [] [] [] [] [] [] | + gpe-conf | [] [] [] [] [] [] [] | + gpe-contacts | [] [] [] [] [] | + gpe-edit | [] [] [] [] [] [] [] [] | + gpe-filemanager | [] [] | + gpe-go | [] [] [] [] [] [] | + gpe-login | [] [] [] [] [] [] [] [] | + gpe-ownerinfo | [] [] [] [] [] [] [] [] | + gpe-package | [] [] | + gpe-sketchbook | [] [] [] [] [] [] [] [] | + gpe-su | [] [] [] [] [] [] [] [] | + gpe-taskmanager | [] [] [] [] [] [] [] [] | + gpe-timesheet | [] [] [] [] [] [] [] [] | + gpe-today | [] [] [] [] [] [] [] [] | + gpe-todo | [] [] [] [] | + gphoto2 | [] [] [] [] [] | + gprof | [] [] [] | + gpsdrive | [] [] [] | + gramadoir | [] [] | + grep | [] [] [] [] [] [] [] [] | + gretl | [] | + gsasl | [] [] | + gss | [] [] [] | + gst-plugins | [] [] [] [] | + gst-plugins-base | [] | + gst-plugins-good | [] [] [] [] | + gstreamer | [] [] [] | + gtick | [] [] [] | + gtkam | [] [] [] [] | + gtkorphan | [] | + gtkspell | [] [] [] [] [] [] [] [] | + gutenprint | [] | + hello | [] [] [] [] [] [] [] [] | + id-utils | [] [] [] [] | + impost | [] | + indent | [] [] [] [] [] [] | + iso_3166 | [] [] [] [] [] [] | + iso_3166_1 | [] [] [] [] | + iso_3166_2 | | + iso_3166_3 | [] [] [] [] | + iso_4217 | [] [] [] [] | + iso_639 | [] [] [] [] | + jpilot | | + jtag | [] | + jwhois | [] [] [] [] | + kbd | [] [] [] | + keytouch | [] | + keytouch-editor | [] | + keytouch-keyboa... | [] | + latrine | [] [] | + ld | [] | + leafpad | [] [] [] [] [] [] | + libc | [] [] [] [] [] | + libexif | [] | + libextractor | [] [] | + libgpewidget | [] [] [] [] [] [] [] | + libgpg-error | [] [] | + libgphoto2 | [] | + libgphoto2_port | [] [] [] | + libgsasl | [] [] [] [] | + libiconv | | + libidn | [] [] () | + lifelines | [] [] | + lilypond | | + lingoteach | [] | + lynx | [] [] [] | + m4 | [] [] [] [] [] | + mailutils | [] [] [] [] | + make | [] [] [] [] | + man-db | [] [] | + minicom | [] [] [] [] [] | + mysecretdiary | [] [] [] [] | + nano | [] [] | + nano_1_0 | [] [] [] [] | + opcodes | [] [] | + parted | [] | + pilot-qof | [] | + psmisc | [] [] | + pwdutils | [] [] | + python | | + qof | [] | + radius | [] [] | + recode | [] [] [] [] [] [] [] | + rpm | [] [] [] [] | + screem | | + scrollkeeper | [] [] [] [] [] [] [] | + sed | [] [] [] [] [] [] [] [] [] | + sh-utils | [] [] [] | + shared-mime-info | [] [] [] [] [] | + sharutils | [] [] [] [] | + shishi | [] | + silky | [] | + skencil | [] [] [] | + sketch | [] [] [] | + solfege | [] | + soundtracker | [] [] | + sp | | + stardict | [] [] [] | + system-tools-ba... | [] [] [] [] [] [] [] [] [] | + tar | [] [] [] [] [] | + texinfo | [] [] [] [] | + textutils | [] [] [] | + tin | () | + tp-robot | [] | + tuxpaint | [] [] [] [] [] | + unicode-han-tra... | | + unicode-transla... | | + util-linux | [] [] [] [] | + vorbis-tools | [] [] | + wastesedge | | + wdiff | [] [] [] [] [] [] | + wget | [] [] [] [] | + xchat | [] [] [] [] [] [] [] | + xkeyboard-config | [] [] | + xpad | [] [] [] | + +------------------------------------------------------+ + nso or pa pl pt pt_BR rm ro ru rw sk sl sq sr sv ta + 0 2 3 58 31 53 5 76 72 5 42 48 12 51 130 2 + + tg th tk tr uk ven vi wa xh zh_CN zh_HK zh_TW zu + +---------------------------------------------------+ + GNUnet | [] | 2 + a2ps | [] [] [] | 19 + aegis | | 0 + ant-phone | [] [] | 6 + anubis | [] [] [] | 11 + ap-utils | () [] | 4 + aspell | [] [] [] | 14 + bash | [] | 11 + batchelor | [] [] | 9 + bfd | | 1 + bibshelf | [] | 7 + binutils | [] [] [] | 9 + bison | [] [] [] | 19 + bison-runtime | [] [] [] | 16 + bluez-pin | [] [] [] [] [] [] | 28 + cflow | [] [] | 4 + clisp | | 6 + console-tools | [] [] | 5 + coreutils | [] [] | 17 + cpio | [] [] [] | 9 + cpplib | [] [] [] [] | 11 + cryptonit | | 5 + darkstat | [] () () | 15 + dialog | [] [] [] [] [] | 30 + diffutils | [] [] [] [] | 28 + doodle | [] | 6 + e2fsprogs | [] [] | 10 + enscript | [] [] [] | 16 + error | [] [] [] [] | 18 + fetchmail | [] [] | 12 + fileutils | [] [] [] | 18 + findutils | [] [] [] | 17 + flex | [] [] | 15 + fslint | [] | 9 + gas | [] | 3 + gawk | [] [] | 15 + gbiff | [] | 5 + gcal | [] | 5 + gcc | [] [] [] | 6 + gettext-examples | [] [] [] [] [] [] | 26 + gettext-runtime | [] [] [] [] [] [] | 28 + gettext-tools | [] [] [] [] [] | 19 + gimp-print | [] [] | 12 + gip | [] [] | 12 + gliv | [] [] | 8 + glunarclock | [] [] [] | 15 + gmult | [] [] [] [] | 15 + gnubiff | [] | 1 + gnucash | () | 2 + gnucash-glossary | [] [] | 9 + gnuedu | [] | 2 + gnulib | [] [] [] [] [] | 28 + gnunet-gtk | | 1 + gnutls | | 2 + gpe-aerial | [] [] | 14 + gpe-beam | [] [] | 14 + gpe-calendar | [] [] [] [] | 19 + gpe-clock | [] [] [] [] | 20 + gpe-conf | [] [] | 14 + gpe-contacts | [] [] | 10 + gpe-edit | [] [] [] [] | 19 + gpe-filemanager | [] | 5 + gpe-go | [] [] | 14 + gpe-login | [] [] [] [] [] | 20 + gpe-ownerinfo | [] [] [] [] | 20 + gpe-package | [] | 5 + gpe-sketchbook | [] [] | 16 + gpe-su | [] [] [] | 19 + gpe-taskmanager | [] [] [] | 19 + gpe-timesheet | [] [] [] [] | 18 + gpe-today | [] [] [] [] [] | 20 + gpe-todo | [] | 6 + gphoto2 | [] [] [] [] | 20 + gprof | [] [] | 11 + gpsdrive | | 4 + gramadoir | [] | 7 + grep | [] [] [] [] | 33 + gretl | | 4 + gsasl | [] [] | 6 + gss | [] | 5 + gst-plugins | [] [] [] | 15 + gst-plugins-base | [] [] [] | 9 + gst-plugins-good | [] [] [] | 18 + gstreamer | [] [] [] | 17 + gtick | [] | 11 + gtkam | [] | 13 + gtkorphan | [] | 7 + gtkspell | [] [] [] [] [] [] | 26 + gutenprint | | 3 + hello | [] [] [] [] [] | 39 + id-utils | [] [] | 14 + impost | [] | 4 + indent | [] [] [] [] | 25 + iso_3166 | [] [] [] | 15 + iso_3166_1 | [] [] | 20 + iso_3166_2 | | 2 + iso_3166_3 | [] [] | 9 + iso_4217 | [] [] | 14 + iso_639 | [] | 14 + jpilot | [] [] [] [] | 7 + jtag | [] | 3 + jwhois | [] [] [] | 13 + kbd | [] [] | 12 + keytouch | [] | 4 + keytouch-editor | | 2 + keytouch-keyboa... | | 2 + latrine | [] [] | 8 + ld | [] [] [] [] | 8 + leafpad | [] [] [] [] | 23 + libc | [] [] [] | 23 + libexif | [] | 4 + libextractor | [] | 5 + libgpewidget | [] [] [] | 19 + libgpg-error | [] | 4 + libgphoto2 | [] | 8 + libgphoto2_port | [] [] [] | 11 + libgsasl | [] | 8 + libiconv | [] | 4 + libidn | [] [] | 10 + lifelines | | 4 + lilypond | | 2 + lingoteach | [] | 6 + lynx | [] [] [] | 15 + m4 | [] [] [] | 18 + mailutils | [] | 8 + make | [] [] [] | 20 + man-db | [] | 6 + minicom | [] | 14 + mysecretdiary | [] [] | 12 + nano | [] [] | 15 + nano_1_0 | [] [] [] | 18 + opcodes | [] [] | 10 + parted | [] [] [] | 10 + pilot-qof | [] | 3 + psmisc | [] | 10 + pwdutils | [] | 3 + python | | 0 + qof | [] | 2 + radius | [] | 6 + recode | [] [] [] | 25 + rpm | [] [] [] [] | 14 + screem | [] | 2 + scrollkeeper | [] [] [] [] | 26 + sed | [] [] [] | 22 + sh-utils | [] | 15 + shared-mime-info | [] [] [] [] | 23 + sharutils | [] [] [] | 23 + shishi | | 1 + silky | [] | 4 + skencil | [] | 7 + sketch | | 6 + solfege | | 2 + soundtracker | [] [] | 9 + sp | [] | 3 + stardict | [] [] [] [] | 11 + system-tools-ba... | [] [] [] [] [] [] [] | 37 + tar | [] [] [] [] | 19 + texinfo | [] [] [] | 15 + textutils | [] [] [] | 17 + tin | | 1 + tp-robot | [] [] [] | 10 + tuxpaint | [] [] [] | 16 + unicode-han-tra... | | 0 + unicode-transla... | | 2 + util-linux | [] [] [] | 20 + vorbis-tools | [] [] | 11 + wastesedge | | 1 + wdiff | [] [] | 22 + wget | [] [] [] | 19 + xchat | [] [] [] [] | 28 + xkeyboard-config | [] [] [] [] | 11 + xpad | [] [] [] | 14 + +---------------------------------------------------+ + 77 teams tg th tk tr uk ven vi wa xh zh_CN zh_HK zh_TW zu + 172 domains 0 1 1 78 39 0 135 13 1 50 3 54 0 2054 + + 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 July 2006 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://www.iro.umontreal.ca/contrib/po/HTML/matrix.html'. + +1.6 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 Library 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 +`translation@iro.umontreal.ca' to make the `.pot' files available to +the translation teams. + diff --git a/AUTHORS b/AUTHORS new file mode 100644 index 0000000..a128437 --- /dev/null +++ b/AUTHORS @@ -0,0 +1,3 @@ + +Thorsten Kukuk + diff --git a/COPYING b/COPYING new file mode 100644 index 0000000..d60c31a --- /dev/null +++ b/COPYING @@ -0,0 +1,340 @@ + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc. + 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Library General Public License instead.) You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must show them these terms so they know their +rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute verbatim copies of the Program's +source code as you receive it, in any medium, provided that you +conspicuously and appropriately publish on each copy an appropriate +copyright notice and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) year name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, the commands you use may +be called something other than `show w' and `show c'; they could even be +mouse-clicks or menu items--whatever suits your program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the program + `Gnomovision' (which makes passes at compilers) written by James Hacker. + + , 1 April 1989 + Ty Coon, President of Vice + +This General Public License does not permit incorporating your program into +proprietary programs. If your program is a subroutine library, you may +consider it more useful to permit linking proprietary applications with the +library. If this is what you want to do, use the GNU Library General +Public License instead of this License. diff --git a/ChangeLog b/ChangeLog new file mode 100644 index 0000000..5ab08af --- /dev/null +++ b/ChangeLog @@ -0,0 +1,2241 @@ +2012-05-08 Thorsten Kukuk + + * release version 3.2.19 + + * src/passwd.c (pw_status): Fix check for locked password + [bnc#754081]. + +2012-03-13 Thorsten Kukuk + + * release version 3.2.18 + +2012-01-31 Thorsten Kukuk + + * lib/chown_dir_rec.c (chown_entry): Check against correct + old values [bnc#738114]. + +2011-08-05 Thorsten Kukuk + + * src/gpasswd.c (main): Remove dead code. + +2011-05-23 Thorsten Kukuk + + * lib/user.c (write_user_data): jump to correct label. + +2011-05=16 Thorsten Kukuk + + * release 3.2.17 + + * etc/useradd.local: Fix syntax error. + +2011-05-11 Thorsten Kukuk + + * release 3.2.16 + + * etc/default/passwd: remove blowfish, make sha512 default + [FATE#312321]. + +2011-05-10 Thorsten Kukuk + + * release 3.2.15 + + * src/newgrp.c (main): Try at first getgroups to honour + dynamically assigned groups (for example by pam_group) + [bnc#680833]. + +2011-02-02 Thorsten Kukuk + + * etc/useradd.local: Merge SELinux patch. + +2011-02-01 Thorsten Kukuk + + * release 3.2.14 + + * lib/parse_grent.c (parse_grent): Special rules for +/- not + in strict mode. + * lib/parse_pwent.c (parse_pwent): Likewise. + + * src/grpck.c (loop_over_group_file): Don't write two newlines + to /etc/group, check +/- entries,too. [FATE#310660]. + + * src/pwck.c (loop_over_passwd_file): Don't write two newlines, + check +/- entries,too. [FATE#310660]. + (loop_over_shadow_file): Likewise. + + * etc/login.defs: Remove LOGIN_RETRIES. + * etc/login.defs.5: Likewise. + * src/rpasswd-client.c: Use SSLv3 only, set auto retry option. + +2010-10-11 Thorsten Kukuk + + * release 3.2.13 + + * lib/copy_dir_rec.c: Only copy regular files [bnc#645140]. + + * po/vi.po: Update. + +2010-09-17 Thorsten Kukuk + + * release 3.2.12 + + * lib/group.c (write_group_data): Call fflush/fsync before + closing freshly written group files [bnc#639753]. + + * lib/user.c (write_user_data): Don't close old file twice + in error case. + +2010-08-12 Thorsten Kukuk + + * README: Remove link to dead mailinglist archive. + * po/sv.po: Update. + * po/fr.po: Likewise. + +2010-07-08 Thorsten Kukuk + + * release 3.2.11 + + * src/rpasswdd.c: Don't translate debug messages. + Patch by Benno Schulenberg. + * po/id.po: Update. + * po/da.po: Likewise. + * po/pl.po: Likewise. + * po/nl.po: New translation. + * po/LINUGUAS: Add nl. + +2010-06-18 Thorsten Kukuk + + * release 3.2.10 + + * src/useradd.c: Include sys/stat.h. + * src/userdel.c: Likewise. + * src/usermod.c: Likewise. + Reported by Ludovic Courtès. + + * src/pwck.c (main): Fix long read-only option. + * src/gpck.c (main): Likewise. + Reported by Dieter Bloms. + + * po/pl.po: Fix encoding. + +2010-05-19 Thorsten Kukuk + + * release 3.2.9 + + * src/useradd.c: Move umask value from /etc/login.defs to + /etc/default/useradd [bnc#606249]. + * src/useradd.8: Document new -U umask option. + * etc/login.defs: Mark UMASK as deprecated and point to new + location. + * etc/login.defs.5: Remove UMASK. + +2010-02-12 Thorsten Kukuk + + * release 3.2.8 + + * po/de.po: Fix encoding. + +2010-02-03 Thorsten Kukuk + + * src/usermod.8: Document -A and -R option. + + * src/pam_rpasswd.8: Document quiet option. + + * src/pam_rpasswd.c: Add option "quiet". + + * src/rpasswd.c (main): Adjust connect_to_server call. + + * src/rpasswd-client.c (connect_to_server): Add new flag "quiet". + +2009-11-30 Thorsten Kukuk + + * release 3.2.7 + + * src/userdel.c (remove_from_secondary_groups): Change pointer + in correct place of loop [bnc#551823]. + +2009-11-05 Thorsten Kukuk + + * release 3.2.6 + + * src/pam_rpasswd.c (handle_responses): Check if there + is really data for the client, else don't ask for it (solves + [bnc#551835], too.). + +2009-10-15 Thorsten Kukuk + + * etc/login.defs.5: HUSHLOGIN_FILE: remove PAM part. + + * po/id.po: Update. + * po/da.po: Likewise. + * po/vi.po: Likewise. + +2009-08-04 Thorsten Kukuk + + * etc/login.defs.5: Adjust HUSHLOGIN_FILE comment, remove + LASTLOG_ENAB [bnc#527336]. + +2009-07-22 Thorsten Kukuk + + * po/fr.po: Update. + * po/pl.po: Likewise. + * po/sv.po: Likewise. + +2009-07-21 Thorsten Kukuk + + * release 3.2.5 + + * po/da.po: New translation. + + * src/pwconv.c (main): Remove temporary files on error. + + * src/Makefile.am (uninstall-hook): Add uninstall-hook. + +2009-07-16 Thorsten Kukuk + + * release 3.2.4 + + * lib/user.c (write_user_data): Call fflush and fsync to make + sure data on disk is really current. + +2009-04-22 Thorsten Kukuk + + * release version 3.2.3 + + * etc/default/passwd: Document sha256,sha512. + +2009-03-30 Thorsten Kukuk + + * po/fr.po: New. + * po/id.po: New. + +2008-11-04 Thorsten Kukuk + + * release version 3.2.2 + + * src/useradd.c (main): Don't lock system accounts by default. + +2008-04-11 Thorsten Kukuk + + * release version 3.2.1 + + * configure.in: change check to xcrypt_gensalt_r. + * lib/parse_crypt_arg.c: Adjust #ifdefs. + * src/chpasswd.c: Likewise. + * src/gpasswd.c: Likewise. + +2008-02-14 Thorsten Kukuk + + * release version 3.2.0 + + * lib/libldap.c: Check asprintf return value. + * lib/call_script.c (call_script): Likewise. + * src/rpasswd-client.c: Likewise. + * src/rpasswdd.c: Likewise. + * src/chage.c: Likewise. + + * lib/msg_table.h: New format for msg_table, includes now + result. + * plugins/liblog_syslog.c (syslog_sec_log): Adjust for new + msg_table. + * plugins/liblog_audit.c (audit_sec_log): Likewise. + + * src/useradd.c: Add --preferred-uid option. + * src/groupadd.c: Likewise. + * src/groupadd.8: Document new option. + * src/useradd.8: Likewise. + Patch by Ludwig Nussel + +2007-06-22 Thorsten Kukuk + + * release version 3.1.4 + + * src/pwconv.c (main): Support NIS entries [bnc#285834]. + + * src/pwconv.8: Document that orphaned entries in /etc/shadow + will be removed [bnc#285834]. + +2007-03-08 Thorsten Kukuk + + * src/pwconv.8: Fix syntax error. + +2007-02-28 Thorsten Kukuk + + * src/passwd.c (bioapi_chauthtok): Fix typo. Reported by + Clytie Siddall . + + * po/sv.po: Update translation. + * po/vi.po: Update translation. + +2007-02-14 Thorsten Kukuk + + * po/pl.po: Update translation. + +2007-01-22 Thorsten Kukuk + + * etc/login.defs.5: Remove FTMP_FILE. + * etc/login.defs: Likewise. + +2006-11-30 Thorsten Kukuk + + * release version 3.1.3 + + * src/gpasswd.c: Add support to read password from stdin. + Based on patch from Nolan Eakins . + + * etc/login.defs: Fix typos. + * etc/default/passwd: Likewise. + Reported by Silvan Minghetti . + + * po/sv.po: Update swedish translation. + + * src/newgrp.c: Remove debug output. + +2006-10-23 Thorsten Kukuk + + * release version 3.1.2 + + * etc/userdel-pre.local: Check if crontab exists before calling it. + + * src/pwconv.c (main): Don't free static strings. + + * src/chage.c: Don't call locale functions if NLS is disabled. + * src/chfn.c: Likewise. + * src/chpasswd.c: Likewise. + * src/chsh.c: Likewise. + * src/expiry.c: Likewise. + * src/gpasswd.c: Likewise. + * src/groupadd.c: Likewise. + * src/groupdel.c: Likewise. + * src/groupmod.c: Likewise. + * src/grpck.c: Likewise. + * src/grpconv.c: Likewise. + * src/grpunconv.c: Likewise. + * src/newgrp.c: Likewise. + * src/passwd.c: Likewise. + * src/pwck.c: Likewise. + * src/pwconv.c: Likewise. + * src/pwunconv.c: Likewise. + * src/rpasswd.c: Likewise. + * src/rpasswdd.c: Likewise. + * src/useradd.c: Likewise. + * src/userdel.c: Likewise. + * src/usermod.c: Likewise. + * src/vipw.c: Likewise. + Patch from Mark Rosenstand . + +2006-09-05 Thorsten Kukuk + + * release version 3.1.1 + + * etc/pamd.d/chage: Update to use include statement. + * etc/pam.d/chfn: Likewise. + * etc/pam.d/chsh: Likewise. + * etc/pam.d/passwd: Likewise. + * etc/pam.d/rpasswd: Likewise. + * etc/pam.d/shadow: Likewise. + * etc/pam.d/useradd: Likewise. + + * etc/login.defs: Enable groupadd.local by default. + +2006-07-25 Thorsten Kukuk + + * release version 3.1.0 + + * src/gpasswd.1: Document -l and -u options. + + * src/gpasswd.c (main): Copy getpass() result for further + usage [BNC #190932] + (main): Add support for -l and -u flags. + +2006-06-01 Thorsten Kukuk + + * src/passwd.c (main): Check return value of setuid call. + +2006-05-21 Thorsten Kukuk + + * src/usermod.8: Document -L and -U option. + + * src/passwd.c (passwd_main): Optimize lock/unlock of password. + + * src/usermod.c (main): Implement lock/unlock of password. + + * src/tst-chage: Adjust for latest chage fixes. + + * src/tst-usermod: New test. + * src/Makefile.am: Add tst-usermod. + +2006-05-09 Thorsten Kukuk + + * src/newgrp.c (main): Preserve grp pointer [SuSE #173696]. + +2006-03-15 Ralf Haferkamp + + * lib/group.c: Add support for rfc2307bis. + * lib/libldap.c: Likewise. + * lib/libldap.h: Likewise. + +2006-02-15 Thorsten Kukuk + + * po/vi.po: New translation. + +2006-01-25 Thorsten Kukuk + + * src/passwd.c: Remove never implemented -h option. + * src/passwd.1: Likewise. + +2006-01-08 Thorsten Kukuk + + * po/sv.po: New swedish translation + + * configure.in: Add swedish translation + +2005-12-27 Thorsten Kukuk + + * src/passwd.c (passwd_main): -d, -l and -u are exclusive. + + * src/passwd.1: Document --bioapi option. + +2005-12-25 Thorsten Kukuk + + * src/Makefile.am (passwd_LDADD): Link against bioapi library. + + * configure.in: Check for BioAPI. + +2005-12-02 Thorsten Kukuk + + * lib/libldap.c (ldap_create_user): Fix off by one error. + Reported by David Binderman . + +2005-12-02 Thorsten Kukuk + + * release version 3.0.7 + + * src/passwd.1: Document -P option. + + * src/passwd.c (passwd_main): Don't bail out if service + is unknown and we don't need it. + +2005-11-14 Thorsten Kukuk + + * src/passwd.1: Fix value for disabling inactive field. + +2005-10-24 Thorsten Kukuk + + * release version 3.0.6 + + * src/chfn.c (main): Fix typo: work_phone -> home_phone. + +2005-10-04 Thorsten Kukuk + + * release version 3.0.5 + + * src/pam_rpasswd.c: Include syslog.h. + +2005-09-13 Thorsten Kukuk + + * etc/login.defs: Add missing 'Z's to CHARACTER_CLASS. + Reported by Bernd Glueckert . + +2005-08-17 Thorsten Kukuk + + * release version 3.0.4 + + * src/pam_rpasswd.c (pam_sm_chauthtok): Rewrote part to show + SLP information about found rpasswd daemon. + +2005-08-15 Thorsten Kukuk + + * release version 3.0.3 + + * src/usermod.c (main): Adjust sp_lstchg if -p option is given. + + * src/chage.c (print_shadow_info): password expires and inactive + and account expires are disabled with -1, not 0. + + * src/groupmod.8: Rename -r option to --service. + * src/usermod.8: Likewise. + + * src/usermod.c (print_help): Remove wrong -k option. + + * src/useradd.c (create_home_directory): Don't modify existing + home directory. + +2005-08-11 Thorsten Kukuk + + * src/vipw.c: Include i18n.h. + * src/usermod.c: Likewise. + * src/userdel.c: Likewise. + * src/useradd.c: Likewise. + * src/rpasswdd.c: Likewise. + * src/rpasswd.c: Likewise. + * src/pwconv.c: Likewise. + * src/pwunconv.c: Likewise. + * src/passwd.c: Likewise. + * src/pwck.c: Likewise. + * src/newgrp.c: Likewise. + * src/grpunconv.c: Likewise. + * src/grpconv.c: Likewise. + * src/grpck.c: Likewise. + * src/groupmod.c: Likewise. + * src/groupdel.c: Likewise. + * src/groupadd.c: Likewise. + * src/gpasswd.c: Likewise. + * src/expiry.c: Likewise. + * src/chsh.c: Likewise. + * src/chpasswd.c: Likewise. + * src/chfn.c: Likewise. + * src/chage.c: Likewise. + * lib/user.c: Likewise. + * lib/selinux_utils.c: Likewise. + * lib/remove_dir_rec.c: Likewise. + * lib/print_error.c: Likewise. + * lib/passwd_nisplus.c: Likewise. + * lib/parse_crypt_arg.c: Likewise. + * lib/logging.c: Likewise. + * lib/lock_database.c: Likewise. + * lib/is_logged_in.c: Likewise. + * lib/group.c: Likewise. + * lib/libldap.c: Likewise. + * lib/get_ldap_password.c: Likewise. + * lib/get_caller_dn.c: Likewise. + * lib/copy_xattr.c: Likewise. + * lib/copy_dir_rec.c: Likewise. + * lib/chown_dir_rec.c: Likewise. + * lib/call_script.c: Likewise. + * lib/authentication.c: Likewise. + +2005-07-21 Thorsten Kukuk + + * po/pl.po: Update fram translation project + +2005-07-15 Thorsten Kukuk + + * lib/i18n.h: New. + +2005-07-13 Thorsten Kukuk + + * release version 3.0.2 + + * src/pam_rpasswd.c (pam_sm_chauthtok): Print description of + found host if available. + +2005-07-12 Thorsten Kukuk + + * src/usermod.c (main): Handle -a -G like -A (for shadow + compatibility). + + * src/usermod.c (main): Use --service instead of -r. + * src/groupmod.c (main): Likewise. + * src/passwd.c (passwd_main): Likewise. + * src/chage.c (main): Likewise. + * src/chfn.c (main): Likewise. + * src/chpasswd.c (main): Likewise. + * src/chsh.c (main): Likewise. + + * lib/logindefs.c: Print as error message the name of the file + from which we got the value, not "/etc/login.defs". + + * lib/logging.c (store): Don't use fix syslog module names. + +2005-06-22 Thorsten Kukuk + + * release version 3.0.1 + + * lib/group.h (write_group_data): Warn if return value is ignored. + + * lib/user.c (write_user_data): Don't ignore SELinux errors. + (write_user_data): Likewise. + * lib/group.c (write_group_data): Likewise. + * src/vipw.c (edit): Likewise. + * src/pwck.c: Likewise. + * src/grpck.c: Likewise. + + * lib/selinux_utils.c (restore_default_context): Don't ignore + errors. + + * src/usermod.c (move_home_directory): Don't remove old directory + if copying failed. + + * lib/public.h: If supported by compiler, warn about unused + results of certain function calls. + +2005-06-03 Thorsten Kukuk + + * release version 3.0 + + * lib/logging.h (MSG_STDIN_FOR_NONROOT_DENIED): New, for passwd. + + * lib/msg_table.h (msg_table): Add message for stdin/passwd. + + * src/passwd.c: Implement --stdin option. + * src/passwd.1: Document --stdin option. + +2005-05-05 Thorsten Kukuk + + * configure.in: Check for Linux audit library. + + * plugins/liblog_audit.c: New, use Linux audit library. + * plugins/liblog_audit.map: New. + * plugins/Makefile.am: Add liblog_audit plugin. + +2005-05-04 Thorsten Kukuk + + * src/chage.c (main): Enable logging. + * lib/msg_table.h (msg_table): Add new messages from chage. + * lib/logging.h: Add new defines for chage messages. + + * src/useradd.c (main): Log successfull creation of mail spool file. + +2005-04-30 Thorsten Kukuk + + * etc/default/useradd: Add CREATE_MAIL_SPOOL. + * src/useradd.c: Create mail spool file if requested. + +2005-04-25 Thorsten Kukuk + + * release 2.6.98 + + * src/useradd.c: Check for fchown, fchmod, chown, chmod, link + and write return values. + * src/usermod.c: Likewise. + * src/vipw.c: Likewise. + * src/pwck.c: Likewise. + * src/grpck.c: Likewise. + +2005-04-22 Thorsten Kukuk + + * lib/use_slp.c (register_slp): Fix handling of slp_descr. + + * src/rpasswdd.c (main): Check for chdir return value. + + * src/grpunconv.c (main): Check for link return value. + + * src/rpasswd-client.c (query_slp): Check for fgets errors. + + * src/newgrp.c (main): If second chdir fails, too, abort. + + * lib/user.c (write_user_data): Check for errors of fchown, + fchmod, link and rename calls. + * lib/group.c (write_group_data): Likewise. + * src/pwconv.c (main): Likewise. + +2005-04-21 Thorsten Kukuk + + * src/rpasswdd.c: Reset syslog after calling pam_* functions. + + * src/chpasswd.c: Use logging.h. + * src/expiry.c: Likewise. + + * lib/msg_table.h (msg_table): Add drop privilegs failed message. + * lib/logging.h (MSG_DROP_PRIVILEGE_FAILED): New. + + * lib/authentication.c (do_authentication): Reset openlog + values after usage of PAM functions. + + * src/gpasswd.c: Remove inclusion of PAM header files. + * src/chfn.c: Likewise. + * src/chage.c: Likewise. + + * src/useradd.c (main): Write default homedirectory to + /etc/default/useradd, reported by + Heike Jurzik . + + * src/useradd.8: Add -k to -D list. + +2005-04-04 Thorsten Kukuk + + * release 2.6.97 + + * configure.in: Check for -fpie/-pie + * src/Makefile.am: Compile/Link rpasswdd with -fpie/-pie + +2005-03-30 Thorsten Kukuk + + * src/rpasswd-client.c (print_x509_certificate_info): + cert_list_size is unsigned int. + +2005-03-28 Thorsten Kukuk + + * lib/passwd_nisplus.c: Add casts for gcc4. + * src/rpasswdd.c: Fix prototypes for GnuTLS/OpenSSL usage. + +2005-02-22 Thorsten Kukuk + + * release version 2.6.96 + + * src/pwck.c: Fix memory corruption. + * src/grpck.c: Likewise. + +2005-01-10 Jakub Bogusz + + * src/chfn.1: Fix typo. + +2005-01-04 Thorsten Kukuk + + * lib/logging.c: Implement stacking of logging plugings. + * lib/logging.h: Adjust prototypes and public macros. + * etc/pwdutils/logging: New, default config file for logging. + + * configure.in: Add warning if no libnscd was found. + + * lib/user.c: Unify error message format. + * src/chage.c: Likewise. + * src/expiry.c: Likewise. + + * plugins/liblog_laus.c (laus_open_sec_log): Add parameter + for options. + + * configure.in: Abort if neither GnuTLS nor OpenSSL was found. + +2004-12-19 Jakub Bogusz + + * src/groupmod.c: Fix typos in msgids. + * src/grpunconv.c: Likewise. + * src/pwunconv.c: Likewise. + * src/rpasswd.c: Likewise. + * src/rpasswdd.c: Likewise. + + * po/pl.po: Add polish translation. + +2004-12-10 Thorsten Kukuk + + * release version 2.6.94 + + * plugins/liblog_laus.c: Plugin for LAuS. + * plugins/liblog_syslog.c: Plugin for syslog. + * lib/logging.h: Move msg_table from here ... + * lib/msg_table.h: ... to here. New file. + * lib/logging.c: dlopen liblog_syslog for logging. + +2004-12-09 Thorsten Kukuk + + * configure.in: Add LAuS and plugin support. + * Makefile.am (SUBDIRS): Add plugins. + +2004-11-30 Thorsten Kukuk + + * release version 2.6.93 + + * src/useradd.c (main): Fix wrong list of arguments. + + * src/usermod.c: Add sec_log support. + + * lib/remove_gr_mem.c: New. + +2004-11-29 Thorsten Kukuk + + * release version 2.6.92 + + * src/userdel.c: Add sec_log support. + + * src/useradd.c: Add sec_log support. + + * lib/call_script.c (call_script): Use sec_log. + + * etc/login.defs: Make CHARACTER_CLASS safe for usage with different + locales [SuSE #48625]. + +2004-11-16 Thorsten Kukuk + + * src/grpck.c (loop_over_group_file): Start with a bigger buffer + and increase it faster. + + * lib/parse_grent.c (parse_grent): Work on a copy of input buffer + for the sake that the buffer is too small [SuSE #48278]. + +2004-11-15 Thorsten Kukuk + + * lib/groupmod.c: Add sec_log support. + * src/passwd.c: Likewise. + +2004-11-12 Thorsten Kukuk + + * src/groupdel.c: Add sec_log support. + +2004-11-04 Thorsten Kukuk + + * src/newgrp.c (main): Add support for multiple groups with + the same name as used in NIS environments [SuSE #47712]. + +2004-10-13 Thorsten Kukuk + + * src/rpasswd-client.c (start_ssl): Read all PEM files from + /etc/ssl/certs. + + * configure.in: Check for dirent.h. + + * release version 2.6.91 + +2004-10-01 Thorsten Kukuk + + * lib/strtoid.c (strtoid): Don't allow UINT_MAX (equal + to -1) as UID or GID. + +2004-09-14 Thorsten Kukuk + + * src/chage.c: Use external libnscd library. + * src/chfn.c: Likewise. + * src/gpasswd.c: Likewise. + * src/passwd.c: Likewise. + * src/chpasswd.c: Likewise. + * src/groupadd.c: Likewise. + * src/groupdel.c: Likewise. + * src/groupmod.c: Likewise. + * src/grpunconv.c: Likewise. + * src/pwconv.c: Likewise. + * src/pwunconv.c: Likewise. + * src/useradd.c: Likewise. + * src/userdel.c: Likewise. + * src/usermod.c: Likewise. + + * lib/nscd.c: Removed. + * lib/public.h: nscd_flush_cache prototype removed. + +2004-09-01 Thorsten Kukuk + + * src/rpasswdd.c: Implement support for GnuTLS. + +2004-08-31 Thorsten Kukuk + + * src/pam_rpasswd.c: Implement support for GnuTLS. + + * src/rpasswd-client.c (gnutls_pk_algorithm_get_name): Add + compat function for old gnutls releases. + +2004-08-30 Thorsten Kukuk + + * configure.in: Check for GnuTLS. + + * src/rpasswd-client.c: Implement support for GnuTLS. + * src/rpasswd.c: Implement support for GnuTLS. + +2004-08-17 Thorsten Kukuk + + * release version 2.6.90 + + * src/pam_rpasswd.c (pam_sm_chauthtok): Get server description. + + * src/rpasswd.c (main): Show server description if available. + + * src/rpasswd-client.c (query_slp): Show server description + in host selection menu. + + * etc/pam.d/*: Don't allow setting of empty passwords (should + be handled in a global way). + +2004-08-16 Thorsten Kukuk + + * src/rpasswd-client.c (MySLPSrvURLCallback): Copy hostp/portp + entries, too. + +2004-08-14 Thorsten Kukuk + + * src/groupadd.c (main): Call GROUPADD_CMD script, + add sec_log function calls. + + * lib/logging.c: Add new messages. + * lib/logging.h: Add new message IDs. + +2004-08-13 Thorsten Kukuk + + * src/gpasswd.c (main): Add sec_log function calls. + + * etc/groupadd.local: New. + + * etc/Makefile.am (sbin_SCRIPTS): Add groupadd.local. + + * etc/login.defs (GROUPADD_CMD): Added. + +2004-08-01 Thorsten Kukuk + + * src/rpasswdd.8: Add all slp options. + + * src/chage.c (main): Add sec_log function calls. + +2004-07-19 Thorsten Kukuk + + * etc/login.defs.5: Document missing variables. + +2004-06-29 Thorsten Kukuk + + * src/newgrp.c (main): Fix sg and newgrp compat + option handling. + +2004-06-20 Thorsten Kukuk + + * lib/logging.h: New, prototypes for logging plugin. + + * lib/logging.c: New, for logging plugin. + + * src/chage.c (main): Free pw_data in error case. + * src/chfn.c (main): Likewise. + * src/chsh.c (main): Likewise. + + * lib/authentication.c (do_authentication): Don't free + pw_data, caller needs it for logging in error case later. + +2004-05-10 Thorsten Kukuk + + * src/rpasswdd.c (main): Fix compiling without SLP support. + + * src/useradd.c: Fix writing of SKEL and EXPIRE entry + in /etc/default/useradd + +2004-04-30 Thorsten Kukuk + + * src/groupmod.c (main): Fix typo (user <-> group). + + * lib/str2date.c (str2date): Fix comment. + +2004-04-26 Thorsten Kukuk + + * src/rpasswdd.c (main): Add --slp-descr support. + + * lib/use_slp.c (register_slp): Set description attribute + if description is configured. + + * lib/use_slp.h (register_slp): Adjust prototype. + + * src/rpasswd-client.c (query_slp): If we find more than one + rpasswd daemon and called by rpasswd, ask user which to use. + +2004-04-23 Thorsten Kukuk + + * src/usermod.c (main): Add -R and -A options. + +2004-04-21 Thorsten Kukuk + + * src/groupmod.c (main): Convert group and user names + between used locale and UTF8. + +2004-04-20 Thorsten Kukuk + + * src/groupmod.8: Document -A and -R options. + + * src/groupmod.c (main): Add -A and -R options (add/remove + user from a group). + +2004-04-14 Thorsten Kukuk + + * release version 2.6.4 + + * src/rpasswd-client.c (query_slp): Fix parsing of + SLP URL. + +2004-04-02 Thorsten Kukuk + + * release version 2.6.3 + + * src/newgrp.c: Add -c command flag to allow sg emulation. + + * src/Makefile.am (install-exec-hook): Add sg compatibility link. + + * src/sg.1: New. + +2004-04-01 Thorsten Kukuk + + * release version 2.6.2 + + * src/rpasswdd.c (main): Add timeout support for SLP registration. + + * lib/use_slp.c (register_slp): Add refreshing of SLP registration. + + * lib/use_slp.h: Adjust register_slp prototype. + + * lib/copy_xattr.c (copy_xattr): Don't use SELinux functions + if not available. Reported by Jerone Young . + (copy_xattr): Don't abort with error if we ignore attributes. + + * src/groupdel.c: Fix program name. Reported by + Jerone Young . + +2004-03-24 Thorsten Kukuk + + * release version 2.6.1 + + * src/newgrp.c (main): Handle the case that we use already + NGROUPS_MAX groups and don't abort with an error. + +2004-03-17 Thorsten Kukuk + + * release version 2.6 + + * src/pwck.c (sort_passwd_file): sort passwd file. + (main): Fix calculating of return code. + * src/grpck.c (sort_group_file): sort group file. + + * src/grpck.8: Rewrite. + + * src/tst-pwck: New test for pwck. + * src/tst-grpck: New test for grpck. + +2004-03-15 Thorsten Kukuk + + * src/groupmod.c (main): Clear nscd group cache, not passwd cache. + + * src/grpck.c: Fix typo in help text. + * src/grpck.8: Fix typo for -s help text. + +2004-03-11 Thorsten Kukuk + + * lib/copy_xattr.c (copy_xattr): Don't set SELinux attributes + if no policy is loaded. + +2004-03-05 Thorsten Kukuk + + * lib/group.c (find_group_data): Don't close NSS handle twice. + * lib/user.c (do_getpwnam): Likewise. + +2004-02-25 Thorsten Kukuk + + * lib/authentication.c: Include syslog.h. + +2004-02-24 Andreas Voegele + + * src/newgrp.c (main): Do not dereference gp for incr. + +2004-02-24 Thorsten Kukuk + + * src/chfn.c (check_field): Fix for UTF-8 strings. + + * lib/get_caller_dn.c: New. + + * lib/get_ldap_password.c: New. + + * src/groupadd.c: Remove duplicate code. + * src/groupdel.c: Likewise. + * src/groupmod.c: Likewise. + * src/useradd.c: Likewise. + * src/userdel.c: Likewise. + * src/usermod.c: Likewise. + + * src/chage.c: Fix usage of -l with -D. + +2004-02-23 Thorsten Kukuk + + * src/groupadd.c (main): Add unsupported -f option. + + * src/groupdel.c (main): Fix LDAP support. + + * lib/copy_xattr.c (copy_xattr): Free memory in error case. + +2004-02-17 Thorsten Kukuk + + * etc/login.defs: Fix typo + +2004-02-16 Thorsten Kukuk + + * src/groupdel.c: Convert groups between UTF-8/local locale. + + * src/expiry.c: Convert account to local locale. + + * src/chsh.1: Document -P/-D. + + * src/newgrp.c (main): Translate group name from locale to UTF-8. + + * src/vipw.c: Unify output. + * src/usermod.c: Likewise. + + * src/chfn.1: Adjust manual page. + +2004-02-14 Thorsten Kukuk + + * src/chfn.c: Add -D and -P option. + + * lib/check_name.c (check_name): Use regex for syntax checking. + + * etc/login.defs: Add CHARACTER_CLASS, which defines a regex + for allowed account names. + +2004-02-13 Thorsten Kukuk + + * src/newgrp.c (main): Check for variable overflow (patch + from Thomas Biege). + + * src/usermod.c (main): Fix changing of shadow information. + Convert between local locale and UTF-8. + +2004-02-12 Thorsten Kukuk + + * lib/user.c (write_user_data): Fix detecting of changed + data. + + * src/usermod.c (main): Don't change gecos to "" if + something else is changed. Don't return an error if the + home directory does not exist, but the UID is changed. + +2004-02-10 Thorsten Kukuk + + * src/chfn.c (main): Handle UTF-8 accounts correct. + * src/chsh.c: Likewise. + + * lib/get_values.c: Convert input/output from/to UTF-8. + + * lib/utf8conv.c: New, convert between UTF-8 and used locale. + * lib/utf8conv.h: New. + +2004-02-05 Thorsten Kukuk + + * src/chpasswd.8: Document /etc/default/passwd usage. + * src/gpasswd.1: Likewise. + + * lib/parse_crypt_arg.c: New, common helper functions for crypt. + * lib/parse_crypt_arg.h: New. + + * src/chpasswd.c: If not other specified, use crypt hash + specified in /etc/default/passwd. + (main): Fix lenght of allowed blowfish passwords. + + * lib/logindefs.c: Read /etc/default/passwd, too. + + * src/useradd.c: Better range checking for UIDs and GIDs. + * src/groupadd.c (main): Likewise. + * src/groupmod.c (main): Likewise. + * src/newgrp.c (main): Likewise. + * src/usermod.c (convert_grpopt_to_name): Likewise. + + * lib/logindefs.c (getlogindefs_unum): Add range checking. + (getlogindefs_num): Likewise. + + * lib/strtoid.c: New, converts string to uid/gid with better + range checking. + +2004-02-03 Thorsten Kukuk + + * src/pam_rpasswd.8: New. + * src/newgrp.1: New. + +2004-02-01 Thorsten Kukuk + + * src/newgrp.c: New, POSIX conform implementation. + +2004-01-28 Thorsten Kukuk + + * src/rpasswd-client.c: Fix alignment problems. + + * src/grpck.c: New. + + * lib/read-files-group.c: Move parse_grent from here ... + * lib/parse_grent.c: ... to here. + +2004-01-27 Thorsten Kukuk + + * src/pwck.c: New. + * lib/yesno.c: New, from coreutils 5.1.2. + * lib/yesno.h: New. + +2004-01-25 Thorsten Kukuk + + * configure.in: Check for getline/getdelim functions. + + * lib/logindefs.c (_GNU_SOURCE): define. + +2004-01-15 Thorsten Kukuk + + * configure.in: Enable SELinux per default if found. + +2004-01-14 Thorsten Kukuk + + * src/pam_rpasswd.c: New. + + * src/rpasswd-client.c: Common functions moved from ... + * src/rpasswd.c: ... here. + + * configure.in: Add option to enable PAM module. + +2004-01-13 Thorsten Kukuk + + * src/rpasswd.1: Document new rpasswd options. + + * src/rpasswd.c: Add search functions for a SLP server. + + * src/rpasswdd.8: Document SLP option. + + * src/rpasswdd.c: Make SLP support runtime option. + +2004-01-12 Thorsten Kukuk + + * configure.in: Check for SLP support. + * lib/use_slp.c: New, functions to register/deregister from SLP. + * lib/use_slp.h: New, prototypes for register/deregister from SLP. + + * src/rpasswdd.c: Add SLP support. + + * src/dbg_log.[ch]: Moved from here ... + * lib/dbg_log.[ch]: ... to here. + +2004-01-09 Thorsten Kukuk + + * release version 2.5 + + * src/grpunconv.c: New. + * src/grpunconv.8: New. + + * lib/read-files.c: Fix compiling with older gcc versions. + +2004-01-08 Thorsten Kukuk + + * src/passwd.c: SELinux: Don't abort in permissive mode. + * src/chsh.c: Likewise. + * src/chfn.c: Likewise. + +2004-01-06 Thorsten Kukuk + + * src/pwunconv.c: New. + * src/pwunconv.8: New. + * src/pwconv.8: New. + * src/tst-pwconv: New. + * src/tst-pwunconv: New. + + * src/pwconv.c: Finish implementation. + + * lib/copy_xattr.c: Check arguments. + + * lib/public.h: Add DO_DELETE_SHADOW. + + * lib/authentication.c: Include stdio.h. + +2004-01-04 Thorsten Kukuk + + * src/groupadd.c (main): Fix compiling without LDAP support. + * src/userdel.c (main): Likewise. + * src/useradd.c (main): Likewise. + * src/usermod.c (main): Likewise. + + * src/grpconv.8: New. + * src/pwconv.8: New. + + * src/passwd.c (passwd_main): Adjust for new is_selinux_enabled. + * src/chfn.c (main): Likewise. + * src/chsh.c (main): Likewise. + * lib/copy_xattr.c (copy_xattr): Likewise. + * lib/selinux_utils.c (set_default_context): Likewise. + (restore_default_context): Likewise. + +2003-12-19 Thorsten Kukuk + + * src/groupadd.8: Add description about valid group names. + +2003-12-10 Thorsten Kukuk + + * release version 2.4 + + * lib/user.c (write_user_data): Allow creating of new entry + in shadow map. + + * src/chage.c (main): Add shadow entry for account if user + enters data. + +2003-12-09 Thorsten Kukuk + + * lib/user.c (write_user_data): Fix shadow temp file handling + in error case. + + * src/passwd.c (passwd_main): Don't unlock a password that only + has "!" as password. + + * src/passwd.1: Document new -u behavior. + + * lib/check_home.c (check_home): New, check path to home + directory. + + * src/useradd.c (main): If home directory exists, it must be + a directory. + * src/usermod.c (main): Likewise. + + * src/passwd.1: Fix description of password status output. + + * src/passwd.c (passwd_main): Only abort on failing do_getpwnam, + if we do more than changing passwords + +2003-12-05 Thorsten Kukuk + + * release version 2.3.99 + + * src/usermod.c (main): Remove user from all groups, if + -G with empty argument is specified. + Remove user only once from all old groups. + +2003-12-03 Thorsten Kukuk + + * release version 2.3.98 + +2003-12-02 Thorsten Kukuk + + * lib/libldap.c (ldap_create_group): Implement. + + * lib/libldap.h: Add prototype for ldap_create_group. + + * lib/user.c (write_user_data): Implement changing of more LDAP + data. + + * lib/group.c (write_group_data): Implement changing of more + LDAP data. + + * release version 2.3.97 + + * lib/nsw.c (_getnswbyname): Return dummy "files" entry if no + nsswitch.conf file found. + + * lib/user.c: Fix writing of shadow entry. + + * src/tst-useradd: Check, if shadow data is written. + +2003-12-01 Thorsten Kukuk + + * lib/chown_dir_rec.c: New, change owner/group of a directory tree. + + * src/useradd.c (create_home_directory): Adjust for new + copy_dir_rec interface. + * src/usermod.c: Likewise. + + * lib/copy_dir_rec.c (copy_dir_rec): Add new option to preserve + the old owner/group of a file/directory. + +2003-11-30 Thorsten Kukuk + + * src/usermod.8: New. + * src/useradd.8: Specify rule for account name. + +2003-11-28 Thorsten Kukuk + + * src/usermod.c: Implement modifying of group data. + + * src/expiry.c (main): Fix print_version call. + + * src/chfn.c (main): Make standalone. + * src/chsh.c (main): Likewise. + + * src/chage.c: Move common functions into libpwdutils. + + * src/passwd.c (main): Moved from main.c. + (passwd_main): Add print_version years argument. + + * src/main.h: Removed. + * src/main.c: Removed. + + * lib/init_environment.c: New. + * lib/print_error.c: New. + * lib/print_version.c: New. + * lib/date2str.c: New. + * lib/str2date.c: New. + +2003-11-02 Thorsten Kukuk + + * src/gpasswd.c: New. + * src/gpasswd.1: New. + +2003-10-30 Thorsten Kukuk + + * src/Makefile.am: Link against libattr if necessary. + + * lib/copy_xattr.c: Include . + + * configure.in: Add check for -lattr, if attr/xattr.h is used. + +2003-10-29 Thorsten Kukuk + + * src/groupmod.8: New manual page. + +2003-10-21 Thorsten Kukuk + + * lib/group.h: Add fields for new name and gid to group_t. + + * src/groupmod.c: Initial version. + +2003-10-19 Thorsten Kukuk + + * src/usermod.c: Initial version. + + * lib/group.c: Reset errno if errno == ERANGE was returned. + * lib/user.c: Likewise. + +2003-10-18 Thorsten Kukuk + + * src/tst-long-group-entry: Add new test. + * src/tst-32bit-uid-gid: New test. + * src/tst-userdel: New test. + + * src/useradd.c: Fix lseek calls. + +2003-10-15 Thorsten Kukuk + + * release version 2.3.96 + + * src/chfn.c (chfn_main): Add SELinux support. + * src/chsh.c (chsh_main): Likewise. + + * lib/selinux_utils.c (set_default_context): New. + (restore_default_context): New. + + * src/vipw.c (edit): Set default security context before + creating new file. + * lib/user.c (write_user_data): Likewise. + * lib/group.c (write_group_data): Likewise. + + * src/passwd.1: Document usage of PAM modules. + +2003-10-14 Thorsten Kukuk + + * src/passwd.c (passwd_main): Add SELinux support. + * lib/selinux_utils.c: New. + + * lib/public.h (copy_xattr,selinux_check_access): Add prototypes. + + * lib/copy_xattr.c: New, function copying extended attributes. + + * src/vipw.c (edit): Copy extended attributes. + * lib/group.c (write_group_data): Likewise. + * lib/user.c (write_user_data): Likewise. + * lib/copy_dir_rec.c (copy_dir_rec): Likewise. + * src/useradd.c (write_defaults): Likewise. + +2003-10-14 Andreas Schwab + + * lib/passwd_nisplus.c: Fix alignment warnings. + * lib/read-files-group.c: Likewise. + +2003-10-12 Thorsten Kukuk + + * release version 2.3.95 + + * src/Makefile.am (man_MANS): Add vipw.8, vigr.8. + + * src/vipw.8: New file. + * src/vigr.8: New file. + * src/chsh.1: Fix format. + * src/chfn.1: Fix format. + +2003-10-09 Thorsten Kukuk + + * src/groupadd.c: Fix -g handling. + + * src/vipw.c: New. + + * src/tst-groupadd: New, tests for groupadd. + + * src/Makefile.am: Add vipw. + + * lib/user.c (lock_database): Move from here ... + * lib/lock_database.c: ... to here. + * lib/Makefile.am: Add lock_database. + +2003-10-08 Thorsten Kukuk + + * release version 2.3.94 + + * src/groupadd.8: New. + +2003-10-07 Thorsten Kukuk + + * src/groupdel.8: New. + + * src/userdel.8: Fix typo. + + * lib/group.c (write_group_data): Implement deletion of a group. + + * src/groupdel.c: New. + + * src/useradd.c: Fix format of ouput. + + * src/groupadd.c: New. + + * src/Makefile.am: Add groupadd. + +2003-09-04 Thorsten Kukuk + + * src/userdel.c (main): Flush nscd cache if account is removed. + + * src/chsh.c (chsh_main): Don't ask root for password on local accounts. + * src/chfn.c (chfn_main): Likewise. + +2003-08-29 Thorsten Kukuk + + * src/useradd.8: Mention special handling of GROUPS in + for system account. + +2003-07-27 Thorsten Kukuk + + * src/userdel.8: New manual page. + + * src/useradd.8: Add FILES section. + + * src/useradd.c (find_free_uid): Use SYSTEM_UID_MIN and + SYSTEM_UID_MAX. + + * etc/login.defs: Add SYSTEM_UID_* and SYSTEM_GID_* + +2003-07-25 Thorsten Kukuk + + * src/useradd.8: New manual page + * src/Makefile.am (man_MANS): add useradd.8 manual page. + + * src/userdel.c (main): Make -u shortcut for --usage. + +2003-07-24 Thorsten Kukuk + + * release 2.3.93 + + * src/useradd.c: Allow -D option for binddn parameter. + + * src/userdel.c: Add --service option. + +2003-07-23 Thorsten Kukuk + + * src/useradd.c (main): Add support for creating LDAP accounts. + + * src/userdel.c (remove_from_secondary_groups): Fix typo + in error message. + (main): Lock local password file only, if we don't delete LDAP + user. + + * lib/libldap.c (ldap_find_user_baseou): New function. + (ldap_find_group_baseou): Likewise. + (ldap_create_user): Creata a user in a LDAP database. + + * lib/libldap.h: Add ldap_find_user_baseou and + ldap_find_group_baseou prototypes. + +2003-07-21 Thorsten Kukuk + + * src/userdel.c (remove_from_secondary_groups): fix query + for ldap DN and password. + * src/useradd.c (main): Likewise. + + * lib/group.c (write_group_data): Print error message, if + LDAP operations fail. + + * lib/libldap.h (convert_user_to_dn): Add prototype. + + * lib/libldap.c (convert_to_dn): change bind data only if + bind is not NULL. + + * src/chage.c: Don't include all ldap headers. + * src/chpasswd.c: Likewise. + +2003-07-20 Thorsten Kukuk + + * lib/libldap.c: Implement deleting of user and group objects. + * lib/libldap.h: Add prototypes for new functions. + + * src/userdel.c: Implement deleting of LDAP accounts. + +2003-07-18 Thorsten Kukuk + + * release version 2.3.92 + + * etc/userdel-pre.local: New, called from userdel. + * etc/userdel-post.local: New, called from userdel. + + * etc/login.defs: Add USERDEL_PRECMD and USERDEL_POSTCMD. + + * src/userdel.c: New, for userdel implementation. + + * src/chage.c (main): Use write_user_data. + * src/useradd.c (main): Likewise. + * src/chfn.c (chfn_main): Likewise. + * src/chsh.c (chsh_main): Likewise. + * src/passwd.c (passwd_main): Likewise. + * src/chpasswd.c (main): Likewise. + + * lib/public.h (write_user_data): Renamed from do_setpwnam. + + * lib/user.c (do_setpwnam): Use new variable todo instead of + new_user, implement deleting of accounts, rename to write_user_data. + + * lib/public.h (user_t): Add todo flag (modify, add, delete). + + * etc/login.defs: Add USERDEL_PRECMD and USERDEL_POSTCMD. + + * lib/libldap.c: Add LDAP_SET_REBIND_PROC_ARGS again. + +2003-07-17 Thorsten Kukuk + + * lib/is_logged_in.c: New, check if user is logged in. + * lib/public.h (is_logged_in): Add prototype. + + * release version 2.3.91 + + * src/rpasswd.c (main): Fix memory leak. + + * src/Makefile.am (install-exec-hook): Only change permissions + of usr/bin binaries if we install as root. Reported by + Arkadiusz Miskiewicz + + * src/chage.c (main): Close LDAP session. + * lib/user.c (do_setpwnam): Likewise. + * src/chpasswd.c (main): Likewise. + + * lib/libldap.c (close_ldap_session): New function. + * lib/libldap.h (close_ldap_session): Add prototype. + + * lib/group.c: Include libldap.h instead of ldapfcn.h. + * src/chage.c: Likewise. + * src/chpasswd.c: Likewise. + + * lib/user.c (do_setpwnam): Use new ldaplib functions. + +2003-07-16 Thorsten Kukuk + + * lib/libldap.c: New, rewrite of ldapfcn to match our needs. + * lib/libldap.h: New. + * lib/ldapfcn.c: Replaced by libldap.c + * lib/ldapfcn.h: Replaced by libldap.h + * lib/Makefile.am: Replace ldapfcn with libldap. + + * lib/ldapfcn.c (ldap_authentication): Fix authentication with + extra supplied binddn. + + * src/useradd.c (main): More error checking. + + * src/chpasswd.c (main): Call ldap_authentication. + * src/chage.c (main): Likewise. + + * src/chfn.c (get_fields): Allow the user to abort with Ctrl-C. + * src/chsh.c (chsh_main): Likewise. + + * lib/ldapfcn.h (ldap_authentication): Adjust prototype. + + * src/useradd.c (main): Call write_group_data with "is_locked" set. + + * lib/group.c (write_group_data): Add new parameter "is_locked". + * lib/group.h (write_group_data): Adjust protype. + +2003-07-15 Thorsten Kukuk + + * etc/default/useradd: New, default options for useradd + + * lib/group.c (find_group_data): Allow searching for gid, too. + + * src/useradd.c (main): Fix check if group was found. + (convert_grpopt_to_name): Search in correct service for group. + +2003-07-14 Thorsten Kukuk + + * lib/user.c (do_setpwnam): Implement changing of LDAP password. + + * lib/chpasswd.c: Enable LDAP support. + + * Release version 2.3.90 + + * lib/remove_dir_rec.c (remove_dir_rec): New, remove directory tree. + + * lib/public.h (remove_dir_rec): Add prototype. + + * lib/copy_dir_rec.c (copy_dir_rec): New, copy directory recursive. + * lib/public.h (copy_dir_rec): Add prototype. + + * src/chfn.1: Describe util-linux compatible options. + +2003-07-11 Thorsten Kukuk + + * lib/authentication.c (do_authentication): Don't dereference + pw_data if it is NULL. + + * etc/useradd.pamd: New, pam config file for useradd. + + * src/useradd.c: Implement modifying of useradd defaults. + + * src/rpasswdd.c: Use rpasswd as name for PAM config file. + * src/rpasswdd.8: Likewise. + + * etc/chage.pamd: New, pam config file for useradd. + * etc/rpasswd.pamd: New, pam config file for rpasswd. + + * etc/init.d: New directory, move *.init scripts here. + * etc/pam.d: New, move *.pamd config files here. + +2003-07-10 Thorsten Kukuk + + * src/useradd.c (main): Call shell script after creating account. + + * lib/call_script.c: New, call shell script. + + * lib/public.h (call_script): Add prototype. + + * lib/read-files-group.c: New, read entries from group files + + * etc/useradd.local: New, can be called by useradd + * etc/userdel.local: New, can be called by userdel + * etc/login.defs: Add new variables + +2003-07-09 Thorsten Kukuk + + * lib/group.c: New, for modifying group entries. + * lib/group.h: New, contains prototypes. + +2003-07-07 Thorsten Kukuk + + * lib/read-files.h: Add files_getpwuid_r and files_getpwent_r. + * lib/read-files.c: Implement this functions. + +2003-07-06 Thorsten Kukuk + + * src/passwd.c (passwd_main): Add -P option for not password + changing mode. + +2003-07-05 Thorsten Kukuk + + * lib/user.c (do_setpwnam): Fix off-by-one error. + * src/tst-chage: New, test for chage. + * src/tst-passwd: New, tests for passwd. + +2003-07-04 Thorsten Kukuk + + * lib/user.c: Move do_authentication from here... + * lib/authentication.c: ...to here. + + * lib/Makefile.am: Replace getdef.[ch] with logindefs.[ch]. + * lib/logindefs.c: New file for reading /etc/login.defs. + * lib/logindefs.h: New file. + * lib/getdef.c: Removed. + * lib/getdef.h: Removed. + * src/chfn.c: Use new getlogindefs functions. + * src/chsh.c: Likewise. + * src/passwd.c: Likewise. + * src/useradd.c: Likewise. + * src/rpasswdd.c: Likewise. + + * src/chfn.c: Make util-linux chfn options default, not shadow. + +2003-07-03 Thorsten Kukuk + + * lib/user.c (do_setpwnam): Add new account from + pw/sp data to passwd/shadow file if new_user is set. + + * lib/public.h: Add new field "new_user" to user_t. + + * lib/user.c (lock_database): Wrapper for lckpwdf(). + +2003-07-02 Thorsten Kukuk + + * Moved error_codes.h, ldapfcn.c, nsw.c, read-files.c, + yppasswd_xdr.c, get_value.c, ldapfcn.h, nsw.h, read-files.h, + getdef.c, nispasswd.h, passwd_nisplus.c, user.c, getdef.h, + nscd.c, public.h, yppasswd.h to lib directory + + * lib/Makefile.am: New + + * src/Makefile.am: Link against new libpwdutils.a + + * src/chfn.c (chfn_main): Use new do_authentication/ + get_old_clear_password combo. + * src/chsh.c (chsh_main): Likewise. + + * src/public.h (get_old_clear_password): Added prototype. + (do_authentication): Adjust prototype. + + * src/user.c (do_authentication): Move special chfn/chsh hack + to chfn.c/chsh.c, don't ask for old password in clear text. + (get_old_clear_password): Ask for old password in clear text. + + * src/chage.c (main): Call get_old_clear_password() to make + sure we have the old password in clear text. + +2003-07-02 Thorsten Kukuk + + * release version 2.3 + + * configure.in: Move crypt header/function check before LDAP + checks. + * src/rpasswd.c (main): Fix setting/loading of SSL cert path. + * src/chpasswd.c: Disable LDAP support. + + * src/ldapfcn.h: Protect with USE_LDAP. + * src/chage.c: Make LDAP support compile option. + + * src/rpasswd.conf.5: Document reqcert option. + +2003-07-01 Thorsten Kukuk + + * src/rpasswd.c (load_config): Implement reqcert option. + (main): Make certificate checking depending on reqcert value. + +2003-06-20 Thorsten Kukuk + + * src/chpasswd.c (main): Implement -c option, add preliminary + LDAP support. + + * src/chpasswd.8: New. + * src/Makefile.am (man_MANS): Add chpasswd.8 + +2003-06-17 Thorsten Kukuk + + * src/rpasswd.c (main): Check server certificate and warn user + if necessary. + + * src/rpasswdd.c (main): Initialise SSL before backgrouding. + + * src/read-files.c (parse_pwent): Don't inline. + (parse_spent): Likewise. + + * src/rpasswd.c (main): Use SSLv23_client_method. + +2003-04-07 Thorsten Kukuk + + * src/ldapfcn.c: Export ldap_get_lderrno if needed + * src/ldapfcn.h: Add prototype for ldap_get_lderrno if needed + +2003-03-15 Thorsten Kukuk + + * src/chage.c (print_help): Add help for -P. + * src/chage.1: Add description for -D. + + * src/chpasswd.c: New file. + + * src/expiry.c (main): Drop all privilegs. + + * src/chage.c (main): Mark all output for translation. + + * src/Makefile.am (expiry_CFLAGS): Define passwd path. + +2003-03-14 Thorsten Kukuk + + * src/expiry.1: Remove -c option, is now default. + +2003-03-12 Thorsten Kukuk + + * src/Makefile.am (install-exec-hook): Fix permissions of expiry. + (bin_PROGRAMS): Add expiry. + * src/expiry.c: New file. + * src/expiry.1: New file. + +2003-02-13 Thorsten Kukuk + + * release version 2.2 + + * src/ldapfcn.c: Only use syslog, if stderr is no tty. + + * src/Makefile.am: Fix creating of chsh/chfn hardlinks. + Reported by Seth Chaiklin . + +2003-02-12 Thorsten Kukuk + + * src/passwd.1: Fix typo. + + * src/user.c (do_setpwnam): Add support to change expire date in LDAP. + + * src/rpasswdd.c (main): Better error message, if certificate or + privatkey file not found. + (main): Correct usage of htons for port. + + * src/chage.c (main): If binddn is given, use this for changing + data in a LDAP database. + +2003-02-11 Thorsten Kukuk + + * src/passwd.c (passwd_main): Fix more error messages, + implement binddn option, ask for binddn password. + * src/ldapfcn.c (ldap_update_shell): Call ldap_update_field. + (ldap_update_gecos): Likewise. + (ldap_update_field): Fix to use binddn if given. + * src/public.h: Add binddn to struct user. + * src/user.c (free_user_t): Free binddn. + +2003-02-09 Thorsten Kukuk + + * src/ldapfcn.c: pretty print. + (ldap_update_field): New function. + + * src/passwd.c (passwd_main): Fix error message. + +2003-02-03 Thorsten Kukuk + + * release version 2.1 + + * src/passwd.c (print_usage): Add missing newline. + + * src/chage.1: Fix typo. + + * src/passwd.1: Rewritten, document all options. + +2003-02-02 Thorsten Kukuk + + * src/Makefile.am: Link rpasswd and rpasswdd only against ssl. + * configure.in: Put LDAP libraries in seperate variable. + * configure.in: Add switch to disable LDAP. + * src/ldapfcn.c: Don't include functions if LDAP is disabled. + * src/user.c: Don't call ldap functions if LDAP is disabled. + +2003-01-27 Thorsten Kukuk + + * release version 2.0 + + * src/chfn.c: Fix typo in help message + + * src/Makefile.am: Use AM_CFLAGS instead of CFLAGS + + * configure.in: add AM_GNU_GETTEXT_VERSION + +2003-01-21 Thorsten Kukuk + + * src/chfn.c: Rename print_usage to print_usage_shadow, + rename print_help to print_help_shadow, + (print_usage_util): New function. + (print_help_util): New function. + + * src/read-files.c: Update from pam_unix2 1.14, + Fix compiling with gcc 2.95.x (libc-lock). + +2003-01-14 Thorsten Kukuk + + * src/rpasswd.1: Fix syntax error, add -p option. + + * src/rpasswdd.c: Add prototype for setresuid, use getservbyname + to find default port to listen on. + + * src/user.c: Include read-files.h, rename path to files_etc_dir. + * src/chage.c (main): Use files_etc_dir instead of path. + * src/read-files.c: Update from pam_unix2 1.13. + * src/read-files.h: New. + + * src/ldapfcn.c: Sync with pam_ldap-156. + +2003-01-13 Thorsten Kukuk + + * src/chage.1: Expand -d description. + * src/rpasswdd.c: Add sanity checks from Olaf Kirch. + * src/rpasswd-client.h: Use port 774 as default. + +2002-10-01 Thorsten Kukuk + + * src/chage.c (print_version): New, don't use the heimdal + version. + +2002-08-25 Thorsten Kukuk + + * src/ldapfcn.c (get_ldapuser_info): LDAP_FILT_MAXSIZ does + not exist any longer with openldap 2.1.4, add a workaround. + +2002-08-13 Thorsten Kukuk + + * src/read-files.c: Include own parser based on glibc macros. + +2002-08-03 Thorsten Kukuk + + * src/rpasswdd.c: Rewrite IPv4/IPv6 binding, so that it works + with plain and USAGI Linux kernel. + + * src/rpasswd.c (print_usage): Add username as parameter. + * src/rpasswd.1: Likewise. + +2002-07-21 Thorsten Kukuk + + * src/chage.c (main): Parameters -d and -E could be the number + of days since 1.1.1970 or a date. + * src/chage.1: Fix description of -d and -E. + +2002-07-15 Thorsten Kukuk + + * release version 1.99 + + * src/chage.c (main): Print info message if no shadow data + is available for an account. + + * src/user.c (do_authentication): Make query for plaintext + password configurable. + * src/public.h: Adjust prototype for do_authentication. + * src/chsh.c (chsh_main): Require plaintext password. + * src/chfn.c (chfn_main): Likewise. + + * src/chage.c (main): Fix searching for user given by argument, + implement -P (--path) option, don't require clear password for + -l option. + (change_shadow_info): Fix memory leaks, round the return value + correct, print error messages. + *src/chage.1: New. + +2002-07-14 Thorsten Kukuk + + * src/files-spwd.c: Rename to ... + * src/read-files.c: ... this, add support for passwd, too. + +2002-07-09 Thorsten Kukuk + + * src/chsh.c (get_shell_list): Don't abort if line does not end + with newline, could be removed already. + + * src/passwd.c (passwd_main): If we cannot lock/unlock the password, + abort with an error code. + + * src/user.c (do_getpwnam): Use local copy of getspnam_r for files. + +2002-07-04 Thorsten Kukuk + + * src/user.c (do_setpwnam): Set correct permissions of temporary + files as early as possible (Reported by + Artem Frolov ). + +2002-10-17 Thorsten Kukuk + + * src/chage.c: Implement changing values with options. + +2002-05-28 Thorsten Kukuk + + * src/chsh.c (chsh_main): Allow ldap for -r option. + + * src/chage.c (print_shadow_info): if lstchg is zero, print + unknown date and hint that user is forced to change password. + (main): Allow ldap for -r option. + + * src/user.c (do_setpwnam): Save aging information only if + they have changed. + + * src/chage.c (main): Implement missing queries for new + aging values. + * src/public.h: Add flag if aging informations have changed. + * src/user.c (do_getpwnam): initialize sp_changed with FALSE. + * src/passwd.c (passwd_main): Adjust to new do_getpwnam() + interface. + +2002-05-21 Thorsten Kukuk + + * src/chfn.c: Fix some comments. + * src/user.c (do_getpwnam): clear sp field if no shadow entry + is found, else initialize spn with sp. + +2002-05-20 Thorsten Kukuk + + * src/chage.c: New file. + +2002-05-10 Thorsten Kukuk + + * release version 1.98 + + * src/rpasswdd.c (server_run): Set timeout for initial request to + 1 second. + + * src/rpasswdd.8: New manual page. + * src/Makefile.am (man_MANS): Add rpasswdd.8. + * src/rpasswdd.c (main): Remote unused nthreads variable. + +2002-05-08 Thorsten Kukuk + + * src/rpasswd.c (print_usage): Print correct options. + (print_help): Add --verbose description. + * src/Makefile.am (man_MANS): Add rpasswd.1. + * src/rpasswd.1: New manual page. + +2002-05-06 Thorsten Kukuk + + * release version 1.97 + + * src/Makefile.am (man_MANS): Add rpasswd.conf.5 + + * src/rpasswd.conf.5: New file. + + * src/rpasswd.c (load_config): Read server name and port number + from config file. + + * src/rpasswdd.c (handle_request): If uid of user is zero, call + pam_authenticate() to make sure nobody changes remote the root + password without knowing the old one. Ask always for a password, + even if account does not exists. + +2002-05-05 Thorsten Kukuk + + * release version 1.96 + + * src/rpasswd.c (start_request): Send current LANG variable as + locale to server. + + * src/rpasswdd.c (handle_request): Call setlocale. + (main): set locale to "C". + + * src/rpasswd.c (read_string): Simply function, remove unessary + timeout code. + +2002-05-03 Thorsten Kukuk + + * src/rpasswdd.c (handle_request): Print info messages in admin mode. + + * src/rpasswd.c: Add -a option to enable admin mode, only print + SSL certificate information if -v option is given. + +2002-05-02 Thorsten Kukuk + + * src/rpasswdd.c: Undo last move of reading first data, does not work + due SSL buffering. + (safe_read): Use poll with timeout for waiting for data. + (read_string): Use safe_read() to avoid waiting for ever. + (server_start): Use safe_read() to avoid blocking the server by + one user. + +2002-05-01 Thorsten Kukuk + + * src/rpasswdd.c (server_start): Move first read of data from here ... + * src/rpasswdd.c (handle_request): ... to here (avoid possible DoS + attacks), in admin mode, let other side authenticate as root and + don't call setresuid(). + + * src/rpasswd-client.h: Add request_type enum. + +2002-04-28 Thorsten Kukuk + + * src/rpasswd.c: Make compile with older gcc. + * src/rpasswdd.c: Likewise. + +2002-04-27 Thorsten Kukuk + + * release version 1.95 + + * src/ldapfcn.h: Sync with pam_ldap-142. + * src/ldapfcn.c: Likewise. remove pam_ldap prefix from syslog + messages. + + * configure.in: Add options for ldap.conf and ldap.secrets location. + +2002-04-25 Thorsten Kukuk + + * release version 1.94 + + * src/rpasswdd.c (init_limits): New function, set correct limits. + (main): Ignore SIGHUP and SIGXFSZ. + + * src/main.c (init_environment): New function, set correct limits + and ignore most signals. + + * src/user.c (do_setpwnam): Close files before renaming them, + rewrote complete error handling to give the error really back to + calling function. + + * src/rpasswdd.c (server_run): If poll is interupted by a signal, + don't print an error message. + +2002-04-24 Thorsten Kukuk + + * release version 1.93 + + * src/rpasswdd.c: read_string: Allow max. 1024 bytes of data, + add SIGCHLD signal handler to cleanup childs. + + * src/rpasswdd.c: Check if sock4/sock6 is equal or greater zero, + not only greater. + + * etc/rpasswdd.init: Fix typo. + + * release version 1.92 + + * etc/rpasswdd.init: SuSE Linux 8.0 init script + * etc/Makefile.am (EXTRA_DIST): Add rpasswdd.init + + * src/chfn.1: New. + * src/chsh.1: New. + * src/chsh.c (print_usage): Remove wrong options. + * src/Makefile.am: Add rpasswdd.h header file and chfn.1/chsh.1. + + * src/rpasswdd.c: Code cleanup, correct error checking for SSL + functions, fix some memory leaks. + +2002-04-24 Thorsten Kukuk + + * Makefile.am (SUUBDIRS): Remove intl. + * configure.in (AC_OUTPUT): Remove intl/Makefile. + (AM_GNU_GETTEXT): Add "external" as argument. + * src/Makefile.am (INCLUDES): Remove ../intl from search path. + (LDADD): Use LIBINTL instead of INTLLIBS. + +2002-04-24 gettextize + + * Makefile.am (SUBDIRS): Add m4. + (ACLOCAL_AMFLAGS): New variable. + (EXTRA_DIST): New variable. + * configure.in (AC_OUTPUT): Add m4/Makefile. + +2002-04-14 Thorsten Kukuk + + * src/nsw.c (nsw_free): Fix type (remove ; aftr if). + * src/Makefile.am: Add rpasswd and rpasswdd sources. + * src/rpasswd.c: New. + * src/rpasswd-client.h: New. + * src/rpasswdd.c: New. + * src/dbg_log.h: New. + * src/dbg_log.c: New. + +2002-03-10 Thorsten Kukuk + + * etc/chfn.pamd: Use pam_deny for session management. + * etc/chsh.pamd: Likewise. + * etc/passwd.pamd: Reformat. + +2002-01-29 Thorsten Kukuk + + * src/user.c (do_getpwnam): Create our own nsswitch data if + user uses service option. + + * src/nsw.c (nsw_free): Fix memory leak. + +2002-01-24 Thorsten Kukuk + + * release version 1.91 + + * src/passwd.c (passwd_main): Implement password locking. + + * src/user.c (do_setpwnam): Revert code to run through passwd + and shadow if needed: run only through /etc/passwd, if we have + something to change. Always run through /etc/shadow, if we + shadow informations. + + * src/chsh.c (check_shell): If root changes the shell, print + only a warning and don't abort. + + * src/main.c (main): If called as chfn or chsh, don't execute + passwd later. + +2002-01-20 Thorsten Kukuk + + * release version 1.90 + + * src/chsh.c: Rename main to chsh_main. + * src/chfn.c: Likewise. + + * src/main.c: If passwd is called as chfn or chsh, call + chfn_main and chsh_main. + + * src/Makefile.am: chsh and chfn are now links to passwd. + + * src/user.c (do_getpwnam): Also read shadow information. + (do_setpwnam): Save all shadow values, they could have changed. + + * src/chfn.c (main): Add -q option. + * src/chsh.c (main): Likewise. + + * src/chsh.c (main): Set locale before using it. + * src/chfn.c (main): Likewise. + +2002-01-19 Thorsten Kukuk + + * src/chfn.c (check_field): New function, check if parts of + gecos field does not contain invalid characters. + + * src/ldapfcn.h: Add prototype for ldap_update_gecos(). + + * src/ldapfcn.c (ldap_update_gecos): New function. + + * src/user.c (do_setpwnam): Also test, if gecos fields needs + to be updated. + + * src/chsh.c (main): Check if new_shell is not NULL befor + using it. + + * src/get_value.c (get_value): If "none" is entered, return + empty string. If only is entered, return old value. + +2002-01-18 Thorsten Kukuk + + * src/get_value.c (get_value): If old value is NULL, print + empty string. + + * src/user.c (do_authentication): New function for user + authentication with PAM. + + * src/chsh.c (main): Flush passwd cache. + * src/chfn.c (main): Likewise. + + * src/public.h (nscd_flush_cache): Add prototype. + + * src/nscd.c: New file. + +2002-01-07 Thorsten Kukuk + + * src/get_value.c: Start new implementation of pwdutils. diff --git a/INSTALL b/INSTALL new file mode 100644 index 0000000..54caf7c --- /dev/null +++ b/INSTALL @@ -0,0 +1,229 @@ +Copyright (C) 1994, 1995, 1996, 1999, 2000, 2001, 2002 Free Software +Foundation, Inc. + + This file is free documentation; the Free Software Foundation gives +unlimited permission to copy, distribute and modify it. + +Basic Installation +================== + + These are generic installation instructions. + + The `configure' shell script attempts to guess correct values for +various system-dependent variables used during compilation. It uses +those values to create a `Makefile' in each directory of the package. +It may also create one or more `.h' files containing system-dependent +definitions. Finally, it creates a shell script `config.status' that +you can run in the future to recreate the current configuration, and a +file `config.log' containing compiler output (useful mainly for +debugging `configure'). + + It can also use an optional file (typically called `config.cache' +and enabled with `--cache-file=config.cache' or simply `-C') that saves +the results of its tests to speed up reconfiguring. (Caching is +disabled by default to prevent problems with accidental use of stale +cache files.) + + If you need to do unusual things to compile the package, please try +to figure out how `configure' could check whether to do them, and mail +diffs or instructions to the address given in the `README' so they can +be considered for the next release. If you are using the cache, and at +some point `config.cache' contains results you don't want to keep, you +may remove or edit it. + + The file `configure.ac' (or `configure.in') is used to create +`configure' by a program called `autoconf'. You only need +`configure.ac' if you want to change it or regenerate `configure' using +a newer version of `autoconf'. + +The simplest way to compile this package is: + + 1. `cd' to the directory containing the package's source code and type + `./configure' to configure the package for your system. If you're + using `csh' on an old version of System V, you might need to type + `sh ./configure' instead to prevent `csh' from trying to execute + `configure' itself. + + Running `configure' takes awhile. While running, it prints some + messages telling which features it is checking for. + + 2. Type `make' to compile the package. + + 3. Optionally, type `make check' to run any self-tests that come with + the package. + + 4. Type `make install' to install the programs and any data files and + documentation. + + 5. You can remove the program binaries and object files from the + source code directory by typing `make clean'. To also remove the + files that `configure' created (so you can compile the package for + a different kind of computer), type `make distclean'. There is + also a `make maintainer-clean' target, but that is intended mainly + for the package's developers. If you use it, you may have to get + all sorts of other programs in order to regenerate files that came + with the distribution. + +Compilers and Options +===================== + + Some systems require unusual options for compilation or linking that +the `configure' script does not know about. Run `./configure --help' +for details on some of the pertinent environment variables. + + You can give `configure' initial values for configuration parameters +by setting variables in the command line or in the environment. Here +is an example: + + ./configure CC=c89 CFLAGS=-O2 LIBS=-lposix + + *Note Defining Variables::, for more details. + +Compiling For Multiple Architectures +==================================== + + You can compile the package for more than one kind of computer at the +same time, by placing the object files for each architecture in their +own directory. To do this, you must use a version of `make' that +supports the `VPATH' variable, such as GNU `make'. `cd' to the +directory where you want the object files and executables to go and run +the `configure' script. `configure' automatically checks for the +source code in the directory that `configure' is in and in `..'. + + If you have to use a `make' that does not support the `VPATH' +variable, you have to compile the package for one architecture at a +time in the source code directory. After you have installed the +package for one architecture, use `make distclean' before reconfiguring +for another architecture. + +Installation Names +================== + + By default, `make install' will install the package's files in +`/usr/local/bin', `/usr/local/man', etc. You can specify an +installation prefix other than `/usr/local' by giving `configure' the +option `--prefix=PATH'. + + You can specify separate installation prefixes for +architecture-specific files and architecture-independent files. If you +give `configure' the option `--exec-prefix=PATH', the package will use +PATH as the prefix for installing programs and libraries. +Documentation and other data files will still use the regular prefix. + + In addition, if you use an unusual directory layout you can give +options like `--bindir=PATH' to specify different values for particular +kinds of files. Run `configure --help' for a list of the directories +you can set and what kinds of files go in them. + + If the package supports it, you can cause programs to be installed +with an extra prefix or suffix on their names by giving `configure' the +option `--program-prefix=PREFIX' or `--program-suffix=SUFFIX'. + +Optional Features +================= + + Some packages pay attention to `--enable-FEATURE' options to +`configure', where FEATURE indicates an optional part of the package. +They may also pay attention to `--with-PACKAGE' options, where PACKAGE +is something like `gnu-as' or `x' (for the X Window System). The +`README' should mention any `--enable-' and `--with-' options that the +package recognizes. + + For packages that use the X Window System, `configure' can usually +find the X include and library files automatically, but if it doesn't, +you can use the `configure' options `--x-includes=DIR' and +`--x-libraries=DIR' to specify their locations. + +Specifying the System Type +========================== + + There may be some features `configure' cannot figure out +automatically, but needs to determine by the type of machine the package +will run on. Usually, assuming the package is built to be run on the +_same_ architectures, `configure' can figure that out, but if it prints +a message saying it cannot guess the machine type, give it the +`--build=TYPE' option. TYPE can either be a short name for the system +type, such as `sun4', or a canonical name which has the form: + + CPU-COMPANY-SYSTEM + +where SYSTEM can have one of these forms: + + OS KERNEL-OS + + See the file `config.sub' for the possible values of each field. If +`config.sub' isn't included in this package, then this package doesn't +need to know the machine type. + + If you are _building_ compiler tools for cross-compiling, you should +use the `--target=TYPE' option to select the type of system they will +produce code for. + + If you want to _use_ a cross compiler, that generates code for a +platform different from the build platform, you should specify the +"host" platform (i.e., that on which the generated programs will +eventually be run) with `--host=TYPE'. + +Sharing Defaults +================ + + If you want to set default values for `configure' scripts to share, +you can create a site shell script called `config.site' that gives +default values for variables like `CC', `cache_file', and `prefix'. +`configure' looks for `PREFIX/share/config.site' if it exists, then +`PREFIX/etc/config.site' if it exists. Or, you can set the +`CONFIG_SITE' environment variable to the location of the site script. +A warning: not all `configure' scripts look for a site script. + +Defining Variables +================== + + Variables not defined in a site shell script can be set in the +environment passed to `configure'. However, some packages may run +configure again during the build, and the customized values of these +variables may be lost. In order to avoid this problem, you should set +them in the `configure' command line, using `VAR=value'. For example: + + ./configure CC=/usr/local2/bin/gcc + +will cause the specified gcc to be used as the C compiler (unless it is +overridden in the site shell script). + +`configure' Invocation +====================== + + `configure' recognizes the following options to control how it +operates. + +`--help' +`-h' + Print a summary of the options to `configure', and exit. + +`--version' +`-V' + Print the version of Autoconf used to generate the `configure' + script, and exit. + +`--cache-file=FILE' + Enable the cache: use and save the results of the tests in FILE, + traditionally `config.cache'. FILE defaults to `/dev/null' to + disable caching. + +`--config-cache' +`-C' + Alias for `--cache-file=config.cache'. + +`--quiet' +`--silent' +`-q' + Do not print messages saying which checks are being made. To + suppress all normal output, redirect it to `/dev/null' (any error + messages will still be shown). + +`--srcdir=DIR' + Look for the package's source code in directory DIR. Usually + `configure' can determine that directory automatically. + +`configure' also accepts some other, not widely useful, options. Run +`configure --help' for more details. + diff --git a/Makefile.am b/Makefile.am new file mode 100644 index 0000000..0772a34 --- /dev/null +++ b/Makefile.am @@ -0,0 +1,14 @@ +# +# Copyright (c) 2005 Thorsten Kukuk, Germany +# +# Author: Thorsten Kukuk +# +AUTOMAKE_OPTIONS = 1.8 gnu dist-bzip2 +# +SUBDIRS = m4 etc lib src plugins po + +CLEANFILES = *~ + +ACLOCAL_AMFLAGS = -I m4 + +EXTRA_DIST = config.rpath diff --git a/Makefile.in b/Makefile.in new file mode 100644 index 0000000..49e68e6 --- /dev/null +++ b/Makefile.in @@ -0,0 +1,689 @@ +# Makefile.in generated by automake 1.10.1 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +subdir = . +DIST_COMMON = README $(am__configure_deps) $(srcdir)/Makefile.am \ + $(srcdir)/Makefile.in $(srcdir)/config.h.in \ + $(top_srcdir)/configure ABOUT-NLS AUTHORS COPYING ChangeLog \ + INSTALL NEWS THANKS TODO compile config.guess config.rpath \ + config.sub depcomp install-sh ltmain.sh missing mkinstalldirs +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/m4/getline.m4 \ + $(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/iconv.m4 \ + $(top_srcdir)/m4/isc-posix.m4 \ + $(top_srcdir)/m4/japhar_grep_cflags.m4 \ + $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \ + $(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libtool.m4 \ + $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ + $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ + $(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \ + $(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.in +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \ + configure.lineno config.status.lineno +mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs +CONFIG_HEADER = config.h +CONFIG_CLEAN_FILES = +SOURCES = +DIST_SOURCES = +RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ + html-recursive info-recursive install-data-recursive \ + install-dvi-recursive install-exec-recursive \ + install-html-recursive install-info-recursive \ + install-pdf-recursive install-ps-recursive install-recursive \ + installcheck-recursive installdirs-recursive pdf-recursive \ + ps-recursive uninstall-recursive +RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ + distclean-recursive maintainer-clean-recursive +ETAGS = etags +CTAGS = ctags +DIST_SUBDIRS = $(SUBDIRS) +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +distdir = $(PACKAGE)-$(VERSION) +top_distdir = $(distdir) +am__remove_distdir = \ + { test ! -d $(distdir) \ + || { find $(distdir) -type d ! -perm -200 -exec chmod u+w {} ';' \ + && rm -fr $(distdir); }; } +DIST_ARCHIVES = $(distdir).tar.gz $(distdir).tar.bz2 +GZIP_ENV = --best +distuninstallcheck_listfiles = find . -type f -print +distcleancheck_listfiles = find . -type f -print +ACLOCAL = @ACLOCAL@ +AMTAR = @AMTAR@ +AR = @AR@ +ATTR_LIB = @ATTR_LIB@ +AUDIT_LIBS = @AUDIT_LIBS@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +BIOAPI_LIB = @BIOAPI_LIB@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CRYPT_LIB = @CRYPT_LIB@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DL_LIBS = @DL_LIBS@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +EXTRA_CFLAGS = @EXTRA_CFLAGS@ +FGREP = @FGREP@ +GMSGFMT = @GMSGFMT@ +GMSGFMT_015 = @GMSGFMT_015@ +GREP = @GREP@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +INTLLIBS = @INTLLIBS@ +INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ +LAUS_LIBS = @LAUS_LIBS@ +LD = @LD@ +LDAP_LIBS = @LDAP_LIBS@ +LDFLAGS = @LDFLAGS@ +LIBICONV = @LIBICONV@ +LIBINTL = @LIBINTL@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBICONV = @LTLIBICONV@ +LTLIBINTL = @LTLIBINTL@ +LTLIBOBJS = @LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +MKDIR_P = @MKDIR_P@ +MSGFMT = @MSGFMT@ +MSGFMT_015 = @MSGFMT_015@ +MSGMERGE = @MSGMERGE@ +NM = @NM@ +NMEDIT = @NMEDIT@ +NSCD_LIB = @NSCD_LIB@ +NSL_LIB = @NSL_LIB@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PAM_LIBS = @PAM_LIBS@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PIE_CFLAGS = @PIE_CFLAGS@ +PIE_LDFLAGS = @PIE_LDFLAGS@ +POSUB = @POSUB@ +RANLIB = @RANLIB@ +SED = @SED@ +SELINUX_LIB = @SELINUX_LIB@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +SLP_LIBS = @SLP_LIBS@ +SSL_LIBS = @SSL_LIBS@ +STRIP = @STRIP@ +TLS_LIBS = @TLS_LIBS@ +USE_NLS = @USE_NLS@ +VERSION = @VERSION@ +XGETTEXT = @XGETTEXT@ +XGETTEXT_015 = @XGETTEXT_015@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libc_cv_fpie = @libc_cv_fpie@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +lt_ECHO = @lt_ECHO@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ + +# +# Copyright (c) 2005 Thorsten Kukuk, Germany +# +# Author: Thorsten Kukuk +# +AUTOMAKE_OPTIONS = 1.8 gnu dist-bzip2 +# +SUBDIRS = m4 etc lib src plugins po +CLEANFILES = *~ +ACLOCAL_AMFLAGS = -I m4 +EXTRA_DIST = config.rpath +all: config.h + $(MAKE) $(AM_MAKEFLAGS) all-recursive + +.SUFFIXES: +am--refresh: + @: +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + echo ' cd $(srcdir) && $(AUTOMAKE) --gnu '; \ + cd $(srcdir) && $(AUTOMAKE) --gnu \ + && exit 0; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu Makefile'; \ + cd $(top_srcdir) && \ + $(AUTOMAKE) --gnu Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + echo ' $(SHELL) ./config.status'; \ + $(SHELL) ./config.status;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + $(SHELL) ./config.status --recheck + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(srcdir) && $(AUTOCONF) +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS) + +config.h: stamp-h1 + @if test ! -f $@; then \ + rm -f stamp-h1; \ + $(MAKE) $(AM_MAKEFLAGS) stamp-h1; \ + else :; fi + +stamp-h1: $(srcdir)/config.h.in $(top_builddir)/config.status + @rm -f stamp-h1 + cd $(top_builddir) && $(SHELL) ./config.status config.h +$(srcdir)/config.h.in: $(am__configure_deps) + cd $(top_srcdir) && $(AUTOHEADER) + rm -f stamp-h1 + touch $@ + +distclean-hdr: + -rm -f config.h stamp-h1 + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs + +distclean-libtool: + -rm -f libtool + +# This directory's subdirectories are mostly independent; you can cd +# into them and run `make' without going through this Makefile. +# To change the values of `make' variables: instead of editing Makefiles, +# (1) if the variable is set in `config.status', edit `config.status' +# (which will cause the Makefiles to be regenerated when you run `make'); +# (2) otherwise, pass the desired values on the `make' command line. +$(RECURSIVE_TARGETS): + @failcom='exit 1'; \ + for f in x $$MAKEFLAGS; do \ + case $$f in \ + *=* | --[!k]*);; \ + *k*) failcom='fail=yes';; \ + esac; \ + done; \ + dot_seen=no; \ + target=`echo $@ | sed s/-recursive//`; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + dot_seen=yes; \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || eval $$failcom; \ + done; \ + if test "$$dot_seen" = "no"; then \ + $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ + fi; test -z "$$fail" + +$(RECURSIVE_CLEAN_TARGETS): + @failcom='exit 1'; \ + for f in x $$MAKEFLAGS; do \ + case $$f in \ + *=* | --[!k]*);; \ + *k*) failcom='fail=yes';; \ + esac; \ + done; \ + dot_seen=no; \ + case "$@" in \ + distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ + *) list='$(SUBDIRS)' ;; \ + esac; \ + rev=''; for subdir in $$list; do \ + if test "$$subdir" = "."; then :; else \ + rev="$$subdir $$rev"; \ + fi; \ + done; \ + rev="$$rev ."; \ + target=`echo $@ | sed s/-recursive//`; \ + for subdir in $$rev; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || eval $$failcom; \ + done && test -z "$$fail" +tags-recursive: + list='$(SUBDIRS)'; for subdir in $$list; do \ + test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ + done +ctags-recursive: + list='$(SUBDIRS)'; for subdir in $$list; do \ + test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ + done + +ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonemtpy = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + mkid -fID $$unique +tags: TAGS + +TAGS: tags-recursive $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + tags=; \ + here=`pwd`; \ + if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ + include_option=--etags-include; \ + empty_fix=.; \ + else \ + include_option=--include; \ + empty_fix=; \ + fi; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test ! -f $$subdir/TAGS || \ + tags="$$tags $$include_option=$$here/$$subdir/TAGS"; \ + fi; \ + done; \ + list='$(SOURCES) $(HEADERS) config.h.in $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$tags $$unique; \ + fi +ctags: CTAGS +CTAGS: ctags-recursive $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + tags=; \ + list='$(SOURCES) $(HEADERS) config.h.in $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + test -z "$(CTAGS_ARGS)$$tags$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$tags $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && cd $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) $$here + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + $(am__remove_distdir) + test -d $(distdir) || mkdir $(distdir) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ + fi; \ + cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ + else \ + test -f $(distdir)/$$file \ + || cp -p $$d/$$file $(distdir)/$$file \ + || exit 1; \ + fi; \ + done + list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test -d "$(distdir)/$$subdir" \ + || $(MKDIR_P) "$(distdir)/$$subdir" \ + || exit 1; \ + distdir=`$(am__cd) $(distdir) && pwd`; \ + top_distdir=`$(am__cd) $(top_distdir) && pwd`; \ + (cd $$subdir && \ + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$$top_distdir" \ + distdir="$$distdir/$$subdir" \ + am__remove_distdir=: \ + am__skip_length_check=: \ + distdir) \ + || exit 1; \ + fi; \ + done + -find $(distdir) -type d ! -perm -777 -exec chmod a+rwx {} \; -o \ + ! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \ + ! -type d ! -perm -400 -exec chmod a+r {} \; -o \ + ! -type d ! -perm -444 -exec $(install_sh) -c -m a+r {} {} \; \ + || chmod -R a+r $(distdir) +dist-gzip: distdir + tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz + $(am__remove_distdir) +dist-bzip2: distdir + tardir=$(distdir) && $(am__tar) | bzip2 -9 -c >$(distdir).tar.bz2 + $(am__remove_distdir) + +dist-lzma: distdir + tardir=$(distdir) && $(am__tar) | lzma -9 -c >$(distdir).tar.lzma + $(am__remove_distdir) + +dist-tarZ: distdir + tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z + $(am__remove_distdir) + +dist-shar: distdir + shar $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).shar.gz + $(am__remove_distdir) + +dist-zip: distdir + -rm -f $(distdir).zip + zip -rq $(distdir).zip $(distdir) + $(am__remove_distdir) + +dist dist-all: distdir + tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz + tardir=$(distdir) && $(am__tar) | bzip2 -9 -c >$(distdir).tar.bz2 + $(am__remove_distdir) + +# This target untars the dist file and tries a VPATH configuration. Then +# it guarantees that the distribution is self-contained by making another +# tarfile. +distcheck: dist + case '$(DIST_ARCHIVES)' in \ + *.tar.gz*) \ + GZIP=$(GZIP_ENV) gunzip -c $(distdir).tar.gz | $(am__untar) ;;\ + *.tar.bz2*) \ + bunzip2 -c $(distdir).tar.bz2 | $(am__untar) ;;\ + *.tar.lzma*) \ + unlzma -c $(distdir).tar.lzma | $(am__untar) ;;\ + *.tar.Z*) \ + uncompress -c $(distdir).tar.Z | $(am__untar) ;;\ + *.shar.gz*) \ + GZIP=$(GZIP_ENV) gunzip -c $(distdir).shar.gz | unshar ;;\ + *.zip*) \ + unzip $(distdir).zip ;;\ + esac + chmod -R a-w $(distdir); chmod a+w $(distdir) + mkdir $(distdir)/_build + mkdir $(distdir)/_inst + chmod a-w $(distdir) + dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \ + && dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \ + && cd $(distdir)/_build \ + && ../configure --srcdir=.. --prefix="$$dc_install_base" \ + $(DISTCHECK_CONFIGURE_FLAGS) \ + && $(MAKE) $(AM_MAKEFLAGS) \ + && $(MAKE) $(AM_MAKEFLAGS) dvi \ + && $(MAKE) $(AM_MAKEFLAGS) check \ + && $(MAKE) $(AM_MAKEFLAGS) install \ + && $(MAKE) $(AM_MAKEFLAGS) installcheck \ + && $(MAKE) $(AM_MAKEFLAGS) uninstall \ + && $(MAKE) $(AM_MAKEFLAGS) distuninstallcheck_dir="$$dc_install_base" \ + distuninstallcheck \ + && chmod -R a-w "$$dc_install_base" \ + && ({ \ + (cd ../.. && umask 077 && mkdir "$$dc_destdir") \ + && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" install \ + && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" uninstall \ + && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" \ + distuninstallcheck_dir="$$dc_destdir" distuninstallcheck; \ + } || { rm -rf "$$dc_destdir"; exit 1; }) \ + && rm -rf "$$dc_destdir" \ + && $(MAKE) $(AM_MAKEFLAGS) dist \ + && rm -rf $(DIST_ARCHIVES) \ + && $(MAKE) $(AM_MAKEFLAGS) distcleancheck + $(am__remove_distdir) + @(echo "$(distdir) archives ready for distribution: "; \ + list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \ + sed -e 1h -e 1s/./=/g -e 1p -e 1x -e '$$p' -e '$$x' +distuninstallcheck: + @cd $(distuninstallcheck_dir) \ + && test `$(distuninstallcheck_listfiles) | wc -l` -le 1 \ + || { echo "ERROR: files left after uninstall:" ; \ + if test -n "$(DESTDIR)"; then \ + echo " (check DESTDIR support)"; \ + fi ; \ + $(distuninstallcheck_listfiles) ; \ + exit 1; } >&2 +distcleancheck: distclean + @if test '$(srcdir)' = . ; then \ + echo "ERROR: distcleancheck can only run from a VPATH build" ; \ + exit 1 ; \ + fi + @test `$(distcleancheck_listfiles) | wc -l` -eq 0 \ + || { echo "ERROR: files left in build directory after distclean:" ; \ + $(distcleancheck_listfiles) ; \ + exit 1; } >&2 +check-am: all-am +check: check-recursive +all-am: Makefile config.h +installdirs: installdirs-recursive +installdirs-am: +install: install-recursive +install-exec: install-exec-recursive +install-data: install-data-recursive +uninstall: uninstall-recursive + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-recursive +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + +clean-generic: + -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-recursive + +clean-am: clean-generic clean-libtool mostlyclean-am + +distclean: distclean-recursive + -rm -f $(am__CONFIG_DISTCLEAN_FILES) + -rm -f Makefile +distclean-am: clean-am distclean-generic distclean-hdr \ + distclean-libtool distclean-tags + +dvi: dvi-recursive + +dvi-am: + +html: html-recursive + +info: info-recursive + +info-am: + +install-data-am: + +install-dvi: install-dvi-recursive + +install-exec-am: + +install-html: install-html-recursive + +install-info: install-info-recursive + +install-man: + +install-pdf: install-pdf-recursive + +install-ps: install-ps-recursive + +installcheck-am: + +maintainer-clean: maintainer-clean-recursive + -rm -f $(am__CONFIG_DISTCLEAN_FILES) + -rm -rf $(top_srcdir)/autom4te.cache + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-recursive + +mostlyclean-am: mostlyclean-generic mostlyclean-libtool + +pdf: pdf-recursive + +pdf-am: + +ps: ps-recursive + +ps-am: + +uninstall-am: + +.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) install-am \ + install-strip + +.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ + all all-am am--refresh check check-am clean clean-generic \ + clean-libtool ctags ctags-recursive dist dist-all dist-bzip2 \ + dist-gzip dist-lzma dist-shar dist-tarZ dist-zip distcheck \ + distclean distclean-generic distclean-hdr distclean-libtool \ + distclean-tags distcleancheck distdir distuninstallcheck dvi \ + dvi-am html html-am info info-am install install-am \ + install-data install-data-am install-dvi install-dvi-am \ + install-exec install-exec-am install-html install-html-am \ + install-info install-info-am install-man install-pdf \ + install-pdf-am install-ps install-ps-am install-strip \ + installcheck installcheck-am installdirs installdirs-am \ + maintainer-clean maintainer-clean-generic mostlyclean \ + mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ + tags tags-recursive uninstall uninstall-am + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/NEWS b/NEWS new file mode 100644 index 0000000..730f2f4 --- /dev/null +++ b/NEWS @@ -0,0 +1,252 @@ +pwdutils NEWS -- history of user-visible changes. + +Copyright (C) 2002-2012 Thorsten Kukuk + +Please send bug reports, questions and suggestions to . + +Version 3.2.19 +* Fix passwd -S + +Version 3.2.18 +* Fix changing of permissions if uid/gid of user will be modified + +Version 3.2.17 +* Fix useradd.local + +Version 3.2.16 +* Make sha512 new default password hash + +Version 3.2.15 +* newgrp: honour dynamically assigned groups + +Version 3.2.14 +* pwck: check +/- entries, too +* grpck: check */- entries, too +* login.defs: remove LOGIN_RETRIES + +Version 3.2.13 +* Only copy regular files if usermod moves home directory + +Version 3.2.12 +* Make sure modified group files are written to disk +* Update translations for sv, fr + +Version 3.2.11 +* Update translations +* Add translation for nl + +Version 3.2.10 +* Fix encoding of polish translations +* Fix long options of grpck/pwck + +Version 3.2.9 +* Move UMASK from /etc/login.defs to /etc/default/useradd + +Version 3.2.8 +* Fix usermod manual page +* Add quiet option to pam_rpasswd.so + +Version 3.2.7 +* Fix possible endless loop in userdel + +Version 3.2.6 +* Fix rpasswd protocol error +* Update translations + +Version 3.2.5 +* Add translations for da +* pwconv: Remove temporary files in case of an error + +Version 3.2.4 +* Make sure changes are really written to disk + +Version 3.2.3 +* New translations +* Adjust documentation + +Version 3.2.2 +* Don't lock system accounts by default + +Version 3.2.1 +* Adjust for new libxcrypt + +Version 3.2.0 +* Better support for audit plugin +* --preferred-uid/gid option for useradd and groupadd + +Version 3.1.4 +* Update polish translation. +* Remove FTMP references. +* Better pwconv support for NIS entries + +Version 3.1.3 +* Allow compiling without native language support. +* Update swedish translation. + +Version 3.1.2 +* Check if crontab is installed before calling it. +* Fix seg.fault in pwconv in error case. + +Version 3.1.1 +* Adjust PAM config files + +Version 3.1.0 +* gpasswd: Add -l and -u option to lock/unlock group passwords +* passwd: Add support for BioAPI +* Add LDAP support for RFC2307bis + +Version 3.0.7 +* passwd.1: correct manual page +* passwd: Allow changing passwords with PAM even if service is unknown + +Version 3.0.6 +* chfn: Fix syntax check for home phone number + +Version 3.0.5 +* Fix compilation error of PAM module with new Linux-PAM release +* Fix CHARACTER_CLASS in /etc/login.defs + +Version 3.0.4 +* Fix pam_rpasswd.so + +Version 3.0.3 +* usermod: Adjust sp_lstchg if -p option is used +* useradd: Preserve existing home directory +* chage: Fix off-by-one errors in output + +Version 3.0.2 +* Fix loading of logging plugins +* Unify options (use always --service) +* Add -a option to usermod for shadow compatibility + +Version 3.0.1 +* usermod: Don't remove old home directory if an error occured + +Version 3.0 +* Add --stdin option for passwd +* Fix useradd -D option +* Fix PAM/syslog interaction +* Fix lot of ignored failing syscalls +* Compile daemons with -fpie/-pie +* Add support for logging plugins +* Add plugin for LAuS support +* Add plugin for audit support +* Add plugin to log with syslog +* Use libnscd +* Add support for GnuTLS +* groupmod: Add options to remove/add single user from a group +* usermod: Add options to remove/add single user from a list of groups +* rpasswd/rpasswdd: Better SLP support + +Version 2.6.4 +* rpasswd/pam_rpasswd.so: Fix SLP URL parsing + +Version 2.6.3 +* newgrp: Add -c option to allow sg emulation + +Version 2.6.2 +* Fix compile problem if SELinux is disabled +* rpasswdd: Re-register SLP service after timeout + +Version 2.6.1 +* newgrp: Fix NGROUPS_MAX handling + +Version 2.6 +* Add -f compat flag to groupadd +* Add UTF8/local locale translation +* Make regex for allowed accounts/groups configurable +* Add optional pam_rpasswd module +* Add SLP support to rpasswd/rpasswdd +* Add pwck +* Add grpck +* Add newgrp +* Add /etc/default/passwd support + +Version 2.5.1 +* Install all manual pages + +Version 2.5 +* Adjust for libselinux v1.5 +* Add pwconv/pwunconv +* Add grpunconv + +Version 2.4 +* Fix -G handling of usermod +* Fix LDAP support +* Add gpasswd, groupmod and usermod +* Copy always all extended attributes +* Add SELinux support for passwd, chsh and chfn +* Make sure that group, passwd and shadow are always created with + correct security attributes +* groupadd -g handling fixed +* vipw/vigr added +* Lot of bug fixes +* Add manual pages +* Add groupadd and groupdel +* useradd and userdel can now create/delete LDAP accounts +* Make compile with OpenLDAP 2.0.x again +* Rewrite ldap functions to meet demands +* chpasswd can now change LDAP passwords +* useradd: Lot of new error checks and bug fixes +* chfn/chsh: Allow user to abort with Ctrl-C during data input +* Add test suite + +Version 2.3 +* Add chpasswd +* Add expiry +* Fix chage options +* rpasswd client now checks server certificate + +Version 2.2 +* Add "-D binddn" option, to allow modifying LDAP data with a special + account. +* passwd and chage: Allow modifying of password expiry informations + stored in a LDAP database. + +Version 2.1 +* Add --disable-ldap option to configure +* Fix typos in chage.1 manual page +* Rewrite passwd manual page and explain all options + +Version 2.0 +* Fix -d and -E option of chage +* Use port 774 as new default +* Make compile with glibc 2.3 and gcc 2.95/3.2/3.3 + +Version 1.99 +* Add chage +* Allow modifying of passwd/shadow file not in /etc (only chage yet) + +Version 1.98 +* Add manual pages for rpasswd and rpasswdd + +Version 1.97 +* rpasswd now reads config file with server name and port number +* Security fix for rpasswdd: don't allow remote changing of root + password without authentification +* Add manual page for rpasswd.conf + +Version 1.96 +* Make compile with gcc 2.x +* root can now change passwords for other user +* timeout if client does not answer fast enough +* Sent LANG as locale to server + +Version 1.95 +* Make location of ldap config files compile time configurable + +Version 1.94 +* Add more sanity checks to prevent file corruption + +Version 1.93 +* Minor bug fixes to rpasswdd + +Version 1.92 +* Add rpasswd and rpasswdd fore secure, remote password changing +* Update to gettext 0.11 + +Version 1.91 +* Many bug fixes + +Version 1.90 +* Complete rewrite diff --git a/README b/README new file mode 100644 index 0000000..60545a3 --- /dev/null +++ b/README @@ -0,0 +1,11 @@ + +This directory contains the sources for the pwdutils. This is a collection +of utilities to manage the passwd information stored in local files, NIS, +NIS+ or LDAP and can replace the shadow suite complete. + +You need to create a certificate with + openssl req -new -x509 -nodes -days 730 -out /etc/rpasswdd.pem \ + -keyout /etc/rpasswdd.pem +for the rpasswd daemon. + + Thorsten Kukuk diff --git a/THANKS b/THANKS new file mode 100644 index 0000000..b4cf57b --- /dev/null +++ b/THANKS @@ -0,0 +1,13 @@ +pwdutils where originally written by Thorsten Kukuk . +It would not be what it is today without the invaluable help of these +people: + +Andreas Schwab +Artem Frolov +Arkadiusz Miskiewicz +Florian Effenberger +Andreas Voegele +Jakub Bogusz +Heike Jurzik +Bernd Glueckert +Mark Rosenstand diff --git a/TODO b/TODO new file mode 100644 index 0000000..8dfc3b1 --- /dev/null +++ b/TODO @@ -0,0 +1,14 @@ + +Adjust README. + +check all malloc/realloc return values for out of memory errors. + +usermod: LDAP: If login is renamed, rename dn, too. + +groupmod: Implement renaming of group entries in LDAP. + +userdel, groupdel, grpunconv: write tests. + +passwd: Make password locking/unlocking work with LDAP (nss_ldap + seems to insert always a "x" as password). + diff --git a/aclocal.m4 b/aclocal.m4 new file mode 100644 index 0000000..9a8fa6f --- /dev/null +++ b/aclocal.m4 @@ -0,0 +1,958 @@ +# generated automatically by aclocal 1.10.1 -*- Autoconf -*- + +# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, +# 2005, 2006, 2007, 2008 Free Software Foundation, Inc. +# 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. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +m4_ifndef([AC_AUTOCONF_VERSION], + [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl +m4_if(AC_AUTOCONF_VERSION, [2.63],, +[m4_warning([this file was generated for autoconf 2.63. +You have another version of autoconf. It may work, but is not guaranteed to. +If you have problems, you may need to regenerate the build system entirely. +To do so, use the procedure documented by the package, typically `autoreconf'.])]) + +# Copyright (C) 2002, 2003, 2005, 2006, 2007 Free Software Foundation, Inc. +# +# 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. + +# AM_AUTOMAKE_VERSION(VERSION) +# ---------------------------- +# Automake X.Y traces this macro to ensure aclocal.m4 has been +# generated from the m4 files accompanying Automake X.Y. +# (This private macro should not be called outside this file.) +AC_DEFUN([AM_AUTOMAKE_VERSION], +[am__api_version='1.10' +dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to +dnl require some minimum version. Point them to the right macro. +m4_if([$1], [1.10.1], [], + [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl +]) + +# _AM_AUTOCONF_VERSION(VERSION) +# ----------------------------- +# aclocal traces this macro to find the Autoconf version. +# This is a private macro too. Using m4_define simplifies +# the logic in aclocal, which can simply ignore this definition. +m4_define([_AM_AUTOCONF_VERSION], []) + +# AM_SET_CURRENT_AUTOMAKE_VERSION +# ------------------------------- +# Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced. +# This function is AC_REQUIREd by AC_INIT_AUTOMAKE. +AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION], +[AM_AUTOMAKE_VERSION([1.10.1])dnl +m4_ifndef([AC_AUTOCONF_VERSION], + [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl +_AM_AUTOCONF_VERSION(AC_AUTOCONF_VERSION)]) + +# AM_AUX_DIR_EXPAND -*- Autoconf -*- + +# Copyright (C) 2001, 2003, 2005 Free Software Foundation, Inc. +# +# 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. + +# For projects using AC_CONFIG_AUX_DIR([foo]), Autoconf sets +# $ac_aux_dir to `$srcdir/foo'. In other projects, it is set to +# `$srcdir', `$srcdir/..', or `$srcdir/../..'. +# +# Of course, Automake must honor this variable whenever it calls a +# tool from the auxiliary directory. The problem is that $srcdir (and +# therefore $ac_aux_dir as well) can be either absolute or relative, +# depending on how configure is run. This is pretty annoying, since +# it makes $ac_aux_dir quite unusable in subdirectories: in the top +# source directory, any form will work fine, but in subdirectories a +# relative path needs to be adjusted first. +# +# $ac_aux_dir/missing +# fails when called from a subdirectory if $ac_aux_dir is relative +# $top_srcdir/$ac_aux_dir/missing +# fails if $ac_aux_dir is absolute, +# fails when called from a subdirectory in a VPATH build with +# a relative $ac_aux_dir +# +# The reason of the latter failure is that $top_srcdir and $ac_aux_dir +# are both prefixed by $srcdir. In an in-source build this is usually +# harmless because $srcdir is `.', but things will broke when you +# start a VPATH build or use an absolute $srcdir. +# +# So we could use something similar to $top_srcdir/$ac_aux_dir/missing, +# iff we strip the leading $srcdir from $ac_aux_dir. That would be: +# am_aux_dir='\$(top_srcdir)/'`expr "$ac_aux_dir" : "$srcdir//*\(.*\)"` +# and then we would define $MISSING as +# MISSING="\${SHELL} $am_aux_dir/missing" +# This will work as long as MISSING is not called from configure, because +# unfortunately $(top_srcdir) has no meaning in configure. +# However there are other variables, like CC, which are often used in +# configure, and could therefore not use this "fixed" $ac_aux_dir. +# +# Another solution, used here, is to always expand $ac_aux_dir to an +# absolute PATH. The drawback is that using absolute paths prevent a +# configured tree to be moved without reconfiguration. + +AC_DEFUN([AM_AUX_DIR_EXPAND], +[dnl Rely on autoconf to set up CDPATH properly. +AC_PREREQ([2.50])dnl +# expand $ac_aux_dir to an absolute path +am_aux_dir=`cd $ac_aux_dir && pwd` +]) + +# AM_CONDITIONAL -*- Autoconf -*- + +# Copyright (C) 1997, 2000, 2001, 2003, 2004, 2005, 2006 +# Free Software Foundation, Inc. +# +# 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. + +# serial 8 + +# AM_CONDITIONAL(NAME, SHELL-CONDITION) +# ------------------------------------- +# Define a conditional. +AC_DEFUN([AM_CONDITIONAL], +[AC_PREREQ(2.52)dnl + ifelse([$1], [TRUE], [AC_FATAL([$0: invalid condition: $1])], + [$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl +AC_SUBST([$1_TRUE])dnl +AC_SUBST([$1_FALSE])dnl +_AM_SUBST_NOTMAKE([$1_TRUE])dnl +_AM_SUBST_NOTMAKE([$1_FALSE])dnl +if $2; then + $1_TRUE= + $1_FALSE='#' +else + $1_TRUE='#' + $1_FALSE= +fi +AC_CONFIG_COMMANDS_PRE( +[if test -z "${$1_TRUE}" && test -z "${$1_FALSE}"; then + AC_MSG_ERROR([[conditional "$1" was never defined. +Usually this means the macro was only invoked conditionally.]]) +fi])]) + +# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006 +# Free Software Foundation, Inc. +# +# 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. + +# serial 9 + +# There are a few dirty hacks below to avoid letting `AC_PROG_CC' be +# written in clear, in which case automake, when reading aclocal.m4, +# will think it sees a *use*, and therefore will trigger all it's +# C support machinery. Also note that it means that autoscan, seeing +# CC etc. in the Makefile, will ask for an AC_PROG_CC use... + + +# _AM_DEPENDENCIES(NAME) +# ---------------------- +# See how the compiler implements dependency checking. +# NAME is "CC", "CXX", "GCJ", or "OBJC". +# We try a few techniques and use that to set a single cache variable. +# +# We don't AC_REQUIRE the corresponding AC_PROG_CC since the latter was +# modified to invoke _AM_DEPENDENCIES(CC); we would have a circular +# dependency, and given that the user is not expected to run this macro, +# just rely on AC_PROG_CC. +AC_DEFUN([_AM_DEPENDENCIES], +[AC_REQUIRE([AM_SET_DEPDIR])dnl +AC_REQUIRE([AM_OUTPUT_DEPENDENCY_COMMANDS])dnl +AC_REQUIRE([AM_MAKE_INCLUDE])dnl +AC_REQUIRE([AM_DEP_TRACK])dnl + +ifelse([$1], CC, [depcc="$CC" am_compiler_list=], + [$1], CXX, [depcc="$CXX" am_compiler_list=], + [$1], OBJC, [depcc="$OBJC" am_compiler_list='gcc3 gcc'], + [$1], UPC, [depcc="$UPC" am_compiler_list=], + [$1], GCJ, [depcc="$GCJ" am_compiler_list='gcc3 gcc'], + [depcc="$$1" am_compiler_list=]) + +AC_CACHE_CHECK([dependency style of $depcc], + [am_cv_$1_dependencies_compiler_type], +[if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then + # We make a subdir and do the tests there. Otherwise we can end up + # making bogus files that we don't know about and never remove. For + # instance it was reported that on HP-UX the gcc test will end up + # making a dummy file named `D' -- because `-MD' means `put the output + # in D'. + mkdir conftest.dir + # Copy depcomp to subdir because otherwise we won't find it if we're + # using a relative directory. + cp "$am_depcomp" conftest.dir + cd conftest.dir + # We will build objects and dependencies in a subdirectory because + # it helps to detect inapplicable dependency modes. For instance + # both Tru64's cc and ICC support -MD to output dependencies as a + # side effect of compilation, but ICC will put the dependencies in + # the current directory while Tru64 will put them in the object + # directory. + mkdir sub + + am_cv_$1_dependencies_compiler_type=none + if test "$am_compiler_list" = ""; then + am_compiler_list=`sed -n ['s/^#*\([a-zA-Z0-9]*\))$/\1/p'] < ./depcomp` + fi + for depmode in $am_compiler_list; do + # Setup a source with many dependencies, because some compilers + # like to wrap large dependency lists on column 80 (with \), and + # we should not choose a depcomp mode which is confused by this. + # + # We need to recreate these files for each test, as the compiler may + # overwrite some of them when testing with obscure command lines. + # This happens at least with the AIX C compiler. + : > sub/conftest.c + for i in 1 2 3 4 5 6; do + echo '#include "conftst'$i'.h"' >> sub/conftest.c + # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with + # Solaris 8's {/usr,}/bin/sh. + touch sub/conftst$i.h + done + echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf + + case $depmode in + nosideeffect) + # after this tag, mechanisms are not by side-effect, so they'll + # only be used when explicitly requested + if test "x$enable_dependency_tracking" = xyes; then + continue + else + break + fi + ;; + none) break ;; + esac + # We check with `-c' and `-o' for the sake of the "dashmstdout" + # mode. It turns out that the SunPro C++ compiler does not properly + # handle `-M -o', and we need to detect this. + if depmode=$depmode \ + source=sub/conftest.c object=sub/conftest.${OBJEXT-o} \ + depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ + $SHELL ./depcomp $depcc -c -o sub/conftest.${OBJEXT-o} sub/conftest.c \ + >/dev/null 2>conftest.err && + grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && + grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && + grep sub/conftest.${OBJEXT-o} sub/conftest.Po > /dev/null 2>&1 && + ${MAKE-make} -s -f confmf > /dev/null 2>&1; then + # icc doesn't choke on unknown options, it will just issue warnings + # or remarks (even with -Werror). So we grep stderr for any message + # that says an option was ignored or not supported. + # When given -MP, icc 7.0 and 7.1 complain thusly: + # icc: Command line warning: ignoring option '-M'; no argument required + # The diagnosis changed in icc 8.0: + # icc: Command line remark: option '-MP' not supported + if (grep 'ignoring option' conftest.err || + grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else + am_cv_$1_dependencies_compiler_type=$depmode + break + fi + fi + done + + cd .. + rm -rf conftest.dir +else + am_cv_$1_dependencies_compiler_type=none +fi +]) +AC_SUBST([$1DEPMODE], [depmode=$am_cv_$1_dependencies_compiler_type]) +AM_CONDITIONAL([am__fastdep$1], [ + test "x$enable_dependency_tracking" != xno \ + && test "$am_cv_$1_dependencies_compiler_type" = gcc3]) +]) + + +# AM_SET_DEPDIR +# ------------- +# Choose a directory name for dependency files. +# This macro is AC_REQUIREd in _AM_DEPENDENCIES +AC_DEFUN([AM_SET_DEPDIR], +[AC_REQUIRE([AM_SET_LEADING_DOT])dnl +AC_SUBST([DEPDIR], ["${am__leading_dot}deps"])dnl +]) + + +# AM_DEP_TRACK +# ------------ +AC_DEFUN([AM_DEP_TRACK], +[AC_ARG_ENABLE(dependency-tracking, +[ --disable-dependency-tracking speeds up one-time build + --enable-dependency-tracking do not reject slow dependency extractors]) +if test "x$enable_dependency_tracking" != xno; then + am_depcomp="$ac_aux_dir/depcomp" + AMDEPBACKSLASH='\' +fi +AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno]) +AC_SUBST([AMDEPBACKSLASH])dnl +_AM_SUBST_NOTMAKE([AMDEPBACKSLASH])dnl +]) + +# Generate code to set up dependency tracking. -*- Autoconf -*- + +# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005 +# Free Software Foundation, Inc. +# +# 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. + +#serial 3 + +# _AM_OUTPUT_DEPENDENCY_COMMANDS +# ------------------------------ +AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS], +[for mf in $CONFIG_FILES; do + # Strip MF so we end up with the name of the file. + mf=`echo "$mf" | sed -e 's/:.*$//'` + # Check whether this is an Automake generated Makefile or not. + # We used to match only the files named `Makefile.in', but + # some people rename them; so instead we look at the file content. + # Grep'ing the first line is not enough: some people post-process + # each Makefile.in and add a new line on top of each file to say so. + # Grep'ing the whole file is not good either: AIX grep has a line + # limit of 2048, but all sed's we know have understand at least 4000. + if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then + dirpart=`AS_DIRNAME("$mf")` + else + continue + fi + # Extract the definition of DEPDIR, am__include, and am__quote + # from the Makefile without running `make'. + DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` + test -z "$DEPDIR" && continue + am__include=`sed -n 's/^am__include = //p' < "$mf"` + test -z "am__include" && continue + am__quote=`sed -n 's/^am__quote = //p' < "$mf"` + # When using ansi2knr, U may be empty or an underscore; expand it + U=`sed -n 's/^U = //p' < "$mf"` + # Find all dependency output files, they are included files with + # $(DEPDIR) in their names. We invoke sed twice because it is the + # simplest approach to changing $(DEPDIR) to its actual value in the + # expansion. + for file in `sed -n " + s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ + sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do + # Make sure the directory exists. + test -f "$dirpart/$file" && continue + fdir=`AS_DIRNAME(["$file"])` + AS_MKDIR_P([$dirpart/$fdir]) + # echo "creating $dirpart/$file" + echo '# dummy' > "$dirpart/$file" + done +done +])# _AM_OUTPUT_DEPENDENCY_COMMANDS + + +# AM_OUTPUT_DEPENDENCY_COMMANDS +# ----------------------------- +# This macro should only be invoked once -- use via AC_REQUIRE. +# +# This code is only required when automatic dependency tracking +# is enabled. FIXME. This creates each `.P' file that we will +# need in order to bootstrap the dependency handling code. +AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS], +[AC_CONFIG_COMMANDS([depfiles], + [test x"$AMDEP_TRUE" != x"" || _AM_OUTPUT_DEPENDENCY_COMMANDS], + [AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"]) +]) + + +# Copyright (C) 1996, 1998, 1999, 2000, 2001, 2002, 2003, 2005 +# Free Software Foundation, Inc. +# +# 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. + +# serial 3 + +AC_DEFUN([AM_WITH_DMALLOC], +[AC_MSG_CHECKING([if malloc debugging is wanted]) +AC_ARG_WITH(dmalloc, +[ --with-dmalloc use dmalloc, as in + http://www.dmalloc.com/dmalloc.tar.gz], +[if test "$withval" = yes; then + AC_MSG_RESULT(yes) + AC_DEFINE(WITH_DMALLOC,1, + [Define if using the dmalloc debugging malloc package]) + LIBS="$LIBS -ldmalloc" + LDFLAGS="$LDFLAGS -g" +else + AC_MSG_RESULT(no) +fi], [AC_MSG_RESULT(no)]) +]) + +AU_DEFUN([fp_WITH_DMALLOC], [AM_WITH_DMALLOC]) + +# Copyright (C) 1996, 1997, 2000, 2001, 2003, 2005 +# Free Software Foundation, Inc. +# +# 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. + +# serial 8 + +# AM_CONFIG_HEADER is obsolete. It has been replaced by AC_CONFIG_HEADERS. +AU_DEFUN([AM_CONFIG_HEADER], [AC_CONFIG_HEADERS($@)]) + +# Do all the work for Automake. -*- Autoconf -*- + +# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, +# 2005, 2006, 2008 Free Software Foundation, Inc. +# +# 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. + +# serial 13 + +# This macro actually does too much. Some checks are only needed if +# your package does certain things. But this isn't really a big deal. + +# AM_INIT_AUTOMAKE(PACKAGE, VERSION, [NO-DEFINE]) +# AM_INIT_AUTOMAKE([OPTIONS]) +# ----------------------------------------------- +# The call with PACKAGE and VERSION arguments is the old style +# call (pre autoconf-2.50), which is being phased out. PACKAGE +# and VERSION should now be passed to AC_INIT and removed from +# the call to AM_INIT_AUTOMAKE. +# We support both call styles for the transition. After +# the next Automake release, Autoconf can make the AC_INIT +# arguments mandatory, and then we can depend on a new Autoconf +# release and drop the old call support. +AC_DEFUN([AM_INIT_AUTOMAKE], +[AC_PREREQ([2.60])dnl +dnl Autoconf wants to disallow AM_ names. We explicitly allow +dnl the ones we care about. +m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl +AC_REQUIRE([AM_SET_CURRENT_AUTOMAKE_VERSION])dnl +AC_REQUIRE([AC_PROG_INSTALL])dnl +if test "`cd $srcdir && pwd`" != "`pwd`"; then + # Use -I$(srcdir) only when $(srcdir) != ., so that make's output + # is not polluted with repeated "-I." + AC_SUBST([am__isrc], [' -I$(srcdir)'])_AM_SUBST_NOTMAKE([am__isrc])dnl + # test to see if srcdir already configured + if test -f $srcdir/config.status; then + AC_MSG_ERROR([source directory already configured; run "make distclean" there first]) + fi +fi + +# test whether we have cygpath +if test -z "$CYGPATH_W"; then + if (cygpath --version) >/dev/null 2>/dev/null; then + CYGPATH_W='cygpath -w' + else + CYGPATH_W=echo + fi +fi +AC_SUBST([CYGPATH_W]) + +# Define the identity of the package. +dnl Distinguish between old-style and new-style calls. +m4_ifval([$2], +[m4_ifval([$3], [_AM_SET_OPTION([no-define])])dnl + AC_SUBST([PACKAGE], [$1])dnl + AC_SUBST([VERSION], [$2])], +[_AM_SET_OPTIONS([$1])dnl +dnl Diagnose old-style AC_INIT with new-style AM_AUTOMAKE_INIT. +m4_if(m4_ifdef([AC_PACKAGE_NAME], 1)m4_ifdef([AC_PACKAGE_VERSION], 1), 11,, + [m4_fatal([AC_INIT should be called with package and version arguments])])dnl + AC_SUBST([PACKAGE], ['AC_PACKAGE_TARNAME'])dnl + AC_SUBST([VERSION], ['AC_PACKAGE_VERSION'])])dnl + +_AM_IF_OPTION([no-define],, +[AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE", [Name of package]) + AC_DEFINE_UNQUOTED(VERSION, "$VERSION", [Version number of package])])dnl + +# Some tools Automake needs. +AC_REQUIRE([AM_SANITY_CHECK])dnl +AC_REQUIRE([AC_ARG_PROGRAM])dnl +AM_MISSING_PROG(ACLOCAL, aclocal-${am__api_version}) +AM_MISSING_PROG(AUTOCONF, autoconf) +AM_MISSING_PROG(AUTOMAKE, automake-${am__api_version}) +AM_MISSING_PROG(AUTOHEADER, autoheader) +AM_MISSING_PROG(MAKEINFO, makeinfo) +AM_PROG_INSTALL_SH +AM_PROG_INSTALL_STRIP +AC_REQUIRE([AM_PROG_MKDIR_P])dnl +# We need awk for the "check" target. The system "awk" is bad on +# some platforms. +AC_REQUIRE([AC_PROG_AWK])dnl +AC_REQUIRE([AC_PROG_MAKE_SET])dnl +AC_REQUIRE([AM_SET_LEADING_DOT])dnl +_AM_IF_OPTION([tar-ustar], [_AM_PROG_TAR([ustar])], + [_AM_IF_OPTION([tar-pax], [_AM_PROG_TAR([pax])], + [_AM_PROG_TAR([v7])])]) +_AM_IF_OPTION([no-dependencies],, +[AC_PROVIDE_IFELSE([AC_PROG_CC], + [_AM_DEPENDENCIES(CC)], + [define([AC_PROG_CC], + defn([AC_PROG_CC])[_AM_DEPENDENCIES(CC)])])dnl +AC_PROVIDE_IFELSE([AC_PROG_CXX], + [_AM_DEPENDENCIES(CXX)], + [define([AC_PROG_CXX], + defn([AC_PROG_CXX])[_AM_DEPENDENCIES(CXX)])])dnl +AC_PROVIDE_IFELSE([AC_PROG_OBJC], + [_AM_DEPENDENCIES(OBJC)], + [define([AC_PROG_OBJC], + defn([AC_PROG_OBJC])[_AM_DEPENDENCIES(OBJC)])])dnl +]) +]) + + +# When config.status generates a header, we must update the stamp-h file. +# This file resides in the same directory as the config header +# that is generated. The stamp files are numbered to have different names. + +# Autoconf calls _AC_AM_CONFIG_HEADER_HOOK (when defined) in the +# loop where config.status creates the headers, so we can generate +# our stamp files there. +AC_DEFUN([_AC_AM_CONFIG_HEADER_HOOK], +[# Compute $1's index in $config_headers. +_am_arg=$1 +_am_stamp_count=1 +for _am_header in $config_headers :; do + case $_am_header in + $_am_arg | $_am_arg:* ) + break ;; + * ) + _am_stamp_count=`expr $_am_stamp_count + 1` ;; + esac +done +echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count]) + +# Copyright (C) 2001, 2003, 2005 Free Software Foundation, Inc. +# +# 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. + +# AM_PROG_INSTALL_SH +# ------------------ +# Define $install_sh. +AC_DEFUN([AM_PROG_INSTALL_SH], +[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl +install_sh=${install_sh-"\$(SHELL) $am_aux_dir/install-sh"} +AC_SUBST(install_sh)]) + +# Copyright (C) 2003, 2005 Free Software Foundation, Inc. +# +# 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. + +# serial 2 + +# Check whether the underlying file-system supports filenames +# with a leading dot. For instance MS-DOS doesn't. +AC_DEFUN([AM_SET_LEADING_DOT], +[rm -rf .tst 2>/dev/null +mkdir .tst 2>/dev/null +if test -d .tst; then + am__leading_dot=. +else + am__leading_dot=_ +fi +rmdir .tst 2>/dev/null +AC_SUBST([am__leading_dot])]) + +# Check to see how 'make' treats includes. -*- Autoconf -*- + +# Copyright (C) 2001, 2002, 2003, 2005 Free Software Foundation, Inc. +# +# 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. + +# serial 3 + +# AM_MAKE_INCLUDE() +# ----------------- +# Check to see how make treats includes. +AC_DEFUN([AM_MAKE_INCLUDE], +[am_make=${MAKE-make} +cat > confinc << 'END' +am__doit: + @echo done +.PHONY: am__doit +END +# If we don't find an include directive, just comment out the code. +AC_MSG_CHECKING([for style of include used by $am_make]) +am__include="#" +am__quote= +_am_result=none +# First try GNU make style include. +echo "include confinc" > confmf +# We grep out `Entering directory' and `Leaving directory' +# messages which can occur if `w' ends up in MAKEFLAGS. +# In particular we don't look at `^make:' because GNU make might +# be invoked under some other name (usually "gmake"), in which +# case it prints its new name instead of `make'. +if test "`$am_make -s -f confmf 2> /dev/null | grep -v 'ing directory'`" = "done"; then + am__include=include + am__quote= + _am_result=GNU +fi +# Now try BSD make style include. +if test "$am__include" = "#"; then + echo '.include "confinc"' > confmf + if test "`$am_make -s -f confmf 2> /dev/null`" = "done"; then + am__include=.include + am__quote="\"" + _am_result=BSD + fi +fi +AC_SUBST([am__include]) +AC_SUBST([am__quote]) +AC_MSG_RESULT([$_am_result]) +rm -f confinc confmf +]) + +# Copyright (C) 1999, 2000, 2001, 2003, 2004, 2005 +# Free Software Foundation, Inc. +# +# 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. + +# serial 5 + +# AM_PROG_CC_C_O +# -------------- +# Like AC_PROG_CC_C_O, but changed for automake. +AC_DEFUN([AM_PROG_CC_C_O], +[AC_REQUIRE([AC_PROG_CC_C_O])dnl +AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl +AC_REQUIRE_AUX_FILE([compile])dnl +# FIXME: we rely on the cache variable name because +# there is no other way. +set dummy $CC +ac_cc=`echo $[2] | sed ['s/[^a-zA-Z0-9_]/_/g;s/^[0-9]/_/']` +if eval "test \"`echo '$ac_cv_prog_cc_'${ac_cc}_c_o`\" != yes"; then + # Losing compiler, so override with the script. + # FIXME: It is wrong to rewrite CC. + # But if we don't then we get into trouble of one sort or another. + # A longer-term fix would be to have automake use am__CC in this case, + # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)" + CC="$am_aux_dir/compile $CC" +fi +dnl Make sure AC_PROG_CC is never called again, or it will override our +dnl setting of CC. +m4_define([AC_PROG_CC], + [m4_fatal([AC_PROG_CC cannot be called after AM_PROG_CC_C_O])]) +]) + +# Fake the existence of programs that GNU maintainers use. -*- Autoconf -*- + +# Copyright (C) 1997, 1999, 2000, 2001, 2003, 2004, 2005 +# Free Software Foundation, Inc. +# +# 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. + +# serial 5 + +# AM_MISSING_PROG(NAME, PROGRAM) +# ------------------------------ +AC_DEFUN([AM_MISSING_PROG], +[AC_REQUIRE([AM_MISSING_HAS_RUN]) +$1=${$1-"${am_missing_run}$2"} +AC_SUBST($1)]) + + +# AM_MISSING_HAS_RUN +# ------------------ +# Define MISSING if not defined so far and test if it supports --run. +# If it does, set am_missing_run to use it, otherwise, to nothing. +AC_DEFUN([AM_MISSING_HAS_RUN], +[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl +AC_REQUIRE_AUX_FILE([missing])dnl +test x"${MISSING+set}" = xset || MISSING="\${SHELL} $am_aux_dir/missing" +# Use eval to expand $SHELL +if eval "$MISSING --run true"; then + am_missing_run="$MISSING --run " +else + am_missing_run= + AC_MSG_WARN([`missing' script is too old or missing]) +fi +]) + +# Copyright (C) 2003, 2004, 2005, 2006 Free Software Foundation, Inc. +# +# 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. + +# AM_PROG_MKDIR_P +# --------------- +# Check for `mkdir -p'. +AC_DEFUN([AM_PROG_MKDIR_P], +[AC_PREREQ([2.60])dnl +AC_REQUIRE([AC_PROG_MKDIR_P])dnl +dnl Automake 1.8 to 1.9.6 used to define mkdir_p. We now use MKDIR_P, +dnl while keeping a definition of mkdir_p for backward compatibility. +dnl @MKDIR_P@ is magic: AC_OUTPUT adjusts its value for each Makefile. +dnl However we cannot define mkdir_p as $(MKDIR_P) for the sake of +dnl Makefile.ins that do not define MKDIR_P, so we do our own +dnl adjustment using top_builddir (which is defined more often than +dnl MKDIR_P). +AC_SUBST([mkdir_p], ["$MKDIR_P"])dnl +case $mkdir_p in + [[\\/$]]* | ?:[[\\/]]*) ;; + */*) mkdir_p="\$(top_builddir)/$mkdir_p" ;; +esac +]) + +# Helper functions for option handling. -*- Autoconf -*- + +# Copyright (C) 2001, 2002, 2003, 2005 Free Software Foundation, Inc. +# +# 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. + +# serial 3 + +# _AM_MANGLE_OPTION(NAME) +# ----------------------- +AC_DEFUN([_AM_MANGLE_OPTION], +[[_AM_OPTION_]m4_bpatsubst($1, [[^a-zA-Z0-9_]], [_])]) + +# _AM_SET_OPTION(NAME) +# ------------------------------ +# Set option NAME. Presently that only means defining a flag for this option. +AC_DEFUN([_AM_SET_OPTION], +[m4_define(_AM_MANGLE_OPTION([$1]), 1)]) + +# _AM_SET_OPTIONS(OPTIONS) +# ---------------------------------- +# OPTIONS is a space-separated list of Automake options. +AC_DEFUN([_AM_SET_OPTIONS], +[AC_FOREACH([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])]) + +# _AM_IF_OPTION(OPTION, IF-SET, [IF-NOT-SET]) +# ------------------------------------------- +# Execute IF-SET if OPTION is set, IF-NOT-SET otherwise. +AC_DEFUN([_AM_IF_OPTION], +[m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])]) + +# Check to make sure that the build environment is sane. -*- Autoconf -*- + +# Copyright (C) 1996, 1997, 2000, 2001, 2003, 2005 +# Free Software Foundation, Inc. +# +# 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. + +# serial 4 + +# AM_SANITY_CHECK +# --------------- +AC_DEFUN([AM_SANITY_CHECK], +[AC_MSG_CHECKING([whether build environment is sane]) +# Just in case +sleep 1 +echo timestamp > conftest.file +# Do `set' in a subshell so we don't clobber the current shell's +# arguments. Must try -L first in case configure is actually a +# symlink; some systems play weird games with the mod time of symlinks +# (eg FreeBSD returns the mod time of the symlink's containing +# directory). +if ( + set X `ls -Lt $srcdir/configure conftest.file 2> /dev/null` + if test "$[*]" = "X"; then + # -L didn't work. + set X `ls -t $srcdir/configure conftest.file` + fi + rm -f conftest.file + if test "$[*]" != "X $srcdir/configure conftest.file" \ + && test "$[*]" != "X conftest.file $srcdir/configure"; then + + # If neither matched, then we have a broken ls. This can happen + # if, for instance, CONFIG_SHELL is bash and it inherits a + # broken ls alias from the environment. This has actually + # happened. Such a system could not be considered "sane". + AC_MSG_ERROR([ls -t appears to fail. Make sure there is not a broken +alias in your environment]) + fi + + test "$[2]" = conftest.file + ) +then + # Ok. + : +else + AC_MSG_ERROR([newly created file is older than distributed files! +Check your system clock]) +fi +AC_MSG_RESULT(yes)]) + +# Copyright (C) 2001, 2003, 2005 Free Software Foundation, Inc. +# +# 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. + +# AM_PROG_INSTALL_STRIP +# --------------------- +# One issue with vendor `install' (even GNU) is that you can't +# specify the program used to strip binaries. This is especially +# annoying in cross-compiling environments, where the build's strip +# is unlikely to handle the host's binaries. +# Fortunately install-sh will honor a STRIPPROG variable, so we +# always use install-sh in `make install-strip', and initialize +# STRIPPROG with the value of the STRIP variable (set by the user). +AC_DEFUN([AM_PROG_INSTALL_STRIP], +[AC_REQUIRE([AM_PROG_INSTALL_SH])dnl +# Installed binaries are usually stripped using `strip' when the user +# run `make install-strip'. However `strip' might not be the right +# tool to use in cross-compilation environments, therefore Automake +# will honor the `STRIP' environment variable to overrule this program. +dnl Don't test for $cross_compiling = yes, because it might be `maybe'. +if test "$cross_compiling" != no; then + AC_CHECK_TOOL([STRIP], [strip], :) +fi +INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" +AC_SUBST([INSTALL_STRIP_PROGRAM])]) + +# Copyright (C) 2006 Free Software Foundation, Inc. +# +# 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. + +# _AM_SUBST_NOTMAKE(VARIABLE) +# --------------------------- +# Prevent Automake from outputting VARIABLE = @VARIABLE@ in Makefile.in. +# This macro is traced by Automake. +AC_DEFUN([_AM_SUBST_NOTMAKE]) + +# Check how to create a tarball. -*- Autoconf -*- + +# Copyright (C) 2004, 2005 Free Software Foundation, Inc. +# +# 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. + +# serial 2 + +# _AM_PROG_TAR(FORMAT) +# -------------------- +# Check how to create a tarball in format FORMAT. +# FORMAT should be one of `v7', `ustar', or `pax'. +# +# Substitute a variable $(am__tar) that is a command +# writing to stdout a FORMAT-tarball containing the directory +# $tardir. +# tardir=directory && $(am__tar) > result.tar +# +# Substitute a variable $(am__untar) that extract such +# a tarball read from stdin. +# $(am__untar) < result.tar +AC_DEFUN([_AM_PROG_TAR], +[# Always define AMTAR for backward compatibility. +AM_MISSING_PROG([AMTAR], [tar]) +m4_if([$1], [v7], + [am__tar='${AMTAR} chof - "$$tardir"'; am__untar='${AMTAR} xf -'], + [m4_case([$1], [ustar],, [pax],, + [m4_fatal([Unknown tar format])]) +AC_MSG_CHECKING([how to create a $1 tar archive]) +# Loop over all known methods to create a tar archive until one works. +_am_tools='gnutar m4_if([$1], [ustar], [plaintar]) pax cpio none' +_am_tools=${am_cv_prog_tar_$1-$_am_tools} +# Do not fold the above two line into one, because Tru64 sh and +# Solaris sh will not grok spaces in the rhs of `-'. +for _am_tool in $_am_tools +do + case $_am_tool in + gnutar) + for _am_tar in tar gnutar gtar; + do + AM_RUN_LOG([$_am_tar --version]) && break + done + am__tar="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$$tardir"' + am__tar_="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$tardir"' + am__untar="$_am_tar -xf -" + ;; + plaintar) + # Must skip GNU tar: if it does not support --format= it doesn't create + # ustar tarball either. + (tar --version) >/dev/null 2>&1 && continue + am__tar='tar chf - "$$tardir"' + am__tar_='tar chf - "$tardir"' + am__untar='tar xf -' + ;; + pax) + am__tar='pax -L -x $1 -w "$$tardir"' + am__tar_='pax -L -x $1 -w "$tardir"' + am__untar='pax -r' + ;; + cpio) + am__tar='find "$$tardir" -print | cpio -o -H $1 -L' + am__tar_='find "$tardir" -print | cpio -o -H $1 -L' + am__untar='cpio -i -H $1 -d' + ;; + none) + am__tar=false + am__tar_=false + am__untar=false + ;; + esac + + # If the value was cached, stop now. We just wanted to have am__tar + # and am__untar set. + test -n "${am_cv_prog_tar_$1}" && break + + # tar/untar a dummy directory, and stop if the command works + rm -rf conftest.dir + mkdir conftest.dir + echo GrepMe > conftest.dir/file + AM_RUN_LOG([tardir=conftest.dir && eval $am__tar_ >conftest.tar]) + rm -rf conftest.dir + if test -s conftest.tar; then + AM_RUN_LOG([$am__untar /dev/null 2>&1 && break + fi +done +rm -rf conftest.dir + +AC_CACHE_VAL([am_cv_prog_tar_$1], [am_cv_prog_tar_$1=$_am_tool]) +AC_MSG_RESULT([$am_cv_prog_tar_$1])]) +AC_SUBST([am__tar]) +AC_SUBST([am__untar]) +]) # _AM_PROG_TAR + +m4_include([m4/getline.m4]) +m4_include([m4/gettext.m4]) +m4_include([m4/iconv.m4]) +m4_include([m4/isc-posix.m4]) +m4_include([m4/japhar_grep_cflags.m4]) +m4_include([m4/lib-ld.m4]) +m4_include([m4/lib-link.m4]) +m4_include([m4/lib-prefix.m4]) +m4_include([m4/libtool.m4]) +m4_include([m4/ltoptions.m4]) +m4_include([m4/ltsugar.m4]) +m4_include([m4/ltversion.m4]) +m4_include([m4/lt~obsolete.m4]) +m4_include([m4/nls.m4]) +m4_include([m4/po.m4]) +m4_include([m4/progtest.m4]) diff --git a/compile b/compile new file mode 100755 index 0000000..1b1d232 --- /dev/null +++ b/compile @@ -0,0 +1,142 @@ +#! /bin/sh +# Wrapper for compilers which do not understand `-c -o'. + +scriptversion=2005-05-14.22 + +# Copyright (C) 1999, 2000, 2003, 2004, 2005 Free Software Foundation, Inc. +# Written by Tom Tromey . +# +# 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, 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. + +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that program. + +# This file is maintained in Automake, please report +# bugs to or send patches to +# . + +case $1 in + '') + echo "$0: No command. Try \`$0 --help' for more information." 1>&2 + exit 1; + ;; + -h | --h*) + cat <<\EOF +Usage: compile [--help] [--version] PROGRAM [ARGS] + +Wrapper for compilers which do not understand `-c -o'. +Remove `-o dest.o' from ARGS, run PROGRAM with the remaining +arguments, and rename the output as expected. + +If you are trying to build a whole package this is not the +right script to run: please start by reading the file `INSTALL'. + +Report bugs to . +EOF + exit $? + ;; + -v | --v*) + echo "compile $scriptversion" + exit $? + ;; +esac + +ofile= +cfile= +eat= + +for arg +do + if test -n "$eat"; then + eat= + else + case $1 in + -o) + # configure might choose to run compile as `compile cc -o foo foo.c'. + # So we strip `-o arg' only if arg is an object. + eat=1 + case $2 in + *.o | *.obj) + ofile=$2 + ;; + *) + set x "$@" -o "$2" + shift + ;; + esac + ;; + *.c) + cfile=$1 + set x "$@" "$1" + shift + ;; + *) + set x "$@" "$1" + shift + ;; + esac + fi + shift +done + +if test -z "$ofile" || test -z "$cfile"; then + # If no `-o' option was seen then we might have been invoked from a + # pattern rule where we don't need one. That is ok -- this is a + # normal compilation that the losing compiler can handle. If no + # `.c' file was seen then we are probably linking. That is also + # ok. + exec "$@" +fi + +# Name of file we expect compiler to create. +cofile=`echo "$cfile" | sed -e 's|^.*/||' -e 's/\.c$/.o/'` + +# Create the lock directory. +# Note: use `[/.-]' here to ensure that we don't use the same name +# that we are using for the .o file. Also, base the name on the expected +# object file name, since that is what matters with a parallel build. +lockdir=`echo "$cofile" | sed -e 's|[/.-]|_|g'`.d +while true; do + if mkdir "$lockdir" >/dev/null 2>&1; then + break + fi + sleep 1 +done +# FIXME: race condition here if user kills between mkdir and trap. +trap "rmdir '$lockdir'; exit 1" 1 2 15 + +# Run the compile. +"$@" +ret=$? + +if test -f "$cofile"; then + mv "$cofile" "$ofile" +elif test -f "${cofile}bj"; then + mv "${cofile}bj" "$ofile" +fi + +rmdir "$lockdir" +exit $ret + +# Local Variables: +# mode: shell-script +# sh-indentation: 2 +# eval: (add-hook 'write-file-hooks 'time-stamp) +# time-stamp-start: "scriptversion=" +# time-stamp-format: "%:y-%02m-%02d.%02H" +# time-stamp-end: "$" +# End: diff --git a/config.guess b/config.guess new file mode 100755 index 0000000..ee5232a --- /dev/null +++ b/config.guess @@ -0,0 +1,1510 @@ +#! /bin/sh +# Attempt to guess a canonical system name. +# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, +# 2000, 2001, 2002, 2003, 2004, 2005, 2006 Free Software Foundation, +# Inc. + +timestamp='2006-07-02' + +# This file 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. +# +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that program. + + +# Originally written by Per Bothner . +# Please send patches to . Submit a context +# diff and a properly formatted ChangeLog entry. +# +# This script attempts to guess a canonical system name similar to +# config.sub. If it succeeds, it prints the system name on stdout, and +# exits with 0. Otherwise, it exits with 1. +# +# The plan is that this can be called by configure scripts if you +# don't specify an explicit build system type. + +me=`echo "$0" | sed -e 's,.*/,,'` + +usage="\ +Usage: $0 [OPTION] + +Output the configuration name of the system \`$me' is run on. + +Operation modes: + -h, --help print this help, then exit + -t, --time-stamp print date of last modification, then exit + -v, --version print version number, then exit + +Report bugs and patches to ." + +version="\ +GNU config.guess ($timestamp) + +Originally written by Per Bothner. +Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005 +Free Software Foundation, Inc. + +This is free software; see the source for copying conditions. There is NO +warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." + +help=" +Try \`$me --help' for more information." + +# Parse command line +while test $# -gt 0 ; do + case $1 in + --time-stamp | --time* | -t ) + echo "$timestamp" ; exit ;; + --version | -v ) + echo "$version" ; exit ;; + --help | --h* | -h ) + echo "$usage"; exit ;; + -- ) # Stop option processing + shift; break ;; + - ) # Use stdin as input. + break ;; + -* ) + echo "$me: invalid option $1$help" >&2 + exit 1 ;; + * ) + break ;; + esac +done + +if test $# != 0; then + echo "$me: too many arguments$help" >&2 + exit 1 +fi + +trap 'exit 1' 1 2 15 + +# CC_FOR_BUILD -- compiler used by this script. Note that the use of a +# compiler to aid in system detection is discouraged as it requires +# temporary files to be created and, as you can see below, it is a +# headache to deal with in a portable fashion. + +# Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still +# use `HOST_CC' if defined, but it is deprecated. + +# Portable tmp directory creation inspired by the Autoconf team. + +set_cc_for_build=' +trap "exitcode=\$?; (rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null) && exit \$exitcode" 0 ; +trap "rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null; exit 1" 1 2 13 15 ; +: ${TMPDIR=/tmp} ; + { tmp=`(umask 077 && mktemp -d "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } || + { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir $tmp) ; } || + { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir $tmp) && echo "Warning: creating insecure temp directory" >&2 ; } || + { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } ; +dummy=$tmp/dummy ; +tmpfiles="$dummy.c $dummy.o $dummy.rel $dummy" ; +case $CC_FOR_BUILD,$HOST_CC,$CC in + ,,) echo "int x;" > $dummy.c ; + for c in cc gcc c89 c99 ; do + if ($c -c -o $dummy.o $dummy.c) >/dev/null 2>&1 ; then + CC_FOR_BUILD="$c"; break ; + fi ; + done ; + if test x"$CC_FOR_BUILD" = x ; then + CC_FOR_BUILD=no_compiler_found ; + fi + ;; + ,,*) CC_FOR_BUILD=$CC ;; + ,*,*) CC_FOR_BUILD=$HOST_CC ;; +esac ; set_cc_for_build= ;' + +# This is needed to find uname on a Pyramid OSx when run in the BSD universe. +# (ghazi@noc.rutgers.edu 1994-08-24) +if (test -f /.attbin/uname) >/dev/null 2>&1 ; then + PATH=$PATH:/.attbin ; export PATH +fi + +UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown +UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown +UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown +UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown + +case "${UNAME_MACHINE}" in + i?86) + test -z "$VENDOR" && VENDOR=pc + ;; + *) + test -z "$VENDOR" && VENDOR=unknown + ;; +esac +test -f /etc/SuSE-release -o -f /.buildenv && VENDOR=suse + +# Note: order is significant - the case branches are not exclusive. + +case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in + *:NetBSD:*:*) + # NetBSD (nbsd) targets should (where applicable) match one or + # more of the tupples: *-*-netbsdelf*, *-*-netbsdaout*, + # *-*-netbsdecoff* and *-*-netbsd*. For targets that recently + # switched to ELF, *-*-netbsd* would select the old + # object file format. This provides both forward + # compatibility and a consistent mechanism for selecting the + # object file format. + # + # Note: NetBSD doesn't particularly care about the vendor + # portion of the name. We always set it to "unknown". + sysctl="sysctl -n hw.machine_arch" + UNAME_MACHINE_ARCH=`(/sbin/$sysctl 2>/dev/null || \ + /usr/sbin/$sysctl 2>/dev/null || echo unknown)` + case "${UNAME_MACHINE_ARCH}" in + armeb) machine=armeb-unknown ;; + arm*) machine=arm-unknown ;; + sh3el) machine=shl-unknown ;; + sh3eb) machine=sh-unknown ;; + *) machine=${UNAME_MACHINE_ARCH}-unknown ;; + esac + # The Operating System including object format, if it has switched + # to ELF recently, or will in the future. + case "${UNAME_MACHINE_ARCH}" in + arm*|i386|m68k|ns32k|sh3*|sparc|vax) + eval $set_cc_for_build + if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \ + | grep __ELF__ >/dev/null + then + # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout). + # Return netbsd for either. FIX? + os=netbsd + else + os=netbsdelf + fi + ;; + *) + os=netbsd + ;; + esac + # The OS release + # Debian GNU/NetBSD machines have a different userland, and + # thus, need a distinct triplet. However, they do not need + # kernel version information, so it can be replaced with a + # suitable tag, in the style of linux-gnu. + case "${UNAME_VERSION}" in + Debian*) + release='-gnu' + ;; + *) + release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'` + ;; + esac + # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM: + # contains redundant information, the shorter form: + # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used. + echo "${machine}-${os}${release}" + exit ;; + *:OpenBSD:*:*) + UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'` + echo ${UNAME_MACHINE_ARCH}-unknown-openbsd${UNAME_RELEASE} + exit ;; + *:ekkoBSD:*:*) + echo ${UNAME_MACHINE}-unknown-ekkobsd${UNAME_RELEASE} + exit ;; + *:SolidBSD:*:*) + echo ${UNAME_MACHINE}-unknown-solidbsd${UNAME_RELEASE} + exit ;; + macppc:MirBSD:*:*) + echo powerpc-unknown-mirbsd${UNAME_RELEASE} + exit ;; + *:MirBSD:*:*) + echo ${UNAME_MACHINE}-unknown-mirbsd${UNAME_RELEASE} + exit ;; + alpha:OSF1:*:*) + case $UNAME_RELEASE in + *4.0) + UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'` + ;; + *5.*) + UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'` + ;; + esac + # According to Compaq, /usr/sbin/psrinfo has been available on + # OSF/1 and Tru64 systems produced since 1995. I hope that + # covers most systems running today. This code pipes the CPU + # types through head -n 1, so we only detect the type of CPU 0. + ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^ The alpha \(.*\) processor.*$/\1/p' | head -n 1` + case "$ALPHA_CPU_TYPE" in + "EV4 (21064)") + UNAME_MACHINE="alpha" ;; + "EV4.5 (21064)") + UNAME_MACHINE="alpha" ;; + "LCA4 (21066/21068)") + UNAME_MACHINE="alpha" ;; + "EV5 (21164)") + UNAME_MACHINE="alphaev5" ;; + "EV5.6 (21164A)") + UNAME_MACHINE="alphaev56" ;; + "EV5.6 (21164PC)") + UNAME_MACHINE="alphapca56" ;; + "EV5.7 (21164PC)") + UNAME_MACHINE="alphapca57" ;; + "EV6 (21264)") + UNAME_MACHINE="alphaev6" ;; + "EV6.7 (21264A)") + UNAME_MACHINE="alphaev67" ;; + "EV6.8CB (21264C)") + UNAME_MACHINE="alphaev68" ;; + "EV6.8AL (21264B)") + UNAME_MACHINE="alphaev68" ;; + "EV6.8CX (21264D)") + UNAME_MACHINE="alphaev68" ;; + "EV6.9A (21264/EV69A)") + UNAME_MACHINE="alphaev69" ;; + "EV7 (21364)") + UNAME_MACHINE="alphaev7" ;; + "EV7.9 (21364A)") + UNAME_MACHINE="alphaev79" ;; + esac + # A Pn.n version is a patched version. + # A Vn.n version is a released version. + # A Tn.n version is a released field test version. + # A Xn.n version is an unreleased experimental baselevel. + # 1.2 uses "1.2" for uname -r. + echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + exit ;; + Alpha\ *:Windows_NT*:*) + # How do we know it's Interix rather than the generic POSIX subsystem? + # Should we change UNAME_MACHINE based on the output of uname instead + # of the specific Alpha model? + echo alpha-pc-interix + exit ;; + 21064:Windows_NT:50:3) + echo alpha-dec-winnt3.5 + exit ;; + Amiga*:UNIX_System_V:4.0:*) + echo m68k-unknown-sysv4 + exit ;; + *:[Aa]miga[Oo][Ss]:*:*) + echo ${UNAME_MACHINE}-unknown-amigaos + exit ;; + *:[Mm]orph[Oo][Ss]:*:*) + echo ${UNAME_MACHINE}-unknown-morphos + exit ;; + *:OS/390:*:*) + echo i370-ibm-openedition + exit ;; + *:z/VM:*:*) + echo s390-ibm-zvmoe + exit ;; + *:OS400:*:*) + echo powerpc-ibm-os400 + exit ;; + arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*) + echo arm-acorn-riscix${UNAME_RELEASE} + exit ;; + arm:riscos:*:*|arm:RISCOS:*:*) + echo arm-unknown-riscos + exit ;; + SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*) + echo hppa1.1-hitachi-hiuxmpp + exit ;; + Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*) + # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE. + if test "`(/bin/universe) 2>/dev/null`" = att ; then + echo pyramid-pyramid-sysv3 + else + echo pyramid-pyramid-bsd + fi + exit ;; + NILE*:*:*:dcosx) + echo pyramid-pyramid-svr4 + exit ;; + DRS?6000:unix:4.0:6*) + echo sparc-icl-nx6 + exit ;; + DRS?6000:UNIX_SV:4.2*:7* | DRS?6000:isis:4.2*:7*) + case `/usr/bin/uname -p` in + sparc) echo sparc-icl-nx7; exit ;; + esac ;; + sun4H:SunOS:5.*:*) + echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit ;; + sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*) + echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit ;; + i86pc:SunOS:5.*:*) + echo i386-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit ;; + sun4*:SunOS:6*:*) + # According to config.sub, this is the proper way to canonicalize + # SunOS6. Hard to guess exactly what SunOS6 will be like, but + # it's likely to be more like Solaris than SunOS4. + echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit ;; + sun4*:SunOS:*:*) + case "`/usr/bin/arch -k`" in + Series*|S4*) + UNAME_RELEASE=`uname -v` + ;; + esac + # Japanese Language versions have a version number like `4.1.3-JL'. + echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'` + exit ;; + sun3*:SunOS:*:*) + echo m68k-sun-sunos${UNAME_RELEASE} + exit ;; + sun*:*:4.2BSD:*) + UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null` + test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3 + case "`/bin/arch`" in + sun3) + echo m68k-sun-sunos${UNAME_RELEASE} + ;; + sun4) + echo sparc-sun-sunos${UNAME_RELEASE} + ;; + esac + exit ;; + aushp:SunOS:*:*) + echo sparc-auspex-sunos${UNAME_RELEASE} + exit ;; + # The situation for MiNT is a little confusing. The machine name + # can be virtually everything (everything which is not + # "atarist" or "atariste" at least should have a processor + # > m68000). The system name ranges from "MiNT" over "FreeMiNT" + # to the lowercase version "mint" (or "freemint"). Finally + # the system name "TOS" denotes a system which is actually not + # MiNT. But MiNT is downward compatible to TOS, so this should + # be no problem. + atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*) + echo m68k-atari-mint${UNAME_RELEASE} + exit ;; + atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*) + echo m68k-atari-mint${UNAME_RELEASE} + exit ;; + *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*) + echo m68k-atari-mint${UNAME_RELEASE} + exit ;; + milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*) + echo m68k-milan-mint${UNAME_RELEASE} + exit ;; + hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*) + echo m68k-hades-mint${UNAME_RELEASE} + exit ;; + *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*) + echo m68k-unknown-mint${UNAME_RELEASE} + exit ;; + m68k:machten:*:*) + echo m68k-apple-machten${UNAME_RELEASE} + exit ;; + powerpc:machten:*:*) + echo powerpc-apple-machten${UNAME_RELEASE} + exit ;; + RISC*:Mach:*:*) + echo mips-dec-mach_bsd4.3 + exit ;; + RISC*:ULTRIX:*:*) + echo mips-dec-ultrix${UNAME_RELEASE} + exit ;; + VAX*:ULTRIX*:*:*) + echo vax-dec-ultrix${UNAME_RELEASE} + exit ;; + 2020:CLIX:*:* | 2430:CLIX:*:*) + echo clipper-intergraph-clix${UNAME_RELEASE} + exit ;; + mips:*:*:UMIPS | mips:*:*:RISCos) + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c +#ifdef __cplusplus +#include /* for printf() prototype */ + int main (int argc, char *argv[]) { +#else + int main (argc, argv) int argc; char *argv[]; { +#endif + #if defined (host_mips) && defined (MIPSEB) + #if defined (SYSTYPE_SYSV) + printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0); + #endif + #if defined (SYSTYPE_SVR4) + printf ("mips-mips-riscos%ssvr4\n", argv[1]); exit (0); + #endif + #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD) + printf ("mips-mips-riscos%sbsd\n", argv[1]); exit (0); + #endif + #endif + exit (-1); + } +EOF + $CC_FOR_BUILD -o $dummy $dummy.c && + dummyarg=`echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` && + SYSTEM_NAME=`$dummy $dummyarg` && + { echo "$SYSTEM_NAME"; exit; } + echo mips-mips-riscos${UNAME_RELEASE} + exit ;; + Motorola:PowerMAX_OS:*:*) + echo powerpc-motorola-powermax + exit ;; + Motorola:*:4.3:PL8-*) + echo powerpc-harris-powermax + exit ;; + Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*) + echo powerpc-harris-powermax + exit ;; + Night_Hawk:Power_UNIX:*:*) + echo powerpc-harris-powerunix + exit ;; + m88k:CX/UX:7*:*) + echo m88k-harris-cxux7 + exit ;; + m88k:*:4*:R4*) + echo m88k-motorola-sysv4 + exit ;; + m88k:*:3*:R3*) + echo m88k-motorola-sysv3 + exit ;; + AViiON:dgux:*:*) + # DG/UX returns AViiON for all architectures + UNAME_PROCESSOR=`/usr/bin/uname -p` + if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ] + then + if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \ + [ ${TARGET_BINARY_INTERFACE}x = x ] + then + echo m88k-dg-dgux${UNAME_RELEASE} + else + echo m88k-dg-dguxbcs${UNAME_RELEASE} + fi + else + echo i586-dg-dgux${UNAME_RELEASE} + fi + exit ;; + M88*:DolphinOS:*:*) # DolphinOS (SVR3) + echo m88k-dolphin-sysv3 + exit ;; + M88*:*:R3*:*) + # Delta 88k system running SVR3 + echo m88k-motorola-sysv3 + exit ;; + XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3) + echo m88k-tektronix-sysv3 + exit ;; + Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD) + echo m68k-tektronix-bsd + exit ;; + *:IRIX*:*:*) + echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'` + exit ;; + ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX. + echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id + exit ;; # Note that: echo "'`uname -s`'" gives 'AIX ' + i*86:AIX:*:*) + echo i386-ibm-aix + exit ;; + ia64:AIX:*:*) + if [ -x /usr/bin/oslevel ] ; then + IBM_REV=`/usr/bin/oslevel` + else + IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} + fi + echo ${UNAME_MACHINE}-ibm-aix${IBM_REV} + exit ;; + *:AIX:2:3) + if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + #include + + main() + { + if (!__power_pc()) + exit(1); + puts("powerpc-ibm-aix3.2.5"); + exit(0); + } +EOF + if $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` + then + echo "$SYSTEM_NAME" + else + echo rs6000-ibm-aix3.2.5 + fi + elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then + echo rs6000-ibm-aix3.2.4 + else + echo rs6000-ibm-aix3.2 + fi + exit ;; + *:AIX:*:[45]) + IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'` + if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then + IBM_ARCH=rs6000 + else + IBM_ARCH=powerpc + fi + if [ -x /usr/bin/oslevel ] ; then + IBM_REV=`/usr/bin/oslevel` + else + IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} + fi + echo ${IBM_ARCH}-ibm-aix${IBM_REV} + exit ;; + *:AIX:*:*) + echo rs6000-ibm-aix + exit ;; + ibmrt:4.4BSD:*|romp-ibm:BSD:*) + echo romp-ibm-bsd4.4 + exit ;; + ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and + echo romp-ibm-bsd${UNAME_RELEASE} # 4.3 with uname added to + exit ;; # report: romp-ibm BSD 4.3 + *:BOSX:*:*) + echo rs6000-bull-bosx + exit ;; + DPX/2?00:B.O.S.:*:*) + echo m68k-bull-sysv3 + exit ;; + 9000/[34]??:4.3bsd:1.*:*) + echo m68k-hp-bsd + exit ;; + hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*) + echo m68k-hp-bsd4.4 + exit ;; + 9000/[34678]??:HP-UX:*:*) + HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` + case "${UNAME_MACHINE}" in + 9000/31? ) HP_ARCH=m68000 ;; + 9000/[34]?? ) HP_ARCH=m68k ;; + 9000/[678][0-9][0-9]) + if [ -x /usr/bin/getconf ]; then + sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null` + sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null` + case "${sc_cpu_version}" in + 523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0 + 528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1 + 532) # CPU_PA_RISC2_0 + case "${sc_kernel_bits}" in + 32) HP_ARCH="hppa2.0n" ;; + 64) HP_ARCH="hppa2.0w" ;; + '') HP_ARCH="hppa2.0" ;; # HP-UX 10.20 + esac ;; + esac + fi + if [ "${HP_ARCH}" = "" ]; then + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + + #define _HPUX_SOURCE + #include + #include + + int main () + { + #if defined(_SC_KERNEL_BITS) + long bits = sysconf(_SC_KERNEL_BITS); + #endif + long cpu = sysconf (_SC_CPU_VERSION); + + switch (cpu) + { + case CPU_PA_RISC1_0: puts ("hppa1.0"); break; + case CPU_PA_RISC1_1: puts ("hppa1.1"); break; + case CPU_PA_RISC2_0: + #if defined(_SC_KERNEL_BITS) + switch (bits) + { + case 64: puts ("hppa2.0w"); break; + case 32: puts ("hppa2.0n"); break; + default: puts ("hppa2.0"); break; + } break; + #else /* !defined(_SC_KERNEL_BITS) */ + puts ("hppa2.0"); break; + #endif + default: puts ("hppa1.0"); break; + } + exit (0); + } +EOF + (CCOPTS= $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy` + test -z "$HP_ARCH" && HP_ARCH=hppa + fi ;; + esac + if [ ${HP_ARCH} = "hppa2.0w" ] + then + eval $set_cc_for_build + + # hppa2.0w-hp-hpux* has a 64-bit kernel and a compiler generating + # 32-bit code. hppa64-hp-hpux* has the same kernel and a compiler + # generating 64-bit code. GNU and HP use different nomenclature: + # + # $ CC_FOR_BUILD=cc ./config.guess + # => hppa2.0w-hp-hpux11.23 + # $ CC_FOR_BUILD="cc +DA2.0w" ./config.guess + # => hppa64-hp-hpux11.23 + + if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | + grep __LP64__ >/dev/null + then + HP_ARCH="hppa2.0w" + else + HP_ARCH="hppa64" + fi + fi + echo ${HP_ARCH}-hp-hpux${HPUX_REV} + exit ;; + ia64:HP-UX:*:*) + HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` + echo ia64-hp-hpux${HPUX_REV} + exit ;; + 3050*:HI-UX:*:*) + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + #include + int + main () + { + long cpu = sysconf (_SC_CPU_VERSION); + /* The order matters, because CPU_IS_HP_MC68K erroneously returns + true for CPU_PA_RISC1_0. CPU_IS_PA_RISC returns correct + results, however. */ + if (CPU_IS_PA_RISC (cpu)) + { + switch (cpu) + { + case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break; + case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break; + case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break; + default: puts ("hppa-hitachi-hiuxwe2"); break; + } + } + else if (CPU_IS_HP_MC68K (cpu)) + puts ("m68k-hitachi-hiuxwe2"); + else puts ("unknown-hitachi-hiuxwe2"); + exit (0); + } +EOF + $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` && + { echo "$SYSTEM_NAME"; exit; } + echo unknown-hitachi-hiuxwe2 + exit ;; + 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* ) + echo hppa1.1-hp-bsd + exit ;; + 9000/8??:4.3bsd:*:*) + echo hppa1.0-hp-bsd + exit ;; + *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*) + echo hppa1.0-hp-mpeix + exit ;; + hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* ) + echo hppa1.1-hp-osf + exit ;; + hp8??:OSF1:*:*) + echo hppa1.0-hp-osf + exit ;; + i*86:OSF1:*:*) + if [ -x /usr/sbin/sysversion ] ; then + echo ${UNAME_MACHINE}-unknown-osf1mk + else + echo ${UNAME_MACHINE}-unknown-osf1 + fi + exit ;; + parisc*:Lites*:*:*) + echo hppa1.1-hp-lites + exit ;; + C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*) + echo c1-convex-bsd + exit ;; + C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*) + if getsysinfo -f scalar_acc + then echo c32-convex-bsd + else echo c2-convex-bsd + fi + exit ;; + C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*) + echo c34-convex-bsd + exit ;; + C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*) + echo c38-convex-bsd + exit ;; + C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*) + echo c4-convex-bsd + exit ;; + CRAY*Y-MP:*:*:*) + echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit ;; + CRAY*[A-Z]90:*:*:*) + echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \ + | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \ + -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \ + -e 's/\.[^.]*$/.X/' + exit ;; + CRAY*TS:*:*:*) + echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit ;; + CRAY*T3E:*:*:*) + echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit ;; + CRAY*SV1:*:*:*) + echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit ;; + *:UNICOS/mp:*:*) + echo craynv-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit ;; + F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*) + FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` + FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'` + echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" + exit ;; + 5000:UNIX_System_V:4.*:*) + FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` + FUJITSU_REL=`echo ${UNAME_RELEASE} | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/ /_/'` + echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" + exit ;; + i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*) + echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE} + exit ;; + sparc*:BSD/OS:*:*) + echo sparc-unknown-bsdi${UNAME_RELEASE} + exit ;; + *:BSD/OS:*:*) + echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE} + exit ;; + *:FreeBSD:*:*) + case ${UNAME_MACHINE} in + pc98) + echo i386-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; + amd64) + echo x86_64-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; + *) + echo ${UNAME_MACHINE}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; + esac + exit ;; + i*:CYGWIN*:*) + echo ${UNAME_MACHINE}-pc-cygwin + exit ;; + i*:MINGW*:*) + echo ${UNAME_MACHINE}-pc-mingw32 + exit ;; + i*:windows32*:*) + # uname -m includes "-pc" on this system. + echo ${UNAME_MACHINE}-mingw32 + exit ;; + i*:PW*:*) + echo ${UNAME_MACHINE}-pc-pw32 + exit ;; + x86:Interix*:[3456]*) + echo i586-pc-interix${UNAME_RELEASE} + exit ;; + EM64T:Interix*:[3456]*) + echo x86_64-unknown-interix${UNAME_RELEASE} + exit ;; + [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*) + echo i${UNAME_MACHINE}-pc-mks + exit ;; + i*:Windows_NT*:* | Pentium*:Windows_NT*:*) + # How do we know it's Interix rather than the generic POSIX subsystem? + # It also conflicts with pre-2.0 versions of AT&T UWIN. Should we + # UNAME_MACHINE based on the output of uname instead of i386? + echo i586-pc-interix + exit ;; + i*:UWIN*:*) + echo ${UNAME_MACHINE}-pc-uwin + exit ;; + amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*) + echo x86_64-unknown-cygwin + exit ;; + p*:CYGWIN*:*) + echo powerpcle-unknown-cygwin + exit ;; + prep*:SunOS:5.*:*) + echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit ;; + *:GNU:*:*) + # the GNU system + echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'` + exit ;; + *:GNU/*:*:*) + # other systems with GNU libc and userland + echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-gnu + exit ;; + i*86:Minix:*:*) + echo ${UNAME_MACHINE}-pc-minix + exit ;; + arm*:Linux:*:*) + echo ${UNAME_MACHINE}-${VENDOR}-linux-gnu + exit ;; + avr32*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + cris:Linux:*:*) + echo cris-axis-linux-gnu + exit ;; + crisv32:Linux:*:*) + echo crisv32-axis-linux-gnu + exit ;; + frv:Linux:*:*) + echo frv-${VENDOR}-linux-gnu + exit ;; + ia64:Linux:*:*) + echo ${UNAME_MACHINE}-${VENDOR}-linux-gnu + exit ;; + m32r*:Linux:*:*) + echo ${UNAME_MACHINE}-${VENDOR}-linux-gnu + exit ;; + m68*:Linux:*:*) + echo ${UNAME_MACHINE}-${VENDOR}-linux-gnu + exit ;; + mips:Linux:*:*) + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + #undef CPU + #undef mips + #undef mipsel + #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) + CPU=mipsel + #else + #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) + CPU=mips + #else + CPU= + #endif + #endif +EOF + eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n ' + /^CPU/{ + s: ::g + p + }'`" + test x"${CPU}" != x && { echo "${CPU}-${VENDOR}-linux-gnu"; exit; } + ;; + mips64:Linux:*:*) + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + #undef CPU + #undef mips64 + #undef mips64el + #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) + CPU=mips64el + #else + #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) + CPU=mips64 + #else + CPU= + #endif + #endif +EOF + eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n ' + /^CPU/{ + s: ::g + p + }'`" + test x"${CPU}" != x && { echo "${CPU}-${VENDOR}-linux-gnu"; exit; } + ;; + or32:Linux:*:*) + echo or32-${VENDOR}-linux-gnu + exit ;; + ppc:Linux:*:*) + echo powerpc-${VENDOR}-linux-gnu + exit ;; + ppc64:Linux:*:*) + echo powerpc64-${VENDOR}-linux-gnu + exit ;; + alpha:Linux:*:*) + case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in + EV5) UNAME_MACHINE=alphaev5 ;; + EV56) UNAME_MACHINE=alphaev56 ;; + PCA56) UNAME_MACHINE=alphapca56 ;; + PCA57) UNAME_MACHINE=alphapca56 ;; + EV6) UNAME_MACHINE=alphaev6 ;; + EV67) UNAME_MACHINE=alphaev67 ;; + EV68*) UNAME_MACHINE=alphaev68 ;; + esac + objdump --private-headers /bin/sh | grep ld.so.1 >/dev/null + if test "$?" = 0 ; then LIBC="libc1" ; else LIBC="" ; fi + echo ${UNAME_MACHINE}-${VENDOR}-linux-gnu${LIBC} + exit ;; + parisc:Linux:*:* | hppa:Linux:*:*) + # Look for CPU level + case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in + PA7*) echo hppa1.1-${VENDOR}-linux-gnu ;; + PA8*) echo hppa2.0-${VENDOR}-linux-gnu ;; + *) echo hppa-${VENDOR}-linux-gnu ;; + esac + exit ;; + parisc64:Linux:*:* | hppa64:Linux:*:*) + echo hppa64-${VENDOR}-linux-gnu + exit ;; + s390:Linux:*:* | s390x:Linux:*:*) + echo ${UNAME_MACHINE}-ibm-linux + exit ;; + sh64*:Linux:*:*) + echo ${UNAME_MACHINE}-${VENDOR}-linux-gnu + exit ;; + sh*:Linux:*:*) + echo ${UNAME_MACHINE}-${VENDOR}-linux-gnu + exit ;; + sparc:Linux:*:* | sparc64:Linux:*:*) + echo ${UNAME_MACHINE}-${VENDOR}-linux-gnu + exit ;; + vax:Linux:*:*) + echo ${UNAME_MACHINE}-dec-linux-gnu + exit ;; + x86_64:Linux:*:*) + echo x86_64-${VENDOR}-linux-gnu + exit ;; + i*86:Linux:*:*) + # The BFD linker knows what the default object file format is, so + # first see if it will tell us. cd to the root directory to prevent + # problems with other programs or directories called `ld' in the path. + # Set LC_ALL=C to ensure ld outputs messages in English. + ld_supported_targets=`cd /; LC_ALL=C ld --help 2>&1 \ + | sed -ne '/supported targets:/!d + s/[ ][ ]*/ /g + s/.*supported targets: *// + s/ .*// + p'` + case "$ld_supported_targets" in + elf32-i386) + TENTATIVE="${UNAME_MACHINE}-${VENDOR}-linux-gnu" + ;; + a.out-i386-linux) + echo "${UNAME_MACHINE}-${VENDOR}-linux-gnuaout" + exit ;; + coff-i386) + echo "${UNAME_MACHINE}-${VENDOR}-linux-gnucoff" + exit ;; + "") + # Either a pre-BFD a.out linker (linux-gnuoldld) or + # one that does not give us useful --help. + echo "${UNAME_MACHINE}-${VENDOR}-linux-gnuoldld" + exit ;; + esac + # Determine whether the default compiler is a.out or elf + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + #include + #ifdef __ELF__ + # ifdef __GLIBC__ + # if __GLIBC__ >= 2 + LIBC=gnu + # else + LIBC=gnulibc1 + # endif + # else + LIBC=gnulibc1 + # endif + #else + #if defined(__INTEL_COMPILER) || defined(__PGI) || defined(__SUNPRO_C) || defined(__SUNPRO_CC) + LIBC=gnu + #else + LIBC=gnuaout + #endif + #endif + #ifdef __dietlibc__ + LIBC=dietlibc + #endif +EOF + eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n ' + /^LIBC/{ + s: ::g + p + }'`" + test x"${LIBC}" != x && { + echo "${UNAME_MACHINE}-${VENDOR}-linux-${LIBC}" + exit + } + test x"${TENTATIVE}" != x && { echo "${TENTATIVE}"; exit; } + ;; + i*86:DYNIX/ptx:4*:*) + # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there. + # earlier versions are messed up and put the nodename in both + # sysname and nodename. + echo i386-sequent-sysv4 + exit ;; + i*86:UNIX_SV:4.2MP:2.*) + # Unixware is an offshoot of SVR4, but it has its own version + # number series starting with 2... + # I am not positive that other SVR4 systems won't match this, + # I just have to hope. -- rms. + # Use sysv4.2uw... so that sysv4* matches it. + echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION} + exit ;; + i*86:OS/2:*:*) + # If we were able to find `uname', then EMX Unix compatibility + # is probably installed. + echo ${UNAME_MACHINE}-pc-os2-emx + exit ;; + i*86:XTS-300:*:STOP) + echo ${UNAME_MACHINE}-unknown-stop + exit ;; + i*86:atheos:*:*) + echo ${UNAME_MACHINE}-unknown-atheos + exit ;; + i*86:syllable:*:*) + echo ${UNAME_MACHINE}-pc-syllable + exit ;; + i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.0*:*) + echo i386-unknown-lynxos${UNAME_RELEASE} + exit ;; + i*86:*DOS:*:*) + echo ${UNAME_MACHINE}-pc-msdosdjgpp + exit ;; + i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*) + UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'` + if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then + echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL} + else + echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL} + fi + exit ;; + i*86:*:5:[678]*) + # UnixWare 7.x, OpenUNIX and OpenServer 6. + case `/bin/uname -X | grep "^Machine"` in + *486*) UNAME_MACHINE=i486 ;; + *Pentium) UNAME_MACHINE=i586 ;; + *Pent*|*Celeron) UNAME_MACHINE=i686 ;; + esac + echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION} + exit ;; + i*86:*:3.2:*) + if test -f /usr/options/cb.name; then + UNAME_REL=`sed -n 's/.*Version //p' /dev/null >/dev/null ; then + UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')` + (/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486 + (/bin/uname -X|grep '^Machine.*Pentium' >/dev/null) \ + && UNAME_MACHINE=i586 + (/bin/uname -X|grep '^Machine.*Pent *II' >/dev/null) \ + && UNAME_MACHINE=i686 + (/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \ + && UNAME_MACHINE=i686 + echo ${UNAME_MACHINE}-pc-sco$UNAME_REL + else + echo ${UNAME_MACHINE}-pc-sysv32 + fi + exit ;; + pc:*:*:*) + # Left here for compatibility: + # uname -m prints for DJGPP always 'pc', but it prints nothing about + # the processor, so we play safe by assuming i386. + echo i386-pc-msdosdjgpp + exit ;; + Intel:Mach:3*:*) + echo i386-pc-mach3 + exit ;; + paragon:*:*:*) + echo i860-intel-osf1 + exit ;; + i860:*:4.*:*) # i860-SVR4 + if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then + echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4 + else # Add other i860-SVR4 vendors below as they are discovered. + echo i860-unknown-sysv${UNAME_RELEASE} # Unknown i860-SVR4 + fi + exit ;; + mini*:CTIX:SYS*5:*) + # "miniframe" + echo m68010-convergent-sysv + exit ;; + mc68k:UNIX:SYSTEM5:3.51m) + echo m68k-convergent-sysv + exit ;; + M680?0:D-NIX:5.3:*) + echo m68k-diab-dnix + exit ;; + M68*:*:R3V[5678]*:*) + test -r /sysV68 && { echo 'm68k-motorola-sysv'; exit; } ;; + 3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0 | S7501*:*:4.0:3.0) + OS_REL='' + test -r /etc/.relid \ + && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` + /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ + && { echo i486-ncr-sysv4.3${OS_REL}; exit; } + /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ + && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;; + 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*) + /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ + && { echo i486-ncr-sysv4; exit; } ;; + m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*) + echo m68k-unknown-lynxos${UNAME_RELEASE} + exit ;; + mc68030:UNIX_System_V:4.*:*) + echo m68k-atari-sysv4 + exit ;; + TSUNAMI:LynxOS:2.*:*) + echo sparc-unknown-lynxos${UNAME_RELEASE} + exit ;; + rs6000:LynxOS:2.*:*) + echo rs6000-unknown-lynxos${UNAME_RELEASE} + exit ;; + PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.0*:*) + echo powerpc-unknown-lynxos${UNAME_RELEASE} + exit ;; + SM[BE]S:UNIX_SV:*:*) + echo mips-dde-sysv${UNAME_RELEASE} + exit ;; + RM*:ReliantUNIX-*:*:*) + echo mips-sni-sysv4 + exit ;; + RM*:SINIX-*:*:*) + echo mips-sni-sysv4 + exit ;; + *:SINIX-*:*:*) + if uname -p 2>/dev/null >/dev/null ; then + UNAME_MACHINE=`(uname -p) 2>/dev/null` + echo ${UNAME_MACHINE}-sni-sysv4 + else + echo ns32k-sni-sysv + fi + exit ;; + PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort + # says + echo i586-unisys-sysv4 + exit ;; + *:UNIX_System_V:4*:FTX*) + # From Gerald Hewes . + # How about differentiating between stratus architectures? -djm + echo hppa1.1-stratus-sysv4 + exit ;; + *:*:*:FTX*) + # From seanf@swdc.stratus.com. + echo i860-stratus-sysv4 + exit ;; + i*86:VOS:*:*) + # From Paul.Green@stratus.com. + echo ${UNAME_MACHINE}-stratus-vos + exit ;; + *:VOS:*:*) + # From Paul.Green@stratus.com. + echo hppa1.1-stratus-vos + exit ;; + mc68*:A/UX:*:*) + echo m68k-apple-aux${UNAME_RELEASE} + exit ;; + news*:NEWS-OS:6*:*) + echo mips-sony-newsos6 + exit ;; + R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*) + if [ -d /usr/nec ]; then + echo mips-nec-sysv${UNAME_RELEASE} + else + echo mips-unknown-sysv${UNAME_RELEASE} + fi + exit ;; + BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only. + echo powerpc-be-beos + exit ;; + BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only. + echo powerpc-apple-beos + exit ;; + BePC:BeOS:*:*) # BeOS running on Intel PC compatible. + echo i586-pc-beos + exit ;; + SX-4:SUPER-UX:*:*) + echo sx4-nec-superux${UNAME_RELEASE} + exit ;; + SX-5:SUPER-UX:*:*) + echo sx5-nec-superux${UNAME_RELEASE} + exit ;; + SX-6:SUPER-UX:*:*) + echo sx6-nec-superux${UNAME_RELEASE} + exit ;; + Power*:Rhapsody:*:*) + echo powerpc-apple-rhapsody${UNAME_RELEASE} + exit ;; + *:Rhapsody:*:*) + echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE} + exit ;; + *:Darwin:*:*) + UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown + case $UNAME_PROCESSOR in + unknown) UNAME_PROCESSOR=powerpc ;; + esac + echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE} + exit ;; + *:procnto*:*:* | *:QNX:[0123456789]*:*) + UNAME_PROCESSOR=`uname -p` + if test "$UNAME_PROCESSOR" = "x86"; then + UNAME_PROCESSOR=i386 + UNAME_MACHINE=pc + fi + echo ${UNAME_PROCESSOR}-${UNAME_MACHINE}-nto-qnx${UNAME_RELEASE} + exit ;; + *:QNX:*:4*) + echo i386-pc-qnx + exit ;; + NSE-?:NONSTOP_KERNEL:*:*) + echo nse-tandem-nsk${UNAME_RELEASE} + exit ;; + NSR-?:NONSTOP_KERNEL:*:*) + echo nsr-tandem-nsk${UNAME_RELEASE} + exit ;; + *:NonStop-UX:*:*) + echo mips-compaq-nonstopux + exit ;; + BS2000:POSIX*:*:*) + echo bs2000-siemens-sysv + exit ;; + DS/*:UNIX_System_V:*:*) + echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE} + exit ;; + *:Plan9:*:*) + # "uname -m" is not consistent, so use $cputype instead. 386 + # is converted to i386 for consistency with other x86 + # operating systems. + if test "$cputype" = "386"; then + UNAME_MACHINE=i386 + else + UNAME_MACHINE="$cputype" + fi + echo ${UNAME_MACHINE}-unknown-plan9 + exit ;; + *:TOPS-10:*:*) + echo pdp10-unknown-tops10 + exit ;; + *:TENEX:*:*) + echo pdp10-unknown-tenex + exit ;; + KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*) + echo pdp10-dec-tops20 + exit ;; + XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*) + echo pdp10-xkl-tops20 + exit ;; + *:TOPS-20:*:*) + echo pdp10-unknown-tops20 + exit ;; + *:ITS:*:*) + echo pdp10-unknown-its + exit ;; + SEI:*:*:SEIUX) + echo mips-sei-seiux${UNAME_RELEASE} + exit ;; + *:DragonFly:*:*) + echo ${UNAME_MACHINE}-unknown-dragonfly`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` + exit ;; + *:*VMS:*:*) + UNAME_MACHINE=`(uname -p) 2>/dev/null` + case "${UNAME_MACHINE}" in + A*) echo alpha-dec-vms ; exit ;; + I*) echo ia64-dec-vms ; exit ;; + V*) echo vax-dec-vms ; exit ;; + esac ;; + *:XENIX:*:SysV) + echo i386-pc-xenix + exit ;; + i*86:skyos:*:*) + echo ${UNAME_MACHINE}-pc-skyos`echo ${UNAME_RELEASE}` | sed -e 's/ .*$//' + exit ;; + i*86:rdos:*:*) + echo ${UNAME_MACHINE}-pc-rdos + exit ;; +esac + +#echo '(No uname command or uname output not recognized.)' 1>&2 +#echo "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" 1>&2 + +eval $set_cc_for_build +cat >$dummy.c < +# include +#endif +main () +{ +#if defined (sony) +#if defined (MIPSEB) + /* BFD wants "bsd" instead of "newsos". Perhaps BFD should be changed, + I don't know.... */ + printf ("mips-sony-bsd\n"); exit (0); +#else +#include + printf ("m68k-sony-newsos%s\n", +#ifdef NEWSOS4 + "4" +#else + "" +#endif + ); exit (0); +#endif +#endif + +#if defined (__arm) && defined (__acorn) && defined (__unix) + printf ("arm-acorn-riscix\n"); exit (0); +#endif + +#if defined (hp300) && !defined (hpux) + printf ("m68k-hp-bsd\n"); exit (0); +#endif + +#if defined (NeXT) +#if !defined (__ARCHITECTURE__) +#define __ARCHITECTURE__ "m68k" +#endif + int version; + version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`; + if (version < 4) + printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version); + else + printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version); + exit (0); +#endif + +#if defined (MULTIMAX) || defined (n16) +#if defined (UMAXV) + printf ("ns32k-encore-sysv\n"); exit (0); +#else +#if defined (CMU) + printf ("ns32k-encore-mach\n"); exit (0); +#else + printf ("ns32k-encore-bsd\n"); exit (0); +#endif +#endif +#endif + +#if defined (__386BSD__) + printf ("i386-pc-bsd\n"); exit (0); +#endif + +#if defined (sequent) +#if defined (i386) + printf ("i386-sequent-dynix\n"); exit (0); +#endif +#if defined (ns32000) + printf ("ns32k-sequent-dynix\n"); exit (0); +#endif +#endif + +#if defined (_SEQUENT_) + struct utsname un; + + uname(&un); + + if (strncmp(un.version, "V2", 2) == 0) { + printf ("i386-sequent-ptx2\n"); exit (0); + } + if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */ + printf ("i386-sequent-ptx1\n"); exit (0); + } + printf ("i386-sequent-ptx\n"); exit (0); + +#endif + +#if defined (vax) +# if !defined (ultrix) +# include +# if defined (BSD) +# if BSD == 43 + printf ("vax-dec-bsd4.3\n"); exit (0); +# else +# if BSD == 199006 + printf ("vax-dec-bsd4.3reno\n"); exit (0); +# else + printf ("vax-dec-bsd\n"); exit (0); +# endif +# endif +# else + printf ("vax-dec-bsd\n"); exit (0); +# endif +# else + printf ("vax-dec-ultrix\n"); exit (0); +# endif +#endif + +#if defined (alliant) && defined (i860) + printf ("i860-alliant-bsd\n"); exit (0); +#endif + + exit (1); +} +EOF + +$CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null && SYSTEM_NAME=`$dummy` && + { echo "$SYSTEM_NAME"; exit; } + +# Apollos put the system type in the environment. + +test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit; } + +# Convex versions that predate uname can use getsysinfo(1) + +if [ -x /usr/convex/getsysinfo ] +then + case `getsysinfo -f cpu_type` in + c1*) + echo c1-convex-bsd + exit ;; + c2*) + if getsysinfo -f scalar_acc + then echo c32-convex-bsd + else echo c2-convex-bsd + fi + exit ;; + c34*) + echo c34-convex-bsd + exit ;; + c38*) + echo c38-convex-bsd + exit ;; + c4*) + echo c4-convex-bsd + exit ;; + esac +fi + +cat >&2 < in order to provide the needed +information to handle your system. + +config.guess timestamp = $timestamp + +uname -m = `(uname -m) 2>/dev/null || echo unknown` +uname -r = `(uname -r) 2>/dev/null || echo unknown` +uname -s = `(uname -s) 2>/dev/null || echo unknown` +uname -v = `(uname -v) 2>/dev/null || echo unknown` + +/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null` +/bin/uname -X = `(/bin/uname -X) 2>/dev/null` + +hostinfo = `(hostinfo) 2>/dev/null` +/bin/universe = `(/bin/universe) 2>/dev/null` +/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null` +/bin/arch = `(/bin/arch) 2>/dev/null` +/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null` +/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null` + +UNAME_MACHINE = ${UNAME_MACHINE} +UNAME_RELEASE = ${UNAME_RELEASE} +UNAME_SYSTEM = ${UNAME_SYSTEM} +UNAME_VERSION = ${UNAME_VERSION} +EOF + +exit 1 + +# Local variables: +# eval: (add-hook 'write-file-hooks 'time-stamp) +# time-stamp-start: "timestamp='" +# time-stamp-format: "%:y-%02m-%02d" +# time-stamp-end: "'" +# End: diff --git a/config.h.in b/config.h.in new file mode 100644 index 0000000..02b6077 --- /dev/null +++ b/config.h.in @@ -0,0 +1,269 @@ +/* config.h.in. Generated from configure.in by autoheader. */ + +/* Define to 1 if translation of program messages to the user's native + language is requested. */ +#undef ENABLE_NLS + +/* Define to 1 if you have the header file. */ +#undef HAVE_ATTR_XATTR_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_BIOAPI_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_BIOAPI_UTIL_H + +/* Define to 1 if you have the MacOS X function CFLocaleCopyCurrent in the + CoreFoundation framework. */ +#undef HAVE_CFLOCALECOPYCURRENT + +/* Define to 1 if you have the MacOS X function CFPreferencesCopyAppValue in + the CoreFoundation framework. */ +#undef HAVE_CFPREFERENCESCOPYAPPVALUE + +/* Define to 1 if you have the `crypt' function. */ +#undef HAVE_CRYPT + +/* Define to 1 if you have the header file. */ +#undef HAVE_CRYPT_H + +/* Define to 1 if you have the `crypt_r' function. */ +#undef HAVE_CRYPT_R + +/* Define if the GNU dcgettext() function is already present or preinstalled. + */ +#undef HAVE_DCGETTEXT + +/* Define to 1 if you have the header file. */ +#undef HAVE_DIRENT_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_DLFCN_H + +/* Define to 1 if you have the `getdelim' function. */ +#undef HAVE_GETDELIM + +/* Define to 1 if you have the `getline' function. */ +#undef HAVE_GETLINE + +/* Define if the GNU gettext() function is already present or preinstalled. */ +#undef HAVE_GETTEXT + +/* Define to 1 if you have the `getusershell' function. */ +#undef HAVE_GETUSERSHELL + +/* Define to 1 if you have the `gnutls_certificate_verify_peers2' function. */ +#undef HAVE_GNUTLS_CERTIFICATE_VERIFY_PEERS2 + +/* Define to 1 if you have the `gnutls_pk_algorithm_get_name' function. */ +#undef HAVE_GNUTLS_PK_ALGORITHM_GET_NAME + +/* Define if you have the iconv() function. */ +#undef HAVE_ICONV + +/* Define to 1 if you have the header file. */ +#undef HAVE_INTTYPES_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_LBER_H + +/* Define to 1 if you have the `ldapssl_init' function. */ +#undef HAVE_LDAPSSL_INIT + +/* Define to 1 if you have the `ldap_controls_free' function. */ +#undef HAVE_LDAP_CONTROLS_FREE + +/* Define to 1 if you have the `ldap_get_lderrno' function. */ +#undef HAVE_LDAP_GET_LDERRNO + +/* Define to 1 if you have the `ldap_get_option' function. */ +#undef HAVE_LDAP_GET_OPTION + +/* Define to 1 if you have the header file. */ +#undef HAVE_LDAP_H + +/* Define to 1 if you have the `ldap_init' function. */ +#undef HAVE_LDAP_INIT + +/* Define to 1 if you have the `ldap_initialize' function. */ +#undef HAVE_LDAP_INITIALIZE + +/* Define to 1 if you have the `ldap_memfree' function. */ +#undef HAVE_LDAP_MEMFREE + +/* Define to 1 if you have the `ldap_parse_result' function. */ +#undef HAVE_LDAP_PARSE_RESULT + +/* Define to 1 if you have the `ldap_pvt_tls_set_option' function. */ +#undef HAVE_LDAP_PVT_TLS_SET_OPTION + +/* Define to 1 if you have the `ldap_set_option' function. */ +#undef HAVE_LDAP_SET_OPTION + +/* Define to 1 if you have the `ldap_set_rebind_proc' function. */ +#undef HAVE_LDAP_SET_REBIND_PROC + +/* Define to 1 if you have the header file. */ +#undef HAVE_LDAP_SSL_H + +/* Define to 1 if you have the `ldap_start_tls_s' function. */ +#undef HAVE_LDAP_START_TLS_S + +/* Define to 1 if you have the `lgetxattr' function. */ +#undef HAVE_LGETXATTR + +/* "Linux audit Support" */ +#undef HAVE_LIBAUDIT + +/* "LAuS Support" */ +#undef HAVE_LIBLAUS + +/* Define to 1 if you have the header file. */ +#undef HAVE_LIBNSCD_H + +/* Define to 1 if you have the `pthread' library (-lpthread). */ +#undef HAVE_LIBPTHREAD + +/* Define to 1 if you have the `llistxattr' function. */ +#undef HAVE_LLISTXATTR + +/* Define to 1 if you have the `lsetxattr' function. */ +#undef HAVE_LSETXATTR + +/* Define to 1 if you have the header file. */ +#undef HAVE_MEMORY_H + +/* Define to 1 if you have the `nscd_flush_cache' function. */ +#undef HAVE_NSCD_FLUSH_CACHE + +/* Define to 1 if you have the header file. */ +#undef HAVE_SLP_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_STDINT_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_STDLIB_H + +/* Define to 1 if you have the `strftime' function. */ +#undef HAVE_STRFTIME + +/* Define to 1 if you have the header file. */ +#undef HAVE_STRINGS_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_STRING_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_SYS_STAT_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_SYS_TYPES_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_SYS_XATTR_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_UNISTD_H + +/* Define to 1 if you have the `xcrypt_gensalt_r' function. */ +#undef HAVE_XCRYPT_GENSALT_R + +/* Define to 1 if you have the header file. */ +#undef HAVE_XCRYPT_H + +/* Path to ldap.conf file */ +#undef LDAP_PATH_CONF + +/* Path to ldap.secrets file */ +#undef LDAP_PATH_ROOTPASSWD + +/* "Define to the number of arguments to ldap_set_rebindproc" */ +#undef LDAP_SET_REBIND_PROC_ARGS + +/* Define to the sub-directory in which libtool stores uninstalled libraries. + */ +#undef LT_OBJDIR + +/* Define to 1 if your C compiler doesn't accept -c and -o together. */ +#undef NO_MINUS_C_MINUS_O + +/* Name of package */ +#undef PACKAGE + +/* Define to the address where bug reports for this package should be sent. */ +#undef PACKAGE_BUGREPORT + +/* Define to the full name of this package. */ +#undef PACKAGE_NAME + +/* Define to the full name and version of this package. */ +#undef PACKAGE_STRING + +/* Define to the one symbol short name of this package. */ +#undef PACKAGE_TARNAME + +/* Define to the version of this package. */ +#undef PACKAGE_VERSION + +/* Define to 1 if you have the ANSI C header files. */ +#undef STDC_HEADERS + +/* Define UNIX for BioAPI */ +#undef UNIX + +/* Enable GnuTLS support */ +#undef USE_GNUTLS + +/* Enable LDAP support */ +#undef USE_LDAP + +/* Enable SLP support */ +#undef USE_SLP + +/* Enable extensions on AIX 3, Interix. */ +#ifndef _ALL_SOURCE +# undef _ALL_SOURCE +#endif +/* Enable GNU extensions on systems that have them. */ +#ifndef _GNU_SOURCE +# undef _GNU_SOURCE +#endif +/* Enable threading extensions on Solaris. */ +#ifndef _POSIX_PTHREAD_SEMANTICS +# undef _POSIX_PTHREAD_SEMANTICS +#endif +/* Enable extensions on HP NonStop. */ +#ifndef _TANDEM_SOURCE +# undef _TANDEM_SOURCE +#endif +/* Enable general extensions on Solaris. */ +#ifndef __EXTENSIONS__ +# undef __EXTENSIONS__ +#endif + + +/* Version number of package */ +#undef VERSION + +/* Define if using the dmalloc debugging malloc package */ +#undef WITH_DMALLOC + +/* Define if you want to compile in SELinux support */ +#undef WITH_SELINUX + +/* Number of bits in a file offset, on hosts where this is settable. */ +#undef _FILE_OFFSET_BITS + +/* Define for large files, on AIX-style hosts. */ +#undef _LARGE_FILES + +/* Define to 1 if on MINIX. */ +#undef _MINIX + +/* Define to 2 if the system does not provide POSIX.1 features except with + this defined. */ +#undef _POSIX_1_SOURCE + +/* Define to 1 if you need to in order for `stat' and other things to work. */ +#undef _POSIX_SOURCE diff --git a/config.rpath b/config.rpath new file mode 100755 index 0000000..c492a93 --- /dev/null +++ b/config.rpath @@ -0,0 +1,614 @@ +#! /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-2006 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 AC_LIBTOOL_PROG_COMPILER_PIC. + +wl= +if test "$GCC" = yes; then + wl='-Wl,' +else + case "$host_os" in + aix*) + wl='-Wl,' + ;; + darwin*) + case $cc_basename in + xlc*) + wl='-Wl,' + ;; + esac + ;; + mingw* | pw32* | os2*) + ;; + hpux9* | hpux10* | hpux11*) + wl='-Wl,' + ;; + irix5* | irix6* | nonstopux*) + wl='-Wl,' + ;; + newsos6) + ;; + linux*) + case $cc_basename in + icc* | ecc*) + wl='-Wl,' + ;; + pgcc | pgf77 | pgf90) + wl='-Wl,' + ;; + ccc*) + wl='-Wl,' + ;; + como) + wl='-lopt=' + ;; + *) + case `$CC -V 2>&1 | sed 5q` in + *Sun\ C*) + wl='-Wl,' + ;; + esac + ;; + esac + ;; + osf3* | osf4* | osf5*) + wl='-Wl,' + ;; + sco3.2v5*) + ;; + solaris*) + wl='-Wl,' + ;; + sunos4*) + wl='-Qoption ld ' + ;; + sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) + wl='-Wl,' + ;; + sysv4*MP*) + ;; + unicos*) + wl='-Wl,' + ;; + uts4*) + ;; + esac +fi + +# Code taken from libtool.m4's AC_LIBTOOL_PROG_LD_SHLIBS. + +hardcode_libdir_flag_spec= +hardcode_libdir_separator= +hardcode_direct=no +hardcode_minus_L=no + +case "$host_os" in + cygwin* | mingw* | pw32*) + # 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 + aix3* | aix4* | aix5*) + # On AIX/PPC, the GNU linker is very broken + if test "$host_cpu" != ia64; then + ld_shlibs=no + fi + ;; + amigaos*) + hardcode_libdir_flag_spec='-L$libdir' + hardcode_minus_L=yes + # Samuel A. Falvo II reports + # that the semantics of dynamic libraries on AmigaOS, at least up + # to version 4, is to share data among multiple programs linked + # with the same dynamic library. Since this doesn't match the + # behavior of shared libraries on other platforms, we cannot use + # them. + ld_shlibs=no + ;; + beos*) + if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then + : + else + ld_shlibs=no + fi + ;; + cygwin* | mingw* | pw32*) + # 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 + ;; + interix3*) + hardcode_direct=no + hardcode_libdir_flag_spec='${wl}-rpath,$libdir' + ;; + linux*) + 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 + ;; + aix4* | aix5*) + 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].*|aix5*) + 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 + hardcode_direct=yes + 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*) + hardcode_libdir_flag_spec='-L$libdir' + hardcode_minus_L=yes + # see comment about different semantics on the GNU ld section + ld_shlibs=no + ;; + bsdi[45]*) + ;; + cygwin* | mingw* | pw32*) + # 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 test "$GCC" = yes ; then + : + else + case $cc_basename in + xlc*) + ;; + *) + ld_shlibs=no + ;; + esac + fi + ;; + dgux*) + hardcode_libdir_flag_spec='-L$libdir' + ;; + freebsd1*) + ld_shlibs=no + ;; + freebsd2.2*) + hardcode_libdir_flag_spec='-R$libdir' + hardcode_direct=yes + ;; + freebsd2*) + hardcode_direct=yes + hardcode_minus_L=yes + ;; + freebsd* | kfreebsd*-gnu | 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=: + ;; + openbsd*) + 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 + ;; + 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*) + ;; + 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 AC_LIBTOOL_SYS_DYNAMIC_LINKER. +libname_spec='lib$name' +case "$host_os" in + aix3*) + ;; + aix4* | aix5*) + ;; + amigaos*) + ;; + beos*) + ;; + bsdi[45]*) + ;; + cygwin* | mingw* | pw32*) + shrext=.dll + ;; + darwin* | rhapsody*) + shrext=.dylib + ;; + dgux*) + ;; + freebsd1*) + ;; + kfreebsd*-gnu) + ;; + freebsd* | dragonfly*) + ;; + gnu*) + ;; + hpux9* | hpux10* | hpux11*) + case $host_cpu in + ia64*) + shrext=.so + ;; + hppa*64*) + shrext=.sl + ;; + *) + shrext=.sl + ;; + esac + ;; + interix3*) + ;; + irix5* | irix6* | nonstopux*) + 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*) + ;; + knetbsd*-gnu) + ;; + netbsd*) + ;; + newsos6) + ;; + nto-qnx*) + ;; + openbsd*) + ;; + os2*) + libname_spec='$name' + shrext=.dll + ;; + osf3* | osf4* | osf5*) + ;; + solaris*) + ;; + sunos4*) + ;; + sysv4 | sysv4.3*) + ;; + sysv4*MP*) + ;; + sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) + ;; + uts4*) + ;; +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_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=/' <. Submit a context +# diff and a properly formatted ChangeLog entry. +# +# Configuration subroutine to validate and canonicalize a configuration type. +# Supply the specified configuration type as an argument. +# If it is invalid, we print an error message on stderr and exit with code 1. +# Otherwise, we print the canonical config type on stdout and succeed. + +# This file is supposed to be the same for all GNU packages +# and recognize all the CPU types, system types and aliases +# that are meaningful with *any* GNU software. +# Each package is responsible for reporting which valid configurations +# it does not support. The user should be able to distinguish +# a failure to support a valid configuration from a meaningless +# configuration. + +# The goal of this file is to map all the various variations of a given +# machine specification into a single specification in the form: +# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM +# or in some cases, the newer four-part form: +# CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM +# It is wrong to echo any other type of specification. + +me=`echo "$0" | sed -e 's,.*/,,'` + +usage="\ +Usage: $0 [OPTION] CPU-MFR-OPSYS + $0 [OPTION] ALIAS + +Canonicalize a configuration name. + +Operation modes: + -h, --help print this help, then exit + -t, --time-stamp print date of last modification, then exit + -v, --version print version number, then exit + +Report bugs and patches to ." + +version="\ +GNU config.sub ($timestamp) + +Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005 +Free Software Foundation, Inc. + +This is free software; see the source for copying conditions. There is NO +warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." + +help=" +Try \`$me --help' for more information." + +# Parse command line +while test $# -gt 0 ; do + case $1 in + --time-stamp | --time* | -t ) + echo "$timestamp" ; exit ;; + --version | -v ) + echo "$version" ; exit ;; + --help | --h* | -h ) + echo "$usage"; exit ;; + -- ) # Stop option processing + shift; break ;; + - ) # Use stdin as input. + break ;; + -* ) + echo "$me: invalid option $1$help" + exit 1 ;; + + *local*) + # First pass through any local machine types. + echo $1 + exit ;; + + * ) + break ;; + esac +done + +case $# in + 0) echo "$me: missing argument$help" >&2 + exit 1;; + 1) ;; + *) echo "$me: too many arguments$help" >&2 + exit 1;; +esac + +# Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any). +# Here we must recognize all the valid KERNEL-OS combinations. +maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'` +case $maybe_os in + nto-qnx* | linux-gnu* | linux-dietlibc | linux-newlib* | linux-uclibc* | \ + uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | knetbsd*-gnu* | netbsd*-gnu* | \ + storm-chaos* | os2-emx* | rtmk-nova*) + os=-$maybe_os + basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'` + ;; + *) + basic_machine=`echo $1 | sed 's/-[^-]*$//'` + if [ $basic_machine != $1 ] + then os=`echo $1 | sed 's/.*-/-/'` + else os=; fi + ;; +esac + +### Let's recognize common machines as not being operating systems so +### that things like config.sub decstation-3100 work. We also +### recognize some manufacturers as not being operating systems, so we +### can provide default operating systems below. +case $os in + -sun*os*) + # Prevent following clause from handling this invalid input. + ;; + -dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \ + -att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \ + -unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \ + -convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\ + -c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \ + -harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \ + -apple | -axis | -knuth | -cray) + os= + basic_machine=$1 + ;; + -sim | -cisco | -oki | -wec | -winbond) + os= + basic_machine=$1 + ;; + -scout) + ;; + -wrs) + os=-vxworks + basic_machine=$1 + ;; + -chorusos*) + os=-chorusos + basic_machine=$1 + ;; + -chorusrdb) + os=-chorusrdb + basic_machine=$1 + ;; + -hiux*) + os=-hiuxwe2 + ;; + -sco6) + os=-sco5v6 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco5) + os=-sco3.2v5 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco4) + os=-sco3.2v4 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco3.2.[4-9]*) + os=`echo $os | sed -e 's/sco3.2./sco3.2v/'` + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco3.2v[4-9]*) + # Don't forget version if it is 3.2v4 or newer. + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco5v6*) + # Don't forget version if it is 3.2v4 or newer. + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco*) + os=-sco3.2v2 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -udk*) + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -isc) + os=-isc2.2 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -clix*) + basic_machine=clipper-intergraph + ;; + -isc*) + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -lynx*) + os=-lynxos + ;; + -ptx*) + basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'` + ;; + -windowsnt*) + os=`echo $os | sed -e 's/windowsnt/winnt/'` + ;; + -psos*) + os=-psos + ;; + -mint | -mint[0-9]*) + basic_machine=m68k-atari + os=-mint + ;; +esac + +# Decode aliases for certain CPU-COMPANY combinations. +case $basic_machine in + # Recognize the basic CPU types without company name. + # Some are omitted here because they have special meanings below. + 1750a | 580 \ + | a29k \ + | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \ + | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \ + | am33_2.0 \ + | arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr | avr32 \ + | bfin \ + | c4x | clipper \ + | d10v | d30v | dlx | dsp16xx \ + | fr30 | frv \ + | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \ + | i370 | i860 | i960 | ia64 \ + | ip2k | iq2000 \ + | m32c | m32r | m32rle | m68000 | m68k | m88k \ + | maxq | mb | microblaze | mcore \ + | mips | mipsbe | mipseb | mipsel | mipsle \ + | mips16 \ + | mips64 | mips64el \ + | mips64vr | mips64vrel \ + | mips64orion | mips64orionel \ + | mips64vr4100 | mips64vr4100el \ + | mips64vr4300 | mips64vr4300el \ + | mips64vr5000 | mips64vr5000el \ + | mips64vr5900 | mips64vr5900el \ + | mipsisa32 | mipsisa32el \ + | mipsisa32r2 | mipsisa32r2el \ + | mipsisa64 | mipsisa64el \ + | mipsisa64r2 | mipsisa64r2el \ + | mipsisa64sb1 | mipsisa64sb1el \ + | mipsisa64sr71k | mipsisa64sr71kel \ + | mipstx39 | mipstx39el \ + | mn10200 | mn10300 \ + | mt \ + | msp430 \ + | nios | nios2 \ + | ns16k | ns32k \ + | or32 \ + | pdp10 | pdp11 | pj | pjl \ + | powerpc | powerpc64 | powerpc64le | powerpcle | ppcbe \ + | pyramid \ + | score \ + | sh | sh[1234] | sh[24]a | sh[23]e | sh[34]eb | sheb | shbe | shle | sh[1234]le | sh3ele \ + | sh64 | sh64le \ + | sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet | sparclite \ + | sparcv8 | sparcv9 | sparcv9b | sparcv9v \ + | spu | strongarm \ + | tahoe | thumb | tic4x | tic80 | tron \ + | v850 | v850e \ + | we32k \ + | x86 | xc16x | xscale | xscalee[bl] | xstormy16 | xtensa \ + | z8k) + basic_machine=$basic_machine-unknown + ;; + m6811 | m68hc11 | m6812 | m68hc12) + # Motorola 68HC11/12. + basic_machine=$basic_machine-unknown + os=-none + ;; + m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k) + ;; + ms1) + basic_machine=mt-unknown + ;; + + # We use `pc' rather than `unknown' + # because (1) that's what they normally are, and + # (2) the word "unknown" tends to confuse beginning users. + i*86 | x86_64) + basic_machine=$basic_machine-pc + ;; + # Object if more than one company name word. + *-*-*) + echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 + exit 1 + ;; + # Recognize the basic CPU types with company name. + 580-* \ + | a29k-* \ + | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \ + | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \ + | alphapca5[67]-* | alpha64pca5[67]-* | arc-* \ + | arm-* | armbe-* | armle-* | armeb-* | armv*-* \ + | avr-* | avr32-* \ + | bfin-* | bs2000-* \ + | c[123]* | c30-* | [cjt]90-* | c4x-* | c54x-* | c55x-* | c6x-* \ + | clipper-* | craynv-* | cydra-* \ + | d10v-* | d30v-* | dlx-* \ + | elxsi-* \ + | f30[01]-* | f700-* | fr30-* | frv-* | fx80-* \ + | h8300-* | h8500-* \ + | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \ + | i*86-* | i860-* | i960-* | ia64-* \ + | ip2k-* | iq2000-* \ + | m32c-* | m32r-* | m32rle-* \ + | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \ + | m88110-* | m88k-* | maxq-* | mcore-* \ + | mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \ + | mips16-* \ + | mips64-* | mips64el-* \ + | mips64vr-* | mips64vrel-* \ + | mips64orion-* | mips64orionel-* \ + | mips64vr4100-* | mips64vr4100el-* \ + | mips64vr4300-* | mips64vr4300el-* \ + | mips64vr5000-* | mips64vr5000el-* \ + | mips64vr5900-* | mips64vr5900el-* \ + | mipsisa32-* | mipsisa32el-* \ + | mipsisa32r2-* | mipsisa32r2el-* \ + | mipsisa64-* | mipsisa64el-* \ + | mipsisa64r2-* | mipsisa64r2el-* \ + | mipsisa64sb1-* | mipsisa64sb1el-* \ + | mipsisa64sr71k-* | mipsisa64sr71kel-* \ + | mipstx39-* | mipstx39el-* \ + | mmix-* \ + | mt-* \ + | msp430-* \ + | nios-* | nios2-* \ + | none-* | np1-* | ns16k-* | ns32k-* \ + | orion-* \ + | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \ + | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* | ppcbe-* \ + | pyramid-* \ + | romp-* | rs6000-* \ + | sh-* | sh[1234]-* | sh[24]a-* | sh[23]e-* | sh[34]eb-* | sheb-* | shbe-* \ + | shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \ + | sparc-* | sparc64-* | sparc64b-* | sparc64v-* | sparc86x-* | sparclet-* \ + | sparclite-* \ + | sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | strongarm-* | sv1-* | sx?-* \ + | tahoe-* | thumb-* \ + | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \ + | tron-* \ + | v850-* | v850e-* | vax-* \ + | we32k-* \ + | x86-* | x86_64-* | xc16x-* | xps100-* | xscale-* | xscalee[bl]-* \ + | xstormy16-* | xtensa-* \ + | ymp-* \ + | z8k-*) + ;; + # Recognize the various machine names and aliases which stand + # for a CPU type and a company and sometimes even an OS. + 386bsd) + basic_machine=i386-unknown + os=-bsd + ;; + 3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc) + basic_machine=m68000-att + ;; + 3b*) + basic_machine=we32k-att + ;; + a29khif) + basic_machine=a29k-amd + os=-udi + ;; + abacus) + basic_machine=abacus-unknown + ;; + adobe68k) + basic_machine=m68010-adobe + os=-scout + ;; + alliant | fx80) + basic_machine=fx80-alliant + ;; + altos | altos3068) + basic_machine=m68k-altos + ;; + am29k) + basic_machine=a29k-none + os=-bsd + ;; + amd64) + basic_machine=x86_64-pc + ;; + amd64-*) + basic_machine=x86_64-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + amdahl) + basic_machine=580-amdahl + os=-sysv + ;; + amiga | amiga-*) + basic_machine=m68k-unknown + ;; + amigaos | amigados) + basic_machine=m68k-unknown + os=-amigaos + ;; + amigaunix | amix) + basic_machine=m68k-unknown + os=-sysv4 + ;; + apollo68) + basic_machine=m68k-apollo + os=-sysv + ;; + apollo68bsd) + basic_machine=m68k-apollo + os=-bsd + ;; + aux) + basic_machine=m68k-apple + os=-aux + ;; + balance) + basic_machine=ns32k-sequent + os=-dynix + ;; + c90) + basic_machine=c90-cray + os=-unicos + ;; + convex-c1) + basic_machine=c1-convex + os=-bsd + ;; + convex-c2) + basic_machine=c2-convex + os=-bsd + ;; + convex-c32) + basic_machine=c32-convex + os=-bsd + ;; + convex-c34) + basic_machine=c34-convex + os=-bsd + ;; + convex-c38) + basic_machine=c38-convex + os=-bsd + ;; + cray | j90) + basic_machine=j90-cray + os=-unicos + ;; + craynv) + basic_machine=craynv-cray + os=-unicosmp + ;; + cr16c) + basic_machine=cr16c-unknown + os=-elf + ;; + crds | unos) + basic_machine=m68k-crds + ;; + crisv32 | crisv32-* | etraxfs*) + basic_machine=crisv32-axis + ;; + cris | cris-* | etrax*) + basic_machine=cris-axis + ;; + crx) + basic_machine=crx-unknown + os=-elf + ;; + da30 | da30-*) + basic_machine=m68k-da30 + ;; + decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn) + basic_machine=mips-dec + ;; + decsystem10* | dec10*) + basic_machine=pdp10-dec + os=-tops10 + ;; + decsystem20* | dec20*) + basic_machine=pdp10-dec + os=-tops20 + ;; + delta | 3300 | motorola-3300 | motorola-delta \ + | 3300-motorola | delta-motorola) + basic_machine=m68k-motorola + ;; + delta88) + basic_machine=m88k-motorola + os=-sysv3 + ;; + djgpp) + basic_machine=i586-pc + os=-msdosdjgpp + ;; + dpx20 | dpx20-*) + basic_machine=rs6000-bull + os=-bosx + ;; + dpx2* | dpx2*-bull) + basic_machine=m68k-bull + os=-sysv3 + ;; + ebmon29k) + basic_machine=a29k-amd + os=-ebmon + ;; + elxsi) + basic_machine=elxsi-elxsi + os=-bsd + ;; + encore | umax | mmax) + basic_machine=ns32k-encore + ;; + es1800 | OSE68k | ose68k | ose | OSE) + basic_machine=m68k-ericsson + os=-ose + ;; + fx2800) + basic_machine=i860-alliant + ;; + genix) + basic_machine=ns32k-ns + ;; + gmicro) + basic_machine=tron-gmicro + os=-sysv + ;; + go32) + basic_machine=i386-pc + os=-go32 + ;; + h3050r* | hiux*) + basic_machine=hppa1.1-hitachi + os=-hiuxwe2 + ;; + h8300hms) + basic_machine=h8300-hitachi + os=-hms + ;; + h8300xray) + basic_machine=h8300-hitachi + os=-xray + ;; + h8500hms) + basic_machine=h8500-hitachi + os=-hms + ;; + harris) + basic_machine=m88k-harris + os=-sysv3 + ;; + hp300-*) + basic_machine=m68k-hp + ;; + hp300bsd) + basic_machine=m68k-hp + os=-bsd + ;; + hp300hpux) + basic_machine=m68k-hp + os=-hpux + ;; + hp3k9[0-9][0-9] | hp9[0-9][0-9]) + basic_machine=hppa1.0-hp + ;; + hp9k2[0-9][0-9] | hp9k31[0-9]) + basic_machine=m68000-hp + ;; + hp9k3[2-9][0-9]) + basic_machine=m68k-hp + ;; + hp9k6[0-9][0-9] | hp6[0-9][0-9]) + basic_machine=hppa1.0-hp + ;; + hp9k7[0-79][0-9] | hp7[0-79][0-9]) + basic_machine=hppa1.1-hp + ;; + hp9k78[0-9] | hp78[0-9]) + # FIXME: really hppa2.0-hp + basic_machine=hppa1.1-hp + ;; + hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893) + # FIXME: really hppa2.0-hp + basic_machine=hppa1.1-hp + ;; + hp9k8[0-9][13679] | hp8[0-9][13679]) + basic_machine=hppa1.1-hp + ;; + hp9k8[0-9][0-9] | hp8[0-9][0-9]) + basic_machine=hppa1.0-hp + ;; + hppa-next) + os=-nextstep3 + ;; + hppaosf) + basic_machine=hppa1.1-hp + os=-osf + ;; + hppro) + basic_machine=hppa1.1-hp + os=-proelf + ;; + i370-ibm* | ibm*) + basic_machine=i370-ibm + ;; +# I'm not sure what "Sysv32" means. Should this be sysv3.2? + i*86v32) + basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` + os=-sysv32 + ;; + i*86v4*) + basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` + os=-sysv4 + ;; + i*86v) + basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` + os=-sysv + ;; + i*86sol2) + basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` + os=-solaris2 + ;; + i386mach) + basic_machine=i386-mach + os=-mach + ;; + i386-vsta | vsta) + basic_machine=i386-unknown + os=-vsta + ;; + iris | iris4d) + basic_machine=mips-sgi + case $os in + -irix*) + ;; + *) + os=-irix4 + ;; + esac + ;; + isi68 | isi) + basic_machine=m68k-isi + os=-sysv + ;; + m88k-omron*) + basic_machine=m88k-omron + ;; + magnum | m3230) + basic_machine=mips-mips + os=-sysv + ;; + merlin) + basic_machine=ns32k-utek + os=-sysv + ;; + mingw32) + basic_machine=i386-pc + os=-mingw32 + ;; + miniframe) + basic_machine=m68000-convergent + ;; + *mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*) + basic_machine=m68k-atari + os=-mint + ;; + mips3*-*) + basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'` + ;; + mips3*) + basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown + ;; + monitor) + basic_machine=m68k-rom68k + os=-coff + ;; + morphos) + basic_machine=powerpc-unknown + os=-morphos + ;; + msdos) + basic_machine=i386-pc + os=-msdos + ;; + ms1-*) + basic_machine=`echo $basic_machine | sed -e 's/ms1-/mt-/'` + ;; + mvs) + basic_machine=i370-ibm + os=-mvs + ;; + ncr3000) + basic_machine=i486-ncr + os=-sysv4 + ;; + netbsd386) + basic_machine=i386-unknown + os=-netbsd + ;; + netwinder) + basic_machine=armv4l-rebel + os=-linux + ;; + news | news700 | news800 | news900) + basic_machine=m68k-sony + os=-newsos + ;; + news1000) + basic_machine=m68030-sony + os=-newsos + ;; + news-3600 | risc-news) + basic_machine=mips-sony + os=-newsos + ;; + necv70) + basic_machine=v70-nec + os=-sysv + ;; + next | m*-next ) + basic_machine=m68k-next + case $os in + -nextstep* ) + ;; + -ns2*) + os=-nextstep2 + ;; + *) + os=-nextstep3 + ;; + esac + ;; + nh3000) + basic_machine=m68k-harris + os=-cxux + ;; + nh[45]000) + basic_machine=m88k-harris + os=-cxux + ;; + nindy960) + basic_machine=i960-intel + os=-nindy + ;; + mon960) + basic_machine=i960-intel + os=-mon960 + ;; + nonstopux) + basic_machine=mips-compaq + os=-nonstopux + ;; + np1) + basic_machine=np1-gould + ;; + nsr-tandem) + basic_machine=nsr-tandem + ;; + op50n-* | op60c-*) + basic_machine=hppa1.1-oki + os=-proelf + ;; + openrisc | openrisc-*) + basic_machine=or32-unknown + ;; + os400) + basic_machine=powerpc-ibm + os=-os400 + ;; + OSE68000 | ose68000) + basic_machine=m68000-ericsson + os=-ose + ;; + os68k) + basic_machine=m68k-none + os=-os68k + ;; + pa-hitachi) + basic_machine=hppa1.1-hitachi + os=-hiuxwe2 + ;; + paragon) + basic_machine=i860-intel + os=-osf + ;; + pbd) + basic_machine=sparc-tti + ;; + pbb) + basic_machine=m68k-tti + ;; + pc532 | pc532-*) + basic_machine=ns32k-pc532 + ;; + pc98) + basic_machine=i386-pc + ;; + pc98-*) + basic_machine=i386-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + pentium | p5 | k5 | k6 | nexgen | viac3) + basic_machine=i586-pc + ;; + pentiumpro | p6 | 6x86 | athlon | athlon_*) + basic_machine=i686-pc + ;; + pentiumii | pentium2 | pentiumiii | pentium3) + basic_machine=i686-pc + ;; + pentium4) + basic_machine=i786-pc + ;; + pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*) + basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + pentiumpro-* | p6-* | 6x86-* | athlon-*) + basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*) + basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + pentium4-*) + basic_machine=i786-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + pn) + basic_machine=pn-gould + ;; + power) basic_machine=power-ibm + ;; + ppc) basic_machine=powerpc-unknown + ;; + ppc-*) basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + ppcle | powerpclittle | ppc-le | powerpc-little) + basic_machine=powerpcle-unknown + ;; + ppcle-* | powerpclittle-*) + basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + ppc64) basic_machine=powerpc64-unknown + ;; + ppc64-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + ppc64le | powerpc64little | ppc64-le | powerpc64-little) + basic_machine=powerpc64le-unknown + ;; + ppc64le-* | powerpc64little-*) + basic_machine=powerpc64le-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + ps2) + basic_machine=i386-ibm + ;; + pw32) + basic_machine=i586-unknown + os=-pw32 + ;; + rdos) + basic_machine=i386-pc + os=-rdos + ;; + rom68k) + basic_machine=m68k-rom68k + os=-coff + ;; + rm[46]00) + basic_machine=mips-siemens + ;; + rtpc | rtpc-*) + basic_machine=romp-ibm + ;; + s390 | s390-*) + basic_machine=s390-ibm + ;; + s390x | s390x-*) + basic_machine=s390x-ibm + ;; + sa29200) + basic_machine=a29k-amd + os=-udi + ;; + sb1) + basic_machine=mipsisa64sb1-unknown + ;; + sb1el) + basic_machine=mipsisa64sb1el-unknown + ;; + sde) + basic_machine=mipsisa32-sde + os=-elf + ;; + sei) + basic_machine=mips-sei + os=-seiux + ;; + sequent) + basic_machine=i386-sequent + ;; + sh) + basic_machine=sh-hitachi + os=-hms + ;; + sh64) + basic_machine=sh64-unknown + ;; + sparclite-wrs | simso-wrs) + basic_machine=sparclite-wrs + os=-vxworks + ;; + sps7) + basic_machine=m68k-bull + os=-sysv2 + ;; + spur) + basic_machine=spur-unknown + ;; + st2000) + basic_machine=m68k-tandem + ;; + stratus) + basic_machine=i860-stratus + os=-sysv4 + ;; + sun2) + basic_machine=m68000-sun + ;; + sun2os3) + basic_machine=m68000-sun + os=-sunos3 + ;; + sun2os4) + basic_machine=m68000-sun + os=-sunos4 + ;; + sun3os3) + basic_machine=m68k-sun + os=-sunos3 + ;; + sun3os4) + basic_machine=m68k-sun + os=-sunos4 + ;; + sun4os3) + basic_machine=sparc-sun + os=-sunos3 + ;; + sun4os4) + basic_machine=sparc-sun + os=-sunos4 + ;; + sun4sol2) + basic_machine=sparc-sun + os=-solaris2 + ;; + sun3 | sun3-*) + basic_machine=m68k-sun + ;; + sun4) + basic_machine=sparc-sun + ;; + sun386 | sun386i | roadrunner) + basic_machine=i386-sun + ;; + sv1) + basic_machine=sv1-cray + os=-unicos + ;; + symmetry) + basic_machine=i386-sequent + os=-dynix + ;; + t3e) + basic_machine=alphaev5-cray + os=-unicos + ;; + t90) + basic_machine=t90-cray + os=-unicos + ;; + tic54x | c54x*) + basic_machine=tic54x-unknown + os=-coff + ;; + tic55x | c55x*) + basic_machine=tic55x-unknown + os=-coff + ;; + tic6x | c6x*) + basic_machine=tic6x-unknown + os=-coff + ;; + tx39) + basic_machine=mipstx39-unknown + ;; + tx39el) + basic_machine=mipstx39el-unknown + ;; + toad1) + basic_machine=pdp10-xkl + os=-tops20 + ;; + tower | tower-32) + basic_machine=m68k-ncr + ;; + tpf) + basic_machine=s390x-ibm + os=-tpf + ;; + udi29k) + basic_machine=a29k-amd + os=-udi + ;; + ultra3) + basic_machine=a29k-nyu + os=-sym1 + ;; + v810 | necv810) + basic_machine=v810-nec + os=-none + ;; + vaxv) + basic_machine=vax-dec + os=-sysv + ;; + vms) + basic_machine=vax-dec + os=-vms + ;; + vpp*|vx|vx-*) + basic_machine=f301-fujitsu + ;; + vxworks960) + basic_machine=i960-wrs + os=-vxworks + ;; + vxworks68) + basic_machine=m68k-wrs + os=-vxworks + ;; + vxworks29k) + basic_machine=a29k-wrs + os=-vxworks + ;; + w65*) + basic_machine=w65-wdc + os=-none + ;; + w89k-*) + basic_machine=hppa1.1-winbond + os=-proelf + ;; + xbox) + basic_machine=i686-pc + os=-mingw32 + ;; + xps | xps100) + basic_machine=xps100-honeywell + ;; + ymp) + basic_machine=ymp-cray + os=-unicos + ;; + z8k-*-coff) + basic_machine=z8k-unknown + os=-sim + ;; + none) + basic_machine=none-none + os=-none + ;; + +# Here we handle the default manufacturer of certain CPU types. It is in +# some cases the only manufacturer, in others, it is the most popular. + w89k) + basic_machine=hppa1.1-winbond + ;; + op50n) + basic_machine=hppa1.1-oki + ;; + op60c) + basic_machine=hppa1.1-oki + ;; + romp) + basic_machine=romp-ibm + ;; + mmix) + basic_machine=mmix-knuth + ;; + rs6000) + basic_machine=rs6000-ibm + ;; + vax) + basic_machine=vax-dec + ;; + pdp10) + # there are many clones, so DEC is not a safe bet + basic_machine=pdp10-unknown + ;; + pdp11) + basic_machine=pdp11-dec + ;; + we32k) + basic_machine=we32k-att + ;; + sh[1234] | sh[24]a | sh[34]eb | sh[1234]le | sh[23]ele) + basic_machine=sh-unknown + ;; + sparc | sparcv8 | sparcv9 | sparcv9b | sparcv9v) + basic_machine=sparc-sun + ;; + cydra) + basic_machine=cydra-cydrome + ;; + orion) + basic_machine=orion-highlevel + ;; + orion105) + basic_machine=clipper-highlevel + ;; + mac | mpw | mac-mpw) + basic_machine=m68k-apple + ;; + pmac | pmac-mpw) + basic_machine=powerpc-apple + ;; + *-unknown) + # Make sure to match an already-canonicalized machine name. + ;; + *) + echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 + exit 1 + ;; +esac + +# Here we canonicalize certain aliases for manufacturers. +case $basic_machine in + *-digital*) + basic_machine=`echo $basic_machine | sed 's/digital.*/dec/'` + ;; + *-commodore*) + basic_machine=`echo $basic_machine | sed 's/commodore.*/cbm/'` + ;; + *) + ;; +esac + +# Decode manufacturer-specific aliases for certain operating systems. + +if [ x"$os" != x"" ] +then +case $os in + # First match some system type aliases + # that might get confused with valid system types. + # -solaris* is a basic system type, with this one exception. + -solaris1 | -solaris1.*) + os=`echo $os | sed -e 's|solaris1|sunos4|'` + ;; + -solaris) + os=-solaris2 + ;; + -svr4*) + os=-sysv4 + ;; + -unixware*) + os=-sysv4.2uw + ;; + -gnu/linux*) + os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'` + ;; + # First accept the basic system types. + # The portable systems comes first. + # Each alternative MUST END IN A *, to match a version number. + # -sysv* is not here because it comes later, after sysvr4. + -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \ + | -*vms* | -sco* | -esix* | -isc* | -aix* | -sunos | -sunos[34]*\ + | -hpux* | -unos* | -osf* | -luna* | -dgux* | -solaris* | -sym* \ + | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \ + | -aos* \ + | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \ + | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \ + | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* \ + | -openbsd* | -solidbsd* \ + | -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \ + | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \ + | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \ + | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \ + | -chorusos* | -chorusrdb* \ + | -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \ + | -mingw32* | -linux-gnu* | -linux-newlib* | -linux-uclibc* \ + | -uxpv* | -beos* | -mpeix* | -udk* \ + | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \ + | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \ + | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \ + | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \ + | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \ + | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \ + | -skyos* | -haiku* | -rdos* | -toppers*) + # Remember, each alternative MUST END IN *, to match a version number. + ;; + -qnx*) + case $basic_machine in + x86-* | i*86-*) + ;; + *) + os=-nto$os + ;; + esac + ;; + -nto-qnx*) + ;; + -nto*) + os=`echo $os | sed -e 's|nto|nto-qnx|'` + ;; + -sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \ + | -windows* | -osx | -abug | -netware* | -os9* | -beos* | -haiku* \ + | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*) + ;; + -mac*) + os=`echo $os | sed -e 's|mac|macos|'` + ;; + -linux-dietlibc) + os=-linux-dietlibc + ;; + -linux*) + os=`echo $os | sed -e 's|linux|linux-gnu|'` + ;; + -sunos5*) + os=`echo $os | sed -e 's|sunos5|solaris2|'` + ;; + -sunos6*) + os=`echo $os | sed -e 's|sunos6|solaris3|'` + ;; + -opened*) + os=-openedition + ;; + -os400*) + os=-os400 + ;; + -wince*) + os=-wince + ;; + -osfrose*) + os=-osfrose + ;; + -osf*) + os=-osf + ;; + -utek*) + os=-bsd + ;; + -dynix*) + os=-bsd + ;; + -acis*) + os=-aos + ;; + -atheos*) + os=-atheos + ;; + -syllable*) + os=-syllable + ;; + -386bsd) + os=-bsd + ;; + -ctix* | -uts*) + os=-sysv + ;; + -nova*) + os=-rtmk-nova + ;; + -ns2 ) + os=-nextstep2 + ;; + -nsk*) + os=-nsk + ;; + # Preserve the version number of sinix5. + -sinix5.*) + os=`echo $os | sed -e 's|sinix|sysv|'` + ;; + -sinix*) + os=-sysv4 + ;; + -tpf*) + os=-tpf + ;; + -triton*) + os=-sysv3 + ;; + -oss*) + os=-sysv3 + ;; + -svr4) + os=-sysv4 + ;; + -svr3) + os=-sysv3 + ;; + -sysvr4) + os=-sysv4 + ;; + # This must come after -sysvr4. + -sysv*) + ;; + -ose*) + os=-ose + ;; + -es1800*) + os=-ose + ;; + -xenix) + os=-xenix + ;; + -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) + os=-mint + ;; + -aros*) + os=-aros + ;; + -kaos*) + os=-kaos + ;; + -zvmoe) + os=-zvmoe + ;; + -none) + ;; + *) + # Get rid of the `-' at the beginning of $os. + os=`echo $os | sed 's/[^-]*-//'` + echo Invalid configuration \`$1\': system \`$os\' not recognized 1>&2 + exit 1 + ;; +esac +else + +# Here we handle the default operating systems that come with various machines. +# The value should be what the vendor currently ships out the door with their +# machine or put another way, the most popular os provided with the machine. + +# Note that if you're going to try to match "-MANUFACTURER" here (say, +# "-sun"), then you have to tell the case statement up towards the top +# that MANUFACTURER isn't an operating system. Otherwise, code above +# will signal an error saying that MANUFACTURER isn't an operating +# system, and we'll never get to this point. + +case $basic_machine in + score-*) + os=-elf + ;; + spu-*) + os=-elf + ;; + *-acorn) + os=-riscix1.2 + ;; + arm*-rebel) + os=-linux + ;; + arm*-semi) + os=-aout + ;; + c4x-* | tic4x-*) + os=-coff + ;; + # This must come before the *-dec entry. + pdp10-*) + os=-tops20 + ;; + pdp11-*) + os=-none + ;; + *-dec | vax-*) + os=-ultrix4.2 + ;; + m68*-apollo) + os=-domain + ;; + i386-sun) + os=-sunos4.0.2 + ;; + m68000-sun) + os=-sunos3 + # This also exists in the configure program, but was not the + # default. + # os=-sunos4 + ;; + m68*-cisco) + os=-aout + ;; + mips*-cisco) + os=-elf + ;; + mips*-*) + os=-elf + ;; + or32-*) + os=-coff + ;; + *-tti) # must be before sparc entry or we get the wrong os. + os=-sysv3 + ;; + sparc-* | *-sun) + os=-sunos4.1.1 + ;; + *-be) + os=-beos + ;; + *-haiku) + os=-haiku + ;; + *-ibm) + os=-aix + ;; + *-knuth) + os=-mmixware + ;; + *-wec) + os=-proelf + ;; + *-winbond) + os=-proelf + ;; + *-oki) + os=-proelf + ;; + *-hp) + os=-hpux + ;; + *-hitachi) + os=-hiux + ;; + i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent) + os=-sysv + ;; + *-cbm) + os=-amigaos + ;; + *-dg) + os=-dgux + ;; + *-dolphin) + os=-sysv3 + ;; + m68k-ccur) + os=-rtu + ;; + m88k-omron*) + os=-luna + ;; + *-next ) + os=-nextstep + ;; + *-sequent) + os=-ptx + ;; + *-crds) + os=-unos + ;; + *-ns) + os=-genix + ;; + i370-*) + os=-mvs + ;; + *-next) + os=-nextstep3 + ;; + *-gould) + os=-sysv + ;; + *-highlevel) + os=-bsd + ;; + *-encore) + os=-bsd + ;; + *-sgi) + os=-irix + ;; + *-siemens) + os=-sysv4 + ;; + *-masscomp) + os=-rtu + ;; + f30[01]-fujitsu | f700-fujitsu) + os=-uxpv + ;; + *-rom68k) + os=-coff + ;; + *-*bug) + os=-coff + ;; + *-apple) + os=-macos + ;; + *-atari*) + os=-mint + ;; + *) + os=-none + ;; +esac +fi + +# Here we handle the case where we know the os, and the CPU type, but not the +# manufacturer. We pick the logical manufacturer. +vendor=unknown +case $basic_machine in + *-unknown) + case $os in + -riscix*) + vendor=acorn + ;; + -sunos*) + vendor=sun + ;; + -aix*) + vendor=ibm + ;; + -beos*) + vendor=be + ;; + -hpux*) + vendor=hp + ;; + -mpeix*) + vendor=hp + ;; + -hiux*) + vendor=hitachi + ;; + -unos*) + vendor=crds + ;; + -dgux*) + vendor=dg + ;; + -luna*) + vendor=omron + ;; + -genix*) + vendor=ns + ;; + -mvs* | -opened*) + vendor=ibm + ;; + -os400*) + vendor=ibm + ;; + -ptx*) + vendor=sequent + ;; + -tpf*) + vendor=ibm + ;; + -vxsim* | -vxworks* | -windiss*) + vendor=wrs + ;; + -aux*) + vendor=apple + ;; + -hms*) + vendor=hitachi + ;; + -mpw* | -macos*) + vendor=apple + ;; + -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) + vendor=atari + ;; + -vos*) + vendor=stratus + ;; + esac + basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"` + ;; +esac + +echo $basic_machine$os +exit + +# Local variables: +# eval: (add-hook 'write-file-hooks 'time-stamp) +# time-stamp-start: "timestamp='" +# time-stamp-format: "%:y-%02m-%02d" +# time-stamp-end: "'" +# End: diff --git a/configure b/configure new file mode 100755 index 0000000..fd94fc1 --- /dev/null +++ b/configure @@ -0,0 +1,21486 @@ +#! /bin/sh +# Guess values for system-dependent variables and create Makefiles. +# Generated by GNU Autoconf 2.63. +# +# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, +# 2002, 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. +# This configure script is free software; the Free Software Foundation +# gives unlimited permission to copy, distribute and modify it. +## --------------------- ## +## M4sh Initialization. ## +## --------------------- ## + +# Be more Bourne compatible +DUALCASE=1; export DUALCASE # for MKS sh +if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then + emulate sh + NULLCMD=: + # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which + # is contrary to our usage. Disable this feature. + alias -g '${1+"$@"}'='"$@"' + setopt NO_GLOB_SUBST +else + case `(set -o) 2>/dev/null` in + *posix*) set -o posix ;; +esac + +fi + + + + +# PATH needs CR +# Avoid depending upon Character Ranges. +as_cr_letters='abcdefghijklmnopqrstuvwxyz' +as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' +as_cr_Letters=$as_cr_letters$as_cr_LETTERS +as_cr_digits='0123456789' +as_cr_alnum=$as_cr_Letters$as_cr_digits + +as_nl=' +' +export as_nl +# Printing a long string crashes Solaris 7 /usr/bin/printf. +as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo +if (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='printf %s\n' + as_echo_n='printf %s' +else + if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then + as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' + as_echo_n='/usr/ucb/echo -n' + else + as_echo_body='eval expr "X$1" : "X\\(.*\\)"' + as_echo_n_body='eval + arg=$1; + case $arg in + *"$as_nl"*) + expr "X$arg" : "X\\(.*\\)$as_nl"; + arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; + esac; + expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" + ' + export as_echo_n_body + as_echo_n='sh -c $as_echo_n_body as_echo' + fi + export as_echo_body + as_echo='sh -c $as_echo_body as_echo' +fi + +# The user is always right. +if test "${PATH_SEPARATOR+set}" != set; then + PATH_SEPARATOR=: + (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { + (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || + PATH_SEPARATOR=';' + } +fi + +# Support unset when possible. +if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then + as_unset=unset +else + as_unset=false +fi + + +# IFS +# We need space, tab and new line, in precisely that order. Quoting is +# there to prevent editors from complaining about space-tab. +# (If _AS_PATH_WALK were called with IFS unset, it would disable word +# splitting by setting IFS to empty value.) +IFS=" "" $as_nl" + +# Find who we are. Look in the path if we contain no directory separator. +case $0 in + *[\\/]* ) as_myself=$0 ;; + *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break +done +IFS=$as_save_IFS + + ;; +esac +# We did not find ourselves, most probably we were run as `sh COMMAND' +# in which case we are not to be found in the path. +if test "x$as_myself" = x; then + as_myself=$0 +fi +if test ! -f "$as_myself"; then + $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 + { (exit 1); exit 1; } +fi + +# Work around bugs in pre-3.0 UWIN ksh. +for as_var in ENV MAIL MAILPATH +do ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var +done +PS1='$ ' +PS2='> ' +PS4='+ ' + +# NLS nuisances. +LC_ALL=C +export LC_ALL +LANGUAGE=C +export LANGUAGE + +# Required to use basename. +if expr a : '\(a\)' >/dev/null 2>&1 && + test "X`expr 00001 : '.*\(...\)'`" = X001; then + as_expr=expr +else + as_expr=false +fi + +if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then + as_basename=basename +else + as_basename=false +fi + + +# Name of the executable. +as_me=`$as_basename -- "$0" || +$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ + X"$0" : 'X\(//\)$' \| \ + X"$0" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X/"$0" | + sed '/^.*\/\([^/][^/]*\)\/*$/{ + s//\1/ + q + } + /^X\/\(\/\/\)$/{ + s//\1/ + q + } + /^X\/\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + +# CDPATH. +$as_unset CDPATH + + +if test "x$CONFIG_SHELL" = x; then + if (eval ":") 2>/dev/null; then + as_have_required=yes +else + as_have_required=no +fi + + if test $as_have_required = yes && (eval ": +(as_func_return () { + (exit \$1) +} +as_func_success () { + as_func_return 0 +} +as_func_failure () { + as_func_return 1 +} +as_func_ret_success () { + return 0 +} +as_func_ret_failure () { + return 1 +} + +exitcode=0 +if as_func_success; then + : +else + exitcode=1 + echo as_func_success failed. +fi + +if as_func_failure; then + exitcode=1 + echo as_func_failure succeeded. +fi + +if as_func_ret_success; then + : +else + exitcode=1 + echo as_func_ret_success failed. +fi + +if as_func_ret_failure; then + exitcode=1 + echo as_func_ret_failure succeeded. +fi + +if ( set x; as_func_ret_success y && test x = \"\$1\" ); then + : +else + exitcode=1 + echo positional parameters were not saved. +fi + +test \$exitcode = 0) || { (exit 1); exit 1; } + +( + as_lineno_1=\$LINENO + as_lineno_2=\$LINENO + test \"x\$as_lineno_1\" != \"x\$as_lineno_2\" && + test \"x\`expr \$as_lineno_1 + 1\`\" = \"x\$as_lineno_2\") || { (exit 1); exit 1; } +") 2> /dev/null; then + : +else + as_candidate_shells= + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + case $as_dir in + /*) + for as_base in sh bash ksh sh5; do + as_candidate_shells="$as_candidate_shells $as_dir/$as_base" + done;; + esac +done +IFS=$as_save_IFS + + + for as_shell in $as_candidate_shells $SHELL; do + # Try only shells that exist, to save several forks. + if { test -f "$as_shell" || test -f "$as_shell.exe"; } && + { ("$as_shell") 2> /dev/null <<\_ASEOF +if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then + emulate sh + NULLCMD=: + # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which + # is contrary to our usage. Disable this feature. + alias -g '${1+"$@"}'='"$@"' + setopt NO_GLOB_SUBST +else + case `(set -o) 2>/dev/null` in + *posix*) set -o posix ;; +esac + +fi + + +: +_ASEOF +}; then + CONFIG_SHELL=$as_shell + as_have_required=yes + if { "$as_shell" 2> /dev/null <<\_ASEOF +if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then + emulate sh + NULLCMD=: + # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which + # is contrary to our usage. Disable this feature. + alias -g '${1+"$@"}'='"$@"' + setopt NO_GLOB_SUBST +else + case `(set -o) 2>/dev/null` in + *posix*) set -o posix ;; +esac + +fi + + +: +(as_func_return () { + (exit $1) +} +as_func_success () { + as_func_return 0 +} +as_func_failure () { + as_func_return 1 +} +as_func_ret_success () { + return 0 +} +as_func_ret_failure () { + return 1 +} + +exitcode=0 +if as_func_success; then + : +else + exitcode=1 + echo as_func_success failed. +fi + +if as_func_failure; then + exitcode=1 + echo as_func_failure succeeded. +fi + +if as_func_ret_success; then + : +else + exitcode=1 + echo as_func_ret_success failed. +fi + +if as_func_ret_failure; then + exitcode=1 + echo as_func_ret_failure succeeded. +fi + +if ( set x; as_func_ret_success y && test x = "$1" ); then + : +else + exitcode=1 + echo positional parameters were not saved. +fi + +test $exitcode = 0) || { (exit 1); exit 1; } + +( + as_lineno_1=$LINENO + as_lineno_2=$LINENO + test "x$as_lineno_1" != "x$as_lineno_2" && + test "x`expr $as_lineno_1 + 1`" = "x$as_lineno_2") || { (exit 1); exit 1; } + +_ASEOF +}; then + break +fi + +fi + + done + + if test "x$CONFIG_SHELL" != x; then + for as_var in BASH_ENV ENV + do ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var + done + export CONFIG_SHELL + exec "$CONFIG_SHELL" "$as_myself" ${1+"$@"} +fi + + + if test $as_have_required = no; then + echo This script requires a shell more modern than all the + echo shells that I found on your system. Please install a + echo modern shell, or manually run the script under such a + echo shell if you do have one. + { (exit 1); exit 1; } +fi + + +fi + +fi + + + +(eval "as_func_return () { + (exit \$1) +} +as_func_success () { + as_func_return 0 +} +as_func_failure () { + as_func_return 1 +} +as_func_ret_success () { + return 0 +} +as_func_ret_failure () { + return 1 +} + +exitcode=0 +if as_func_success; then + : +else + exitcode=1 + echo as_func_success failed. +fi + +if as_func_failure; then + exitcode=1 + echo as_func_failure succeeded. +fi + +if as_func_ret_success; then + : +else + exitcode=1 + echo as_func_ret_success failed. +fi + +if as_func_ret_failure; then + exitcode=1 + echo as_func_ret_failure succeeded. +fi + +if ( set x; as_func_ret_success y && test x = \"\$1\" ); then + : +else + exitcode=1 + echo positional parameters were not saved. +fi + +test \$exitcode = 0") || { + echo No shell found that supports shell functions. + echo Please tell bug-autoconf@gnu.org about your system, + echo including any error possibly output before this message. + echo This can help us improve future autoconf versions. + echo Configuration will now proceed without shell functions. +} + + + + as_lineno_1=$LINENO + as_lineno_2=$LINENO + test "x$as_lineno_1" != "x$as_lineno_2" && + test "x`expr $as_lineno_1 + 1`" = "x$as_lineno_2" || { + + # Create $as_me.lineno as a copy of $as_myself, but with $LINENO + # uniformly replaced by the line number. The first 'sed' inserts a + # line-number line after each line using $LINENO; the second 'sed' + # does the real work. The second script uses 'N' to pair each + # line-number line with the line containing $LINENO, and appends + # trailing '-' during substitution so that $LINENO is not a special + # case at line end. + # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the + # scripts with optimization help from Paolo Bonzini. Blame Lee + # E. McMahon (1931-1989) for sed's syntax. :-) + sed -n ' + p + /[$]LINENO/= + ' <$as_myself | + sed ' + s/[$]LINENO.*/&-/ + t lineno + b + :lineno + N + :loop + s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ + t loop + s/-\n.*// + ' >$as_me.lineno && + chmod +x "$as_me.lineno" || + { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2 + { (exit 1); exit 1; }; } + + # Don't try to exec as it changes $[0], causing all sort of problems + # (the dirname of $[0] is not the place where we might find the + # original and so on. Autoconf is especially sensitive to this). + . "./$as_me.lineno" + # Exit status is that of the last command. + exit +} + + +if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then + as_dirname=dirname +else + as_dirname=false +fi + +ECHO_C= ECHO_N= ECHO_T= +case `echo -n x` in +-n*) + case `echo 'x\c'` in + *c*) ECHO_T=' ';; # ECHO_T is single tab character. + *) ECHO_C='\c';; + esac;; +*) + ECHO_N='-n';; +esac +if expr a : '\(a\)' >/dev/null 2>&1 && + test "X`expr 00001 : '.*\(...\)'`" = X001; then + as_expr=expr +else + as_expr=false +fi + +rm -f conf$$ conf$$.exe conf$$.file +if test -d conf$$.dir; then + rm -f conf$$.dir/conf$$.file +else + rm -f conf$$.dir + mkdir conf$$.dir 2>/dev/null +fi +if (echo >conf$$.file) 2>/dev/null; then + if ln -s conf$$.file conf$$ 2>/dev/null; then + as_ln_s='ln -s' + # ... but there are two gotchas: + # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. + # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. + # In both cases, we have to default to `cp -p'. + ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || + as_ln_s='cp -p' + elif ln conf$$.file conf$$ 2>/dev/null; then + as_ln_s=ln + else + as_ln_s='cp -p' + fi +else + as_ln_s='cp -p' +fi +rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file +rmdir conf$$.dir 2>/dev/null + +if mkdir -p . 2>/dev/null; then + as_mkdir_p=: +else + test -d ./-p && rmdir ./-p + as_mkdir_p=false +fi + +if test -x / >/dev/null 2>&1; then + as_test_x='test -x' +else + if ls -dL / >/dev/null 2>&1; then + as_ls_L_option=L + else + as_ls_L_option= + fi + as_test_x=' + eval sh -c '\'' + if test -d "$1"; then + test -d "$1/."; + else + case $1 in + -*)set "./$1";; + esac; + case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in + ???[sx]*):;;*)false;;esac;fi + '\'' sh + ' +fi +as_executable_p=$as_test_x + +# Sed expression to map a string onto a valid CPP name. +as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" + +# Sed expression to map a string onto a valid variable name. +as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" + + + + +# Check that we are running under the correct shell. +SHELL=${CONFIG_SHELL-/bin/sh} + +case X$lt_ECHO in +X*--fallback-echo) + # Remove one level of quotation (which was required for Make). + ECHO=`echo "$lt_ECHO" | sed 's,\\\\\$\\$0,'$0','` + ;; +esac + +ECHO=${lt_ECHO-echo} +if test "X$1" = X--no-reexec; then + # Discard the --no-reexec flag, and continue. + shift +elif test "X$1" = X--fallback-echo; then + # Avoid inline document here, it may be left over + : +elif test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t' ; then + # Yippee, $ECHO works! + : +else + # Restart under the correct shell. + exec $SHELL "$0" --no-reexec ${1+"$@"} +fi + +if test "X$1" = X--fallback-echo; then + # used as fallback echo + shift + cat <<_LT_EOF +$* +_LT_EOF + exit 0 +fi + +# The HP-UX ksh and POSIX shell print the target directory to stdout +# if CDPATH is set. +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH + +if test -z "$lt_ECHO"; then + if test "X${echo_test_string+set}" != Xset; then + # find a string as large as possible, as long as the shell can cope with it + for cmd in 'sed 50q "$0"' 'sed 20q "$0"' 'sed 10q "$0"' 'sed 2q "$0"' 'echo test'; do + # expected sizes: less than 2Kb, 1Kb, 512 bytes, 16 bytes, ... + if { echo_test_string=`eval $cmd`; } 2>/dev/null && + { test "X$echo_test_string" = "X$echo_test_string"; } 2>/dev/null + then + break + fi + done + fi + + if test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t' && + echo_testing_string=`{ $ECHO "$echo_test_string"; } 2>/dev/null` && + test "X$echo_testing_string" = "X$echo_test_string"; then + : + else + # The Solaris, AIX, and Digital Unix default echo programs unquote + # backslashes. This makes it impossible to quote backslashes using + # echo "$something" | sed 's/\\/\\\\/g' + # + # So, first we look for a working echo in the user's PATH. + + lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR + for dir in $PATH /usr/ucb; do + IFS="$lt_save_ifs" + if (test -f $dir/echo || test -f $dir/echo$ac_exeext) && + test "X`($dir/echo '\t') 2>/dev/null`" = 'X\t' && + echo_testing_string=`($dir/echo "$echo_test_string") 2>/dev/null` && + test "X$echo_testing_string" = "X$echo_test_string"; then + ECHO="$dir/echo" + break + fi + done + IFS="$lt_save_ifs" + + if test "X$ECHO" = Xecho; then + # We didn't find a better echo, so look for alternatives. + if test "X`{ print -r '\t'; } 2>/dev/null`" = 'X\t' && + echo_testing_string=`{ print -r "$echo_test_string"; } 2>/dev/null` && + test "X$echo_testing_string" = "X$echo_test_string"; then + # This shell has a builtin print -r that does the trick. + ECHO='print -r' + elif { test -f /bin/ksh || test -f /bin/ksh$ac_exeext; } && + test "X$CONFIG_SHELL" != X/bin/ksh; then + # If we have ksh, try running configure again with it. + ORIGINAL_CONFIG_SHELL=${CONFIG_SHELL-/bin/sh} + export ORIGINAL_CONFIG_SHELL + CONFIG_SHELL=/bin/ksh + export CONFIG_SHELL + exec $CONFIG_SHELL "$0" --no-reexec ${1+"$@"} + else + # Try using printf. + ECHO='printf %s\n' + if test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t' && + echo_testing_string=`{ $ECHO "$echo_test_string"; } 2>/dev/null` && + test "X$echo_testing_string" = "X$echo_test_string"; then + # Cool, printf works + : + elif echo_testing_string=`($ORIGINAL_CONFIG_SHELL "$0" --fallback-echo '\t') 2>/dev/null` && + test "X$echo_testing_string" = 'X\t' && + echo_testing_string=`($ORIGINAL_CONFIG_SHELL "$0" --fallback-echo "$echo_test_string") 2>/dev/null` && + test "X$echo_testing_string" = "X$echo_test_string"; then + CONFIG_SHELL=$ORIGINAL_CONFIG_SHELL + export CONFIG_SHELL + SHELL="$CONFIG_SHELL" + export SHELL + ECHO="$CONFIG_SHELL $0 --fallback-echo" + elif echo_testing_string=`($CONFIG_SHELL "$0" --fallback-echo '\t') 2>/dev/null` && + test "X$echo_testing_string" = 'X\t' && + echo_testing_string=`($CONFIG_SHELL "$0" --fallback-echo "$echo_test_string") 2>/dev/null` && + test "X$echo_testing_string" = "X$echo_test_string"; then + ECHO="$CONFIG_SHELL $0 --fallback-echo" + else + # maybe with a smaller string... + prev=: + + for cmd in 'echo test' 'sed 2q "$0"' 'sed 10q "$0"' 'sed 20q "$0"' 'sed 50q "$0"'; do + if { test "X$echo_test_string" = "X`eval $cmd`"; } 2>/dev/null + then + break + fi + prev="$cmd" + done + + if test "$prev" != 'sed 50q "$0"'; then + echo_test_string=`eval $prev` + export echo_test_string + exec ${ORIGINAL_CONFIG_SHELL-${CONFIG_SHELL-/bin/sh}} "$0" ${1+"$@"} + else + # Oops. We lost completely, so just stick with echo. + ECHO=echo + fi + fi + fi + fi + fi +fi + +# Copy echo and quote the copy suitably for passing to libtool from +# the Makefile, instead of quoting the original, which is used later. +lt_ECHO=$ECHO +if test "X$lt_ECHO" = "X$CONFIG_SHELL $0 --fallback-echo"; then + lt_ECHO="$CONFIG_SHELL \\\$\$0 --fallback-echo" +fi + + + + +exec 7<&0 &1 + +# Name of the host. +# hostname on some systems (SVR3.2, Linux) returns a bogus exit status, +# so uname gets run too. +ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` + +# +# Initializations. +# +ac_default_prefix=/usr/local +ac_clean_files= +ac_config_libobj_dir=. +LIBOBJS= +cross_compiling=no +subdirs= +MFLAGS= +MAKEFLAGS= +SHELL=${CONFIG_SHELL-/bin/sh} + +# Identity of this package. +PACKAGE_NAME= +PACKAGE_TARNAME= +PACKAGE_VERSION= +PACKAGE_STRING= +PACKAGE_BUGREPORT= + +ac_unique_file="src/passwd.c" +ac_default_prefix=/usr +# Factoring default headers for most tests. +ac_includes_default="\ +#include +#ifdef HAVE_SYS_TYPES_H +# include +#endif +#ifdef HAVE_SYS_STAT_H +# include +#endif +#ifdef STDC_HEADERS +# include +# include +#else +# ifdef HAVE_STDLIB_H +# include +# endif +#endif +#ifdef HAVE_STRING_H +# if !defined STDC_HEADERS && defined HAVE_MEMORY_H +# include +# endif +# include +#endif +#ifdef HAVE_STRINGS_H +# include +#endif +#ifdef HAVE_INTTYPES_H +# include +#endif +#ifdef HAVE_STDINT_H +# include +#endif +#ifdef HAVE_UNISTD_H +# include +#endif" + +ac_subst_vars='LTLIBOBJS +BIOAPI_LIB +POSUB +LTLIBINTL +LIBINTL +INTLLIBS +LTLIBICONV +LIBICONV +INTL_MACOSX_LIBS +MSGMERGE +XGETTEXT_015 +XGETTEXT +GMSGFMT_015 +MSGFMT_015 +GMSGFMT +MSGFMT +USE_NLS +NSCD_LIB +LDAP_LIBS +TLS_LIBS +SSL_LIBS +LIBOBJS +ATTR_LIB +CRYPT_LIB +NSL_LIB +PAM_LIBS +DL_LIBS +build_AUDIT_PLUGIN_FALSE +build_AUDIT_PLUGIN_TRUE +AUDIT_LIBS +build_LAUS_PLUGIN_FALSE +build_LAUS_PLUGIN_TRUE +LAUS_LIBS +SLP_LIBS +SELINUX_LIB +build_PAM_RPASSWD_FALSE +build_PAM_RPASSWD_TRUE +PIE_LDFLAGS +PIE_CFLAGS +libc_cv_fpie +EXTRA_CFLAGS +OTOOL64 +OTOOL +LIPO +NMEDIT +DSYMUTIL +lt_ECHO +RANLIB +AR +OBJDUMP +LN_S +NM +ac_ct_DUMPBIN +DUMPBIN +LD +FGREP +SED +LIBTOOL +EGREP +GREP +CPP +am__fastdepCC_FALSE +am__fastdepCC_TRUE +CCDEPMODE +AMDEPBACKSLASH +AMDEP_FALSE +AMDEP_TRUE +am__quote +am__include +DEPDIR +OBJEXT +EXEEXT +ac_ct_CC +CPPFLAGS +LDFLAGS +CFLAGS +CC +host_os +host_vendor +host_cpu +host +build_os +build_vendor +build_cpu +build +am__untar +am__tar +AMTAR +am__leading_dot +SET_MAKE +AWK +mkdir_p +MKDIR_P +INSTALL_STRIP_PROGRAM +STRIP +install_sh +MAKEINFO +AUTOHEADER +AUTOMAKE +AUTOCONF +ACLOCAL +VERSION +PACKAGE +CYGPATH_W +am__isrc +INSTALL_DATA +INSTALL_SCRIPT +INSTALL_PROGRAM +target_alias +host_alias +build_alias +LIBS +ECHO_T +ECHO_N +ECHO_C +DEFS +mandir +localedir +libdir +psdir +pdfdir +dvidir +htmldir +infodir +docdir +oldincludedir +includedir +localstatedir +sharedstatedir +sysconfdir +datadir +datarootdir +libexecdir +sbindir +bindir +program_transform_name +prefix +exec_prefix +PACKAGE_BUGREPORT +PACKAGE_STRING +PACKAGE_VERSION +PACKAGE_TARNAME +PACKAGE_NAME +PATH_SEPARATOR +SHELL' +ac_subst_files='' +ac_user_opts=' +enable_option_checking +enable_dependency_tracking +enable_shared +enable_static +with_pic +enable_fast_install +with_gnu_ld +enable_libtool_lock +enable_largefile +with_dmalloc +enable_pam_rpasswd +enable_selinux +enable_static_selinux +enable_slp +enable_laus_plugin +enable_audit_plugin +enable_ssl +enable_ldap +with_ldap_lib +with_ldap_dir +with_ldap_conf_file +with_ldap_secret_file +enable_nls +enable_rpath +with_libiconv_prefix +with_libintl_prefix +' + ac_precious_vars='build_alias +host_alias +target_alias +CC +CFLAGS +LDFLAGS +LIBS +CPPFLAGS +CPP' + + +# Initialize some variables set by options. +ac_init_help= +ac_init_version=false +ac_unrecognized_opts= +ac_unrecognized_sep= +# The variables have the same names as the options, with +# dashes changed to underlines. +cache_file=/dev/null +exec_prefix=NONE +no_create= +no_recursion= +prefix=NONE +program_prefix=NONE +program_suffix=NONE +program_transform_name=s,x,x, +silent= +site= +srcdir= +verbose= +x_includes=NONE +x_libraries=NONE + +# Installation directory options. +# These are left unexpanded so users can "make install exec_prefix=/foo" +# and all the variables that are supposed to be based on exec_prefix +# by default will actually change. +# Use braces instead of parens because sh, perl, etc. also accept them. +# (The list follows the same order as the GNU Coding Standards.) +bindir='${exec_prefix}/bin' +sbindir='${exec_prefix}/sbin' +libexecdir='${exec_prefix}/libexec' +datarootdir='${prefix}/share' +datadir='${datarootdir}' +sysconfdir='${prefix}/etc' +sharedstatedir='${prefix}/com' +localstatedir='${prefix}/var' +includedir='${prefix}/include' +oldincludedir='/usr/include' +docdir='${datarootdir}/doc/${PACKAGE}' +infodir='${datarootdir}/info' +htmldir='${docdir}' +dvidir='${docdir}' +pdfdir='${docdir}' +psdir='${docdir}' +libdir='${exec_prefix}/lib' +localedir='${datarootdir}/locale' +mandir='${datarootdir}/man' + +ac_prev= +ac_dashdash= +for ac_option +do + # If the previous option needs an argument, assign it. + if test -n "$ac_prev"; then + eval $ac_prev=\$ac_option + ac_prev= + continue + fi + + case $ac_option in + *=*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;; + *) ac_optarg=yes ;; + esac + + # Accept the important Cygnus configure options, so we can diagnose typos. + + case $ac_dashdash$ac_option in + --) + ac_dashdash=yes ;; + + -bindir | --bindir | --bindi | --bind | --bin | --bi) + ac_prev=bindir ;; + -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) + bindir=$ac_optarg ;; + + -build | --build | --buil | --bui | --bu) + ac_prev=build_alias ;; + -build=* | --build=* | --buil=* | --bui=* | --bu=*) + build_alias=$ac_optarg ;; + + -cache-file | --cache-file | --cache-fil | --cache-fi \ + | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) + ac_prev=cache_file ;; + -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ + | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) + cache_file=$ac_optarg ;; + + --config-cache | -C) + cache_file=config.cache ;; + + -datadir | --datadir | --datadi | --datad) + ac_prev=datadir ;; + -datadir=* | --datadir=* | --datadi=* | --datad=*) + datadir=$ac_optarg ;; + + -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \ + | --dataroo | --dataro | --datar) + ac_prev=datarootdir ;; + -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \ + | --dataroot=* | --dataroo=* | --dataro=* | --datar=*) + datarootdir=$ac_optarg ;; + + -disable-* | --disable-*) + ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && + { $as_echo "$as_me: error: invalid feature name: $ac_useropt" >&2 + { (exit 1); exit 1; }; } + ac_useropt_orig=$ac_useropt + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + case $ac_user_opts in + *" +"enable_$ac_useropt" +"*) ;; + *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig" + ac_unrecognized_sep=', ';; + esac + eval enable_$ac_useropt=no ;; + + -docdir | --docdir | --docdi | --doc | --do) + ac_prev=docdir ;; + -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*) + docdir=$ac_optarg ;; + + -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv) + ac_prev=dvidir ;; + -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*) + dvidir=$ac_optarg ;; + + -enable-* | --enable-*) + ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && + { $as_echo "$as_me: error: invalid feature name: $ac_useropt" >&2 + { (exit 1); exit 1; }; } + ac_useropt_orig=$ac_useropt + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + case $ac_user_opts in + *" +"enable_$ac_useropt" +"*) ;; + *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig" + ac_unrecognized_sep=', ';; + esac + eval enable_$ac_useropt=\$ac_optarg ;; + + -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ + | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ + | --exec | --exe | --ex) + ac_prev=exec_prefix ;; + -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ + | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ + | --exec=* | --exe=* | --ex=*) + exec_prefix=$ac_optarg ;; + + -gas | --gas | --ga | --g) + # Obsolete; use --with-gas. + with_gas=yes ;; + + -help | --help | --hel | --he | -h) + ac_init_help=long ;; + -help=r* | --help=r* | --hel=r* | --he=r* | -hr*) + ac_init_help=recursive ;; + -help=s* | --help=s* | --hel=s* | --he=s* | -hs*) + ac_init_help=short ;; + + -host | --host | --hos | --ho) + ac_prev=host_alias ;; + -host=* | --host=* | --hos=* | --ho=*) + host_alias=$ac_optarg ;; + + -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht) + ac_prev=htmldir ;; + -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \ + | --ht=*) + htmldir=$ac_optarg ;; + + -includedir | --includedir | --includedi | --included | --include \ + | --includ | --inclu | --incl | --inc) + ac_prev=includedir ;; + -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ + | --includ=* | --inclu=* | --incl=* | --inc=*) + includedir=$ac_optarg ;; + + -infodir | --infodir | --infodi | --infod | --info | --inf) + ac_prev=infodir ;; + -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) + infodir=$ac_optarg ;; + + -libdir | --libdir | --libdi | --libd) + ac_prev=libdir ;; + -libdir=* | --libdir=* | --libdi=* | --libd=*) + libdir=$ac_optarg ;; + + -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ + | --libexe | --libex | --libe) + ac_prev=libexecdir ;; + -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ + | --libexe=* | --libex=* | --libe=*) + libexecdir=$ac_optarg ;; + + -localedir | --localedir | --localedi | --localed | --locale) + ac_prev=localedir ;; + -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*) + localedir=$ac_optarg ;; + + -localstatedir | --localstatedir | --localstatedi | --localstated \ + | --localstate | --localstat | --localsta | --localst | --locals) + ac_prev=localstatedir ;; + -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ + | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*) + localstatedir=$ac_optarg ;; + + -mandir | --mandir | --mandi | --mand | --man | --ma | --m) + ac_prev=mandir ;; + -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) + mandir=$ac_optarg ;; + + -nfp | --nfp | --nf) + # Obsolete; use --without-fp. + with_fp=no ;; + + -no-create | --no-create | --no-creat | --no-crea | --no-cre \ + | --no-cr | --no-c | -n) + no_create=yes ;; + + -no-recursion | --no-recursion | --no-recursio | --no-recursi \ + | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) + no_recursion=yes ;; + + -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ + | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ + | --oldin | --oldi | --old | --ol | --o) + ac_prev=oldincludedir ;; + -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ + | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ + | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) + oldincludedir=$ac_optarg ;; + + -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) + ac_prev=prefix ;; + -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) + prefix=$ac_optarg ;; + + -program-prefix | --program-prefix | --program-prefi | --program-pref \ + | --program-pre | --program-pr | --program-p) + ac_prev=program_prefix ;; + -program-prefix=* | --program-prefix=* | --program-prefi=* \ + | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) + program_prefix=$ac_optarg ;; + + -program-suffix | --program-suffix | --program-suffi | --program-suff \ + | --program-suf | --program-su | --program-s) + ac_prev=program_suffix ;; + -program-suffix=* | --program-suffix=* | --program-suffi=* \ + | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) + program_suffix=$ac_optarg ;; + + -program-transform-name | --program-transform-name \ + | --program-transform-nam | --program-transform-na \ + | --program-transform-n | --program-transform- \ + | --program-transform | --program-transfor \ + | --program-transfo | --program-transf \ + | --program-trans | --program-tran \ + | --progr-tra | --program-tr | --program-t) + ac_prev=program_transform_name ;; + -program-transform-name=* | --program-transform-name=* \ + | --program-transform-nam=* | --program-transform-na=* \ + | --program-transform-n=* | --program-transform-=* \ + | --program-transform=* | --program-transfor=* \ + | --program-transfo=* | --program-transf=* \ + | --program-trans=* | --program-tran=* \ + | --progr-tra=* | --program-tr=* | --program-t=*) + program_transform_name=$ac_optarg ;; + + -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd) + ac_prev=pdfdir ;; + -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*) + pdfdir=$ac_optarg ;; + + -psdir | --psdir | --psdi | --psd | --ps) + ac_prev=psdir ;; + -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*) + psdir=$ac_optarg ;; + + -q | -quiet | --quiet | --quie | --qui | --qu | --q \ + | -silent | --silent | --silen | --sile | --sil) + silent=yes ;; + + -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) + ac_prev=sbindir ;; + -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ + | --sbi=* | --sb=*) + sbindir=$ac_optarg ;; + + -sharedstatedir | --sharedstatedir | --sharedstatedi \ + | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ + | --sharedst | --shareds | --shared | --share | --shar \ + | --sha | --sh) + ac_prev=sharedstatedir ;; + -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ + | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ + | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ + | --sha=* | --sh=*) + sharedstatedir=$ac_optarg ;; + + -site | --site | --sit) + ac_prev=site ;; + -site=* | --site=* | --sit=*) + site=$ac_optarg ;; + + -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) + ac_prev=srcdir ;; + -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) + srcdir=$ac_optarg ;; + + -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ + | --syscon | --sysco | --sysc | --sys | --sy) + ac_prev=sysconfdir ;; + -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ + | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) + sysconfdir=$ac_optarg ;; + + -target | --target | --targe | --targ | --tar | --ta | --t) + ac_prev=target_alias ;; + -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) + target_alias=$ac_optarg ;; + + -v | -verbose | --verbose | --verbos | --verbo | --verb) + verbose=yes ;; + + -version | --version | --versio | --versi | --vers | -V) + ac_init_version=: ;; + + -with-* | --with-*) + ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && + { $as_echo "$as_me: error: invalid package name: $ac_useropt" >&2 + { (exit 1); exit 1; }; } + ac_useropt_orig=$ac_useropt + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + case $ac_user_opts in + *" +"with_$ac_useropt" +"*) ;; + *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig" + ac_unrecognized_sep=', ';; + esac + eval with_$ac_useropt=\$ac_optarg ;; + + -without-* | --without-*) + ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && + { $as_echo "$as_me: error: invalid package name: $ac_useropt" >&2 + { (exit 1); exit 1; }; } + ac_useropt_orig=$ac_useropt + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + case $ac_user_opts in + *" +"with_$ac_useropt" +"*) ;; + *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig" + ac_unrecognized_sep=', ';; + esac + eval with_$ac_useropt=no ;; + + --x) + # Obsolete; use --with-x. + with_x=yes ;; + + -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ + | --x-incl | --x-inc | --x-in | --x-i) + ac_prev=x_includes ;; + -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ + | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) + x_includes=$ac_optarg ;; + + -x-libraries | --x-libraries | --x-librarie | --x-librari \ + | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) + ac_prev=x_libraries ;; + -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ + | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) + x_libraries=$ac_optarg ;; + + -*) { $as_echo "$as_me: error: unrecognized option: $ac_option +Try \`$0 --help' for more information." >&2 + { (exit 1); exit 1; }; } + ;; + + *=*) + ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` + # Reject names that are not valid shell variable names. + expr "x$ac_envvar" : ".*[^_$as_cr_alnum]" >/dev/null && + { $as_echo "$as_me: error: invalid variable name: $ac_envvar" >&2 + { (exit 1); exit 1; }; } + eval $ac_envvar=\$ac_optarg + export $ac_envvar ;; + + *) + # FIXME: should be removed in autoconf 3.0. + $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2 + expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && + $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2 + : ${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option} + ;; + + esac +done + +if test -n "$ac_prev"; then + ac_option=--`echo $ac_prev | sed 's/_/-/g'` + { $as_echo "$as_me: error: missing argument to $ac_option" >&2 + { (exit 1); exit 1; }; } +fi + +if test -n "$ac_unrecognized_opts"; then + case $enable_option_checking in + no) ;; + fatal) { $as_echo "$as_me: error: unrecognized options: $ac_unrecognized_opts" >&2 + { (exit 1); exit 1; }; } ;; + *) $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;; + esac +fi + +# Check all directory arguments for consistency. +for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ + datadir sysconfdir sharedstatedir localstatedir includedir \ + oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ + libdir localedir mandir +do + eval ac_val=\$$ac_var + # Remove trailing slashes. + case $ac_val in + */ ) + ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'` + eval $ac_var=\$ac_val;; + esac + # Be sure to have absolute directory names. + case $ac_val in + [\\/$]* | ?:[\\/]* ) continue;; + NONE | '' ) case $ac_var in *prefix ) continue;; esac;; + esac + { $as_echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2 + { (exit 1); exit 1; }; } +done + +# There might be people who depend on the old broken behavior: `$host' +# used to hold the argument of --host etc. +# FIXME: To remove some day. +build=$build_alias +host=$host_alias +target=$target_alias + +# FIXME: To remove some day. +if test "x$host_alias" != x; then + if test "x$build_alias" = x; then + cross_compiling=maybe + $as_echo "$as_me: WARNING: If you wanted to set the --build type, don't use --host. + If a cross compiler is detected then cross compile mode will be used." >&2 + elif test "x$build_alias" != "x$host_alias"; then + cross_compiling=yes + fi +fi + +ac_tool_prefix= +test -n "$host_alias" && ac_tool_prefix=$host_alias- + +test "$silent" = yes && exec 6>/dev/null + + +ac_pwd=`pwd` && test -n "$ac_pwd" && +ac_ls_di=`ls -di .` && +ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` || + { $as_echo "$as_me: error: working directory cannot be determined" >&2 + { (exit 1); exit 1; }; } +test "X$ac_ls_di" = "X$ac_pwd_ls_di" || + { $as_echo "$as_me: error: pwd does not report name of working directory" >&2 + { (exit 1); exit 1; }; } + + +# Find the source files, if location was not specified. +if test -z "$srcdir"; then + ac_srcdir_defaulted=yes + # Try the directory containing this script, then the parent directory. + ac_confdir=`$as_dirname -- "$as_myself" || +$as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$as_myself" : 'X\(//\)[^/]' \| \ + X"$as_myself" : 'X\(//\)$' \| \ + X"$as_myself" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$as_myself" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + srcdir=$ac_confdir + if test ! -r "$srcdir/$ac_unique_file"; then + srcdir=.. + fi +else + ac_srcdir_defaulted=no +fi +if test ! -r "$srcdir/$ac_unique_file"; then + test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .." + { $as_echo "$as_me: error: cannot find sources ($ac_unique_file) in $srcdir" >&2 + { (exit 1); exit 1; }; } +fi +ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work" +ac_abs_confdir=`( + cd "$srcdir" && test -r "./$ac_unique_file" || { $as_echo "$as_me: error: $ac_msg" >&2 + { (exit 1); exit 1; }; } + pwd)` +# When building in place, set srcdir=. +if test "$ac_abs_confdir" = "$ac_pwd"; then + srcdir=. +fi +# Remove unnecessary trailing slashes from srcdir. +# Double slashes in file names in object file debugging info +# mess up M-x gdb in Emacs. +case $srcdir in +*/) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;; +esac +for ac_var in $ac_precious_vars; do + eval ac_env_${ac_var}_set=\${${ac_var}+set} + eval ac_env_${ac_var}_value=\$${ac_var} + eval ac_cv_env_${ac_var}_set=\${${ac_var}+set} + eval ac_cv_env_${ac_var}_value=\$${ac_var} +done + +# +# Report the --help message. +# +if test "$ac_init_help" = "long"; then + # Omit some internal or obsolete options to make the list less imposing. + # This message is too long to be a string in the A/UX 3.1 sh. + cat <<_ACEOF +\`configure' configures this package to adapt to many kinds of systems. + +Usage: $0 [OPTION]... [VAR=VALUE]... + +To assign environment variables (e.g., CC, CFLAGS...), specify them as +VAR=VALUE. See below for descriptions of some of the useful variables. + +Defaults for the options are specified in brackets. + +Configuration: + -h, --help display this help and exit + --help=short display options specific to this package + --help=recursive display the short help of all the included packages + -V, --version display version information and exit + -q, --quiet, --silent do not print \`checking...' messages + --cache-file=FILE cache test results in FILE [disabled] + -C, --config-cache alias for \`--cache-file=config.cache' + -n, --no-create do not create output files + --srcdir=DIR find the sources in DIR [configure dir or \`..'] + +Installation directories: + --prefix=PREFIX install architecture-independent files in PREFIX + [$ac_default_prefix] + --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX + [PREFIX] + +By default, \`make install' will install all the files in +\`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify +an installation prefix other than \`$ac_default_prefix' using \`--prefix', +for instance \`--prefix=\$HOME'. + +For better control, use the options below. + +Fine tuning of the installation directories: + --bindir=DIR user executables [EPREFIX/bin] + --sbindir=DIR system admin executables [EPREFIX/sbin] + --libexecdir=DIR program executables [EPREFIX/libexec] + --sysconfdir=DIR read-only single-machine data [PREFIX/etc] + --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] + --localstatedir=DIR modifiable single-machine data [PREFIX/var] + --libdir=DIR object code libraries [EPREFIX/lib] + --includedir=DIR C header files [PREFIX/include] + --oldincludedir=DIR C header files for non-gcc [/usr/include] + --datarootdir=DIR read-only arch.-independent data root [PREFIX/share] + --datadir=DIR read-only architecture-independent data [DATAROOTDIR] + --infodir=DIR info documentation [DATAROOTDIR/info] + --localedir=DIR locale-dependent data [DATAROOTDIR/locale] + --mandir=DIR man documentation [DATAROOTDIR/man] + --docdir=DIR documentation root [DATAROOTDIR/doc/PACKAGE] + --htmldir=DIR html documentation [DOCDIR] + --dvidir=DIR dvi documentation [DOCDIR] + --pdfdir=DIR pdf documentation [DOCDIR] + --psdir=DIR ps documentation [DOCDIR] +_ACEOF + + cat <<\_ACEOF + +Program names: + --program-prefix=PREFIX prepend PREFIX to installed program names + --program-suffix=SUFFIX append SUFFIX to installed program names + --program-transform-name=PROGRAM run sed PROGRAM on installed program names + +System types: + --build=BUILD configure for building on BUILD [guessed] + --host=HOST cross-compile to build programs to run on HOST [BUILD] +_ACEOF +fi + +if test -n "$ac_init_help"; then + + cat <<\_ACEOF + +Optional Features: + --disable-option-checking ignore unrecognized --enable/--with options + --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) + --enable-FEATURE[=ARG] include FEATURE [ARG=yes] + --disable-dependency-tracking speeds up one-time build + --enable-dependency-tracking do not reject slow dependency extractors + --enable-shared[=PKGS] build shared libraries [default=yes] + --enable-static[=PKGS] build static libraries [default=yes] + --enable-fast-install[=PKGS] + optimize for fast installation [default=yes] + --disable-libtool-lock avoid locking (might break parallel builds) + --disable-largefile omit support for large files + --enable-pam_rpasswd Enable build of pam_rpasswd + --disable-selinux Disable SELinux support + --enable-static-selinux Compile in SELinux support static + --disable-slp Disable SLP support + --disable-laus-plugin Disable build of LAuS plugin + --disable-audit-plugin Disable build of Linux audit plugin + --disable-gnutls disable GnuTLS support + --disable-ssl disable SSL/TSL support + --disable-ldap disable LDAP support + --disable-nls do not use Native Language Support + --disable-rpath do not hardcode runtime library paths + +Optional Packages: + --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] + --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) + --with-pic try to use only PIC/non-PIC objects [default=use + both] + --with-gnu-ld assume the C compiler uses GNU ld [default=no] + --with-dmalloc use dmalloc, as in + http://www.dmalloc.com/dmalloc.tar.gz + --with-ldap-lib=type select ldap library auto|netscape5|netscape4|netscape3|umich|openldap + --with-ldap-dir=DIR base directory of ldap SDK + --with-ldap-conf-file path to LDAP configuration file + --with-ldap-secret-file path to LDAP root secret file + --with-gnu-ld assume the C compiler uses GNU ld default=no + --with-libiconv-prefix[=DIR] search for libiconv in DIR/include and DIR/lib + --without-libiconv-prefix don't search for libiconv in includedir and libdir + --with-libintl-prefix[=DIR] search for libintl in DIR/include and DIR/lib + --without-libintl-prefix don't search for libintl in includedir and libdir + +Some influential environment variables: + CC C compiler command + CFLAGS C compiler flags + LDFLAGS linker flags, e.g. -L if you have libraries in a + nonstandard directory + LIBS libraries to pass to the linker, e.g. -l + CPPFLAGS C/C++/Objective C preprocessor flags, e.g. -I if + you have headers in a nonstandard directory + CPP C preprocessor + +Use these variables to override the choices made by `configure' or to help +it to find libraries and programs with nonstandard names/locations. + +_ACEOF +ac_status=$? +fi + +if test "$ac_init_help" = "recursive"; then + # If there are subdirs, report their specific --help. + for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue + test -d "$ac_dir" || + { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } || + continue + ac_builddir=. + +case "$ac_dir" in +.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; +*) + ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` + # A ".." for each directory in $ac_dir_suffix. + ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` + case $ac_top_builddir_sub in + "") ac_top_builddir_sub=. ac_top_build_prefix= ;; + *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; + esac ;; +esac +ac_abs_top_builddir=$ac_pwd +ac_abs_builddir=$ac_pwd$ac_dir_suffix +# for backward compatibility: +ac_top_builddir=$ac_top_build_prefix + +case $srcdir in + .) # We are building in place. + ac_srcdir=. + ac_top_srcdir=$ac_top_builddir_sub + ac_abs_top_srcdir=$ac_pwd ;; + [\\/]* | ?:[\\/]* ) # Absolute name. + ac_srcdir=$srcdir$ac_dir_suffix; + ac_top_srcdir=$srcdir + ac_abs_top_srcdir=$srcdir ;; + *) # Relative name. + ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix + ac_top_srcdir=$ac_top_build_prefix$srcdir + ac_abs_top_srcdir=$ac_pwd/$srcdir ;; +esac +ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix + + cd "$ac_dir" || { ac_status=$?; continue; } + # Check for guested configure. + if test -f "$ac_srcdir/configure.gnu"; then + echo && + $SHELL "$ac_srcdir/configure.gnu" --help=recursive + elif test -f "$ac_srcdir/configure"; then + echo && + $SHELL "$ac_srcdir/configure" --help=recursive + else + $as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 + fi || ac_status=$? + cd "$ac_pwd" || { ac_status=$?; break; } + done +fi + +test -n "$ac_init_help" && exit $ac_status +if $ac_init_version; then + cat <<\_ACEOF +configure +generated by GNU Autoconf 2.63 + +Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, +2002, 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. +This configure script is free software; the Free Software Foundation +gives unlimited permission to copy, distribute and modify it. +_ACEOF + exit +fi +cat >config.log <<_ACEOF +This file contains any messages produced by compilers while +running configure, to aid debugging if configure makes a mistake. + +It was created by $as_me, which was +generated by GNU Autoconf 2.63. Invocation command line was + + $ $0 $@ + +_ACEOF +exec 5>>config.log +{ +cat <<_ASUNAME +## --------- ## +## Platform. ## +## --------- ## + +hostname = `(hostname || uname -n) 2>/dev/null | sed 1q` +uname -m = `(uname -m) 2>/dev/null || echo unknown` +uname -r = `(uname -r) 2>/dev/null || echo unknown` +uname -s = `(uname -s) 2>/dev/null || echo unknown` +uname -v = `(uname -v) 2>/dev/null || echo unknown` + +/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown` +/bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown` + +/bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` +/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` +/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` +/usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown` +/bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` +/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` +/bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` + +_ASUNAME + +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + $as_echo "PATH: $as_dir" +done +IFS=$as_save_IFS + +} >&5 + +cat >&5 <<_ACEOF + + +## ----------- ## +## Core tests. ## +## ----------- ## + +_ACEOF + + +# Keep a trace of the command line. +# Strip out --no-create and --no-recursion so they do not pile up. +# Strip out --silent because we don't want to record it for future runs. +# Also quote any args containing shell meta-characters. +# Make two passes to allow for proper duplicate-argument suppression. +ac_configure_args= +ac_configure_args0= +ac_configure_args1= +ac_must_keep_next=false +for ac_pass in 1 2 +do + for ac_arg + do + case $ac_arg in + -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;; + -q | -quiet | --quiet | --quie | --qui | --qu | --q \ + | -silent | --silent | --silen | --sile | --sil) + continue ;; + *\'*) + ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; + esac + case $ac_pass in + 1) ac_configure_args0="$ac_configure_args0 '$ac_arg'" ;; + 2) + ac_configure_args1="$ac_configure_args1 '$ac_arg'" + if test $ac_must_keep_next = true; then + ac_must_keep_next=false # Got value, back to normal. + else + case $ac_arg in + *=* | --config-cache | -C | -disable-* | --disable-* \ + | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \ + | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \ + | -with-* | --with-* | -without-* | --without-* | --x) + case "$ac_configure_args0 " in + "$ac_configure_args1"*" '$ac_arg' "* ) continue ;; + esac + ;; + -* ) ac_must_keep_next=true ;; + esac + fi + ac_configure_args="$ac_configure_args '$ac_arg'" + ;; + esac + done +done +$as_unset ac_configure_args0 || test "${ac_configure_args0+set}" != set || { ac_configure_args0=; export ac_configure_args0; } +$as_unset ac_configure_args1 || test "${ac_configure_args1+set}" != set || { ac_configure_args1=; export ac_configure_args1; } + +# When interrupted or exit'd, cleanup temporary files, and complete +# config.log. We remove comments because anyway the quotes in there +# would cause problems or look ugly. +# WARNING: Use '\'' to represent an apostrophe within the trap. +# WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug. +trap 'exit_status=$? + # Save into config.log some information that might help in debugging. + { + echo + + cat <<\_ASBOX +## ---------------- ## +## Cache variables. ## +## ---------------- ## +_ASBOX + echo + # The following way of writing the cache mishandles newlines in values, +( + for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do + eval ac_val=\$$ac_var + case $ac_val in #( + *${as_nl}*) + case $ac_var in #( + *_cv_*) { $as_echo "$as_me:$LINENO: WARNING: cache variable $ac_var contains a newline" >&5 +$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; + esac + case $ac_var in #( + _ | IFS | as_nl) ;; #( + BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( + *) $as_unset $ac_var ;; + esac ;; + esac + done + (set) 2>&1 | + case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #( + *${as_nl}ac_space=\ *) + sed -n \ + "s/'\''/'\''\\\\'\'''\''/g; + s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p" + ;; #( + *) + sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" + ;; + esac | + sort +) + echo + + cat <<\_ASBOX +## ----------------- ## +## Output variables. ## +## ----------------- ## +_ASBOX + echo + for ac_var in $ac_subst_vars + do + eval ac_val=\$$ac_var + case $ac_val in + *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; + esac + $as_echo "$ac_var='\''$ac_val'\''" + done | sort + echo + + if test -n "$ac_subst_files"; then + cat <<\_ASBOX +## ------------------- ## +## File substitutions. ## +## ------------------- ## +_ASBOX + echo + for ac_var in $ac_subst_files + do + eval ac_val=\$$ac_var + case $ac_val in + *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; + esac + $as_echo "$ac_var='\''$ac_val'\''" + done | sort + echo + fi + + if test -s confdefs.h; then + cat <<\_ASBOX +## ----------- ## +## confdefs.h. ## +## ----------- ## +_ASBOX + echo + cat confdefs.h + echo + fi + test "$ac_signal" != 0 && + $as_echo "$as_me: caught signal $ac_signal" + $as_echo "$as_me: exit $exit_status" + } >&5 + rm -f core *.core core.conftest.* && + rm -f -r conftest* confdefs* conf$$* $ac_clean_files && + exit $exit_status +' 0 +for ac_signal in 1 2 13 15; do + trap 'ac_signal='$ac_signal'; { (exit 1); exit 1; }' $ac_signal +done +ac_signal=0 + +# confdefs.h avoids OS command line length limits that DEFS can exceed. +rm -f -r conftest* confdefs.h + +# Predefined preprocessor variables. + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_NAME "$PACKAGE_NAME" +_ACEOF + + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_TARNAME "$PACKAGE_TARNAME" +_ACEOF + + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_VERSION "$PACKAGE_VERSION" +_ACEOF + + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_STRING "$PACKAGE_STRING" +_ACEOF + + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT" +_ACEOF + + +# Let the site file select an alternate cache file if it wants to. +# Prefer an explicitly selected file to automatically selected ones. +ac_site_file1=NONE +ac_site_file2=NONE +if test -n "$CONFIG_SITE"; then + ac_site_file1=$CONFIG_SITE +elif test "x$prefix" != xNONE; then + ac_site_file1=$prefix/share/config.site + ac_site_file2=$prefix/etc/config.site +else + ac_site_file1=$ac_default_prefix/share/config.site + ac_site_file2=$ac_default_prefix/etc/config.site +fi +for ac_site_file in "$ac_site_file1" "$ac_site_file2" +do + test "x$ac_site_file" = xNONE && continue + if test -r "$ac_site_file"; then + { $as_echo "$as_me:$LINENO: loading site script $ac_site_file" >&5 +$as_echo "$as_me: loading site script $ac_site_file" >&6;} + sed 's/^/| /' "$ac_site_file" >&5 + . "$ac_site_file" + fi +done + +if test -r "$cache_file"; then + # Some versions of bash will fail to source /dev/null (special + # files actually), so we avoid doing that. + if test -f "$cache_file"; then + { $as_echo "$as_me:$LINENO: loading cache $cache_file" >&5 +$as_echo "$as_me: loading cache $cache_file" >&6;} + case $cache_file in + [\\/]* | ?:[\\/]* ) . "$cache_file";; + *) . "./$cache_file";; + esac + fi +else + { $as_echo "$as_me:$LINENO: creating cache $cache_file" >&5 +$as_echo "$as_me: creating cache $cache_file" >&6;} + >$cache_file +fi + +# Check that the precious variables saved in the cache have kept the same +# value. +ac_cache_corrupted=false +for ac_var in $ac_precious_vars; do + eval ac_old_set=\$ac_cv_env_${ac_var}_set + eval ac_new_set=\$ac_env_${ac_var}_set + eval ac_old_val=\$ac_cv_env_${ac_var}_value + eval ac_new_val=\$ac_env_${ac_var}_value + case $ac_old_set,$ac_new_set in + set,) + { $as_echo "$as_me:$LINENO: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 +$as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} + ac_cache_corrupted=: ;; + ,set) + { $as_echo "$as_me:$LINENO: error: \`$ac_var' was not set in the previous run" >&5 +$as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} + ac_cache_corrupted=: ;; + ,);; + *) + if test "x$ac_old_val" != "x$ac_new_val"; then + # differences in whitespace do not lead to failure. + ac_old_val_w=`echo x $ac_old_val` + ac_new_val_w=`echo x $ac_new_val` + if test "$ac_old_val_w" != "$ac_new_val_w"; then + { $as_echo "$as_me:$LINENO: error: \`$ac_var' has changed since the previous run:" >&5 +$as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} + ac_cache_corrupted=: + else + { $as_echo "$as_me:$LINENO: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5 +$as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;} + eval $ac_var=\$ac_old_val + fi + { $as_echo "$as_me:$LINENO: former value: \`$ac_old_val'" >&5 +$as_echo "$as_me: former value: \`$ac_old_val'" >&2;} + { $as_echo "$as_me:$LINENO: current value: \`$ac_new_val'" >&5 +$as_echo "$as_me: current value: \`$ac_new_val'" >&2;} + fi;; + esac + # Pass precious variables to config.status. + if test "$ac_new_set" = set; then + case $ac_new_val in + *\'*) ac_arg=$ac_var=`$as_echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; + *) ac_arg=$ac_var=$ac_new_val ;; + esac + case " $ac_configure_args " in + *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. + *) ac_configure_args="$ac_configure_args '$ac_arg'" ;; + esac + fi +done +if $ac_cache_corrupted; then + { $as_echo "$as_me:$LINENO: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} + { $as_echo "$as_me:$LINENO: error: changes in the environment can compromise the build" >&5 +$as_echo "$as_me: error: changes in the environment can compromise the build" >&2;} + { { $as_echo "$as_me:$LINENO: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&5 +$as_echo "$as_me: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&2;} + { (exit 1); exit 1; }; } +fi + + + + + + + + + + + + + + + + + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + +am__api_version='1.10' + +ac_aux_dir= +for ac_dir in "$srcdir" "$srcdir/.." "$srcdir/../.."; do + if test -f "$ac_dir/install-sh"; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/install-sh -c" + break + elif test -f "$ac_dir/install.sh"; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/install.sh -c" + break + elif test -f "$ac_dir/shtool"; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/shtool install -c" + break + fi +done +if test -z "$ac_aux_dir"; then + { { $as_echo "$as_me:$LINENO: error: cannot find install-sh or install.sh in \"$srcdir\" \"$srcdir/..\" \"$srcdir/../..\"" >&5 +$as_echo "$as_me: error: cannot find install-sh or install.sh in \"$srcdir\" \"$srcdir/..\" \"$srcdir/../..\"" >&2;} + { (exit 1); exit 1; }; } +fi + +# These three variables are undocumented and unsupported, +# and are intended to be withdrawn in a future Autoconf release. +# They can cause serious problems if a builder's source tree is in a directory +# whose full name contains unusual characters. +ac_config_guess="$SHELL $ac_aux_dir/config.guess" # Please don't use this var. +ac_config_sub="$SHELL $ac_aux_dir/config.sub" # Please don't use this var. +ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var. + + +# Find a good install program. We prefer a C program (faster), +# so one script is as good as another. But avoid the broken or +# incompatible versions: +# SysV /etc/install, /usr/sbin/install +# SunOS /usr/etc/install +# IRIX /sbin/install +# AIX /bin/install +# AmigaOS /C/install, which installs bootblocks on floppy discs +# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag +# AFS /usr/afsws/bin/install, which mishandles nonexistent args +# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" +# OS/2's system install, which has a completely different semantic +# ./install, which can be erroneously created by make from ./install.sh. +# Reject install programs that cannot install multiple files. +{ $as_echo "$as_me:$LINENO: checking for a BSD-compatible install" >&5 +$as_echo_n "checking for a BSD-compatible install... " >&6; } +if test -z "$INSTALL"; then +if test "${ac_cv_path_install+set}" = set; then + $as_echo_n "(cached) " >&6 +else + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + # Account for people who put trailing slashes in PATH elements. +case $as_dir/ in + ./ | .// | /cC/* | \ + /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \ + ?:\\/os2\\/install\\/* | ?:\\/OS2\\/INSTALL\\/* | \ + /usr/ucb/* ) ;; + *) + # OSF1 and SCO ODT 3.0 have their own names for install. + # Don't use installbsd from OSF since it installs stuff as root + # by default. + for ac_prog in ginstall scoinst install; do + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; }; then + if test $ac_prog = install && + grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then + # AIX install. It has an incompatible calling convention. + : + elif test $ac_prog = install && + grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then + # program-specific install script used by HP pwplus--don't use. + : + else + rm -rf conftest.one conftest.two conftest.dir + echo one > conftest.one + echo two > conftest.two + mkdir conftest.dir + if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" && + test -s conftest.one && test -s conftest.two && + test -s conftest.dir/conftest.one && + test -s conftest.dir/conftest.two + then + ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c" + break 3 + fi + fi + fi + done + done + ;; +esac + +done +IFS=$as_save_IFS + +rm -rf conftest.one conftest.two conftest.dir + +fi + if test "${ac_cv_path_install+set}" = set; then + INSTALL=$ac_cv_path_install + else + # As a last resort, use the slow shell script. Don't cache a + # value for INSTALL within a source directory, because that will + # break other packages using the cache if that directory is + # removed, or if the value is a relative name. + INSTALL=$ac_install_sh + fi +fi +{ $as_echo "$as_me:$LINENO: result: $INSTALL" >&5 +$as_echo "$INSTALL" >&6; } + +# Use test -z because SunOS4 sh mishandles braces in ${var-val}. +# It thinks the first close brace ends the variable substitution. +test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' + +test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}' + +test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' + +{ $as_echo "$as_me:$LINENO: checking whether build environment is sane" >&5 +$as_echo_n "checking whether build environment is sane... " >&6; } +# Just in case +sleep 1 +echo timestamp > conftest.file +# Do `set' in a subshell so we don't clobber the current shell's +# arguments. Must try -L first in case configure is actually a +# symlink; some systems play weird games with the mod time of symlinks +# (eg FreeBSD returns the mod time of the symlink's containing +# directory). +if ( + set X `ls -Lt $srcdir/configure conftest.file 2> /dev/null` + if test "$*" = "X"; then + # -L didn't work. + set X `ls -t $srcdir/configure conftest.file` + fi + rm -f conftest.file + if test "$*" != "X $srcdir/configure conftest.file" \ + && test "$*" != "X conftest.file $srcdir/configure"; then + + # If neither matched, then we have a broken ls. This can happen + # if, for instance, CONFIG_SHELL is bash and it inherits a + # broken ls alias from the environment. This has actually + # happened. Such a system could not be considered "sane". + { { $as_echo "$as_me:$LINENO: error: ls -t appears to fail. Make sure there is not a broken +alias in your environment" >&5 +$as_echo "$as_me: error: ls -t appears to fail. Make sure there is not a broken +alias in your environment" >&2;} + { (exit 1); exit 1; }; } + fi + + test "$2" = conftest.file + ) +then + # Ok. + : +else + { { $as_echo "$as_me:$LINENO: error: newly created file is older than distributed files! +Check your system clock" >&5 +$as_echo "$as_me: error: newly created file is older than distributed files! +Check your system clock" >&2;} + { (exit 1); exit 1; }; } +fi +{ $as_echo "$as_me:$LINENO: result: yes" >&5 +$as_echo "yes" >&6; } +test "$program_prefix" != NONE && + program_transform_name="s&^&$program_prefix&;$program_transform_name" +# Use a double $ so make ignores it. +test "$program_suffix" != NONE && + program_transform_name="s&\$&$program_suffix&;$program_transform_name" +# Double any \ or $. +# By default was `s,x,x', remove it if useless. +ac_script='s/[\\$]/&&/g;s/;s,x,x,$//' +program_transform_name=`$as_echo "$program_transform_name" | sed "$ac_script"` + +# expand $ac_aux_dir to an absolute path +am_aux_dir=`cd $ac_aux_dir && pwd` + +test x"${MISSING+set}" = xset || MISSING="\${SHELL} $am_aux_dir/missing" +# Use eval to expand $SHELL +if eval "$MISSING --run true"; then + am_missing_run="$MISSING --run " +else + am_missing_run= + { $as_echo "$as_me:$LINENO: WARNING: \`missing' script is too old or missing" >&5 +$as_echo "$as_me: WARNING: \`missing' script is too old or missing" >&2;} +fi + +{ $as_echo "$as_me:$LINENO: checking for a thread-safe mkdir -p" >&5 +$as_echo_n "checking for a thread-safe mkdir -p... " >&6; } +if test -z "$MKDIR_P"; then + if test "${ac_cv_path_mkdir+set}" = set; then + $as_echo_n "(cached) " >&6 +else + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH$PATH_SEPARATOR/opt/sfw/bin +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in mkdir gmkdir; do + for ac_exec_ext in '' $ac_executable_extensions; do + { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; } || continue + case `"$as_dir/$ac_prog$ac_exec_ext" --version 2>&1` in #( + 'mkdir (GNU coreutils) '* | \ + 'mkdir (coreutils) '* | \ + 'mkdir (fileutils) '4.1*) + ac_cv_path_mkdir=$as_dir/$ac_prog$ac_exec_ext + break 3;; + esac + done + done +done +IFS=$as_save_IFS + +fi + + if test "${ac_cv_path_mkdir+set}" = set; then + MKDIR_P="$ac_cv_path_mkdir -p" + else + # As a last resort, use the slow shell script. Don't cache a + # value for MKDIR_P within a source directory, because that will + # break other packages using the cache if that directory is + # removed, or if the value is a relative name. + test -d ./--version && rmdir ./--version + MKDIR_P="$ac_install_sh -d" + fi +fi +{ $as_echo "$as_me:$LINENO: result: $MKDIR_P" >&5 +$as_echo "$MKDIR_P" >&6; } + +mkdir_p="$MKDIR_P" +case $mkdir_p in + [\\/$]* | ?:[\\/]*) ;; + */*) mkdir_p="\$(top_builddir)/$mkdir_p" ;; +esac + +for ac_prog in gawk mawk nawk awk +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_AWK+set}" = set; then + $as_echo_n "(cached) " >&6 +else + if test -n "$AWK"; then + ac_cv_prog_AWK="$AWK" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_AWK="$ac_prog" + $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done +IFS=$as_save_IFS + +fi +fi +AWK=$ac_cv_prog_AWK +if test -n "$AWK"; then + { $as_echo "$as_me:$LINENO: result: $AWK" >&5 +$as_echo "$AWK" >&6; } +else + { $as_echo "$as_me:$LINENO: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$AWK" && break +done + +{ $as_echo "$as_me:$LINENO: checking whether ${MAKE-make} sets \$(MAKE)" >&5 +$as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; } +set x ${MAKE-make} +ac_make=`$as_echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'` +if { as_var=ac_cv_prog_make_${ac_make}_set; eval "test \"\${$as_var+set}\" = set"; }; then + $as_echo_n "(cached) " >&6 +else + cat >conftest.make <<\_ACEOF +SHELL = /bin/sh +all: + @echo '@@@%%%=$(MAKE)=@@@%%%' +_ACEOF +# GNU make sometimes prints "make[1]: Entering...", which would confuse us. +case `${MAKE-make} -f conftest.make 2>/dev/null` in + *@@@%%%=?*=@@@%%%*) + eval ac_cv_prog_make_${ac_make}_set=yes;; + *) + eval ac_cv_prog_make_${ac_make}_set=no;; +esac +rm -f conftest.make +fi +if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then + { $as_echo "$as_me:$LINENO: result: yes" >&5 +$as_echo "yes" >&6; } + SET_MAKE= +else + { $as_echo "$as_me:$LINENO: result: no" >&5 +$as_echo "no" >&6; } + SET_MAKE="MAKE=${MAKE-make}" +fi + +rm -rf .tst 2>/dev/null +mkdir .tst 2>/dev/null +if test -d .tst; then + am__leading_dot=. +else + am__leading_dot=_ +fi +rmdir .tst 2>/dev/null + +if test "`cd $srcdir && pwd`" != "`pwd`"; then + # Use -I$(srcdir) only when $(srcdir) != ., so that make's output + # is not polluted with repeated "-I." + am__isrc=' -I$(srcdir)' + # test to see if srcdir already configured + if test -f $srcdir/config.status; then + { { $as_echo "$as_me:$LINENO: error: source directory already configured; run \"make distclean\" there first" >&5 +$as_echo "$as_me: error: source directory already configured; run \"make distclean\" there first" >&2;} + { (exit 1); exit 1; }; } + fi +fi + +# test whether we have cygpath +if test -z "$CYGPATH_W"; then + if (cygpath --version) >/dev/null 2>/dev/null; then + CYGPATH_W='cygpath -w' + else + CYGPATH_W=echo + fi +fi + + +# Define the identity of the package. + PACKAGE="pwdutils" + VERSION=3.2.19 + + +cat >>confdefs.h <<_ACEOF +#define PACKAGE "$PACKAGE" +_ACEOF + + +cat >>confdefs.h <<_ACEOF +#define VERSION "$VERSION" +_ACEOF + +# Some tools Automake needs. + +ACLOCAL=${ACLOCAL-"${am_missing_run}aclocal-${am__api_version}"} + + +AUTOCONF=${AUTOCONF-"${am_missing_run}autoconf"} + + +AUTOMAKE=${AUTOMAKE-"${am_missing_run}automake-${am__api_version}"} + + +AUTOHEADER=${AUTOHEADER-"${am_missing_run}autoheader"} + + +MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"} + +install_sh=${install_sh-"\$(SHELL) $am_aux_dir/install-sh"} + +# Installed binaries are usually stripped using `strip' when the user +# run `make install-strip'. However `strip' might not be the right +# tool to use in cross-compilation environments, therefore Automake +# will honor the `STRIP' environment variable to overrule this program. +if test "$cross_compiling" != no; then + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. +set dummy ${ac_tool_prefix}strip; ac_word=$2 +{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_STRIP+set}" = set; then + $as_echo_n "(cached) " >&6 +else + if test -n "$STRIP"; then + ac_cv_prog_STRIP="$STRIP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_STRIP="${ac_tool_prefix}strip" + $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done +IFS=$as_save_IFS + +fi +fi +STRIP=$ac_cv_prog_STRIP +if test -n "$STRIP"; then + { $as_echo "$as_me:$LINENO: result: $STRIP" >&5 +$as_echo "$STRIP" >&6; } +else + { $as_echo "$as_me:$LINENO: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_STRIP"; then + ac_ct_STRIP=$STRIP + # Extract the first word of "strip", so it can be a program name with args. +set dummy strip; ac_word=$2 +{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_ac_ct_STRIP+set}" = set; then + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_STRIP"; then + ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_STRIP="strip" + $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done +IFS=$as_save_IFS + +fi +fi +ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP +if test -n "$ac_ct_STRIP"; then + { $as_echo "$as_me:$LINENO: result: $ac_ct_STRIP" >&5 +$as_echo "$ac_ct_STRIP" >&6; } +else + { $as_echo "$as_me:$LINENO: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_STRIP" = x; then + STRIP=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:$LINENO: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + STRIP=$ac_ct_STRIP + fi +else + STRIP="$ac_cv_prog_STRIP" +fi + +fi +INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" + +# We need awk for the "check" target. The system "awk" is bad on +# some platforms. +# Always define AMTAR for backward compatibility. + +AMTAR=${AMTAR-"${am_missing_run}tar"} + +am__tar='${AMTAR} chof - "$$tardir"'; am__untar='${AMTAR} xf -' + + + + + +ac_config_headers="$ac_config_headers config.h" + + +# Make sure we can run config.sub. +$SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 || + { { $as_echo "$as_me:$LINENO: error: cannot run $SHELL $ac_aux_dir/config.sub" >&5 +$as_echo "$as_me: error: cannot run $SHELL $ac_aux_dir/config.sub" >&2;} + { (exit 1); exit 1; }; } + +{ $as_echo "$as_me:$LINENO: checking build system type" >&5 +$as_echo_n "checking build system type... " >&6; } +if test "${ac_cv_build+set}" = set; then + $as_echo_n "(cached) " >&6 +else + ac_build_alias=$build_alias +test "x$ac_build_alias" = x && + ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"` +test "x$ac_build_alias" = x && + { { $as_echo "$as_me:$LINENO: error: cannot guess build type; you must specify one" >&5 +$as_echo "$as_me: error: cannot guess build type; you must specify one" >&2;} + { (exit 1); exit 1; }; } +ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` || + { { $as_echo "$as_me:$LINENO: error: $SHELL $ac_aux_dir/config.sub $ac_build_alias failed" >&5 +$as_echo "$as_me: error: $SHELL $ac_aux_dir/config.sub $ac_build_alias failed" >&2;} + { (exit 1); exit 1; }; } + +fi +{ $as_echo "$as_me:$LINENO: result: $ac_cv_build" >&5 +$as_echo "$ac_cv_build" >&6; } +case $ac_cv_build in +*-*-*) ;; +*) { { $as_echo "$as_me:$LINENO: error: invalid value of canonical build" >&5 +$as_echo "$as_me: error: invalid value of canonical build" >&2;} + { (exit 1); exit 1; }; };; +esac +build=$ac_cv_build +ac_save_IFS=$IFS; IFS='-' +set x $ac_cv_build +shift +build_cpu=$1 +build_vendor=$2 +shift; shift +# Remember, the first character of IFS is used to create $*, +# except with old shells: +build_os=$* +IFS=$ac_save_IFS +case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac + + +{ $as_echo "$as_me:$LINENO: checking host system type" >&5 +$as_echo_n "checking host system type... " >&6; } +if test "${ac_cv_host+set}" = set; then + $as_echo_n "(cached) " >&6 +else + if test "x$host_alias" = x; then + ac_cv_host=$ac_cv_build +else + ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` || + { { $as_echo "$as_me:$LINENO: error: $SHELL $ac_aux_dir/config.sub $host_alias failed" >&5 +$as_echo "$as_me: error: $SHELL $ac_aux_dir/config.sub $host_alias failed" >&2;} + { (exit 1); exit 1; }; } +fi + +fi +{ $as_echo "$as_me:$LINENO: result: $ac_cv_host" >&5 +$as_echo "$ac_cv_host" >&6; } +case $ac_cv_host in +*-*-*) ;; +*) { { $as_echo "$as_me:$LINENO: error: invalid value of canonical host" >&5 +$as_echo "$as_me: error: invalid value of canonical host" >&2;} + { (exit 1); exit 1; }; };; +esac +host=$ac_cv_host +ac_save_IFS=$IFS; IFS='-' +set x $ac_cv_host +shift +host_cpu=$1 +host_vendor=$2 +shift; shift +# Remember, the first character of IFS is used to create $*, +# except with old shells: +host_os=$* +IFS=$ac_save_IFS +case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac + + + + + + +test "${prefix}" = "NONE" && prefix="/usr" +test "${exec_prefix}" = "NONE" && exec_prefix="/usr" + +if test ${prefix} = '/usr' +then + if test ${sysconfdir} = '${prefix}/etc' + then + sysconfdir="/etc" + fi + if test ${mandir} = '${prefix}/man' + then + mandir='${prefix}/share/man' + fi +fi +if test ${exec_prefix} = '/usr' +then + if test ${libdir} = '${exec_prefix}/lib' + then + case "`uname -m`" in + x86_64|ppc64|s390x|sparc64) + libdir="${exec_prefix}/lib64" ;; + *) + libdir="${exec_prefix}/lib" ;; + esac + fi + +fi + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. +set dummy ${ac_tool_prefix}gcc; ac_word=$2 +{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_CC+set}" = set; then + $as_echo_n "(cached) " >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_CC="${ac_tool_prefix}gcc" + $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done +IFS=$as_save_IFS + +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { $as_echo "$as_me:$LINENO: result: $CC" >&5 +$as_echo "$CC" >&6; } +else + { $as_echo "$as_me:$LINENO: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_CC"; then + ac_ct_CC=$CC + # Extract the first word of "gcc", so it can be a program name with args. +set dummy gcc; ac_word=$2 +{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_ac_ct_CC+set}" = set; then + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_CC"; then + ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_CC="gcc" + $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done +IFS=$as_save_IFS + +fi +fi +ac_ct_CC=$ac_cv_prog_ac_ct_CC +if test -n "$ac_ct_CC"; then + { $as_echo "$as_me:$LINENO: result: $ac_ct_CC" >&5 +$as_echo "$ac_ct_CC" >&6; } +else + { $as_echo "$as_me:$LINENO: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_CC" = x; then + CC="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:$LINENO: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + CC=$ac_ct_CC + fi +else + CC="$ac_cv_prog_CC" +fi + +if test -z "$CC"; then + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. +set dummy ${ac_tool_prefix}cc; ac_word=$2 +{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_CC+set}" = set; then + $as_echo_n "(cached) " >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_CC="${ac_tool_prefix}cc" + $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done +IFS=$as_save_IFS + +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { $as_echo "$as_me:$LINENO: result: $CC" >&5 +$as_echo "$CC" >&6; } +else + { $as_echo "$as_me:$LINENO: result: no" >&5 +$as_echo "no" >&6; } +fi + + + fi +fi +if test -z "$CC"; then + # Extract the first word of "cc", so it can be a program name with args. +set dummy cc; ac_word=$2 +{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_CC+set}" = set; then + $as_echo_n "(cached) " >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else + ac_prog_rejected=no +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then + ac_prog_rejected=yes + continue + fi + ac_cv_prog_CC="cc" + $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done +IFS=$as_save_IFS + +if test $ac_prog_rejected = yes; then + # We found a bogon in the path, so make sure we never use it. + set dummy $ac_cv_prog_CC + shift + if test $# != 0; then + # We chose a different compiler from the bogus one. + # However, it has the same basename, so the bogon will be chosen + # first if we set CC to just the basename; use the full file name. + shift + ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@" + fi +fi +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { $as_echo "$as_me:$LINENO: result: $CC" >&5 +$as_echo "$CC" >&6; } +else + { $as_echo "$as_me:$LINENO: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$CC"; then + if test -n "$ac_tool_prefix"; then + for ac_prog in cl.exe + do + # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. +set dummy $ac_tool_prefix$ac_prog; ac_word=$2 +{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_CC+set}" = set; then + $as_echo_n "(cached) " >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_CC="$ac_tool_prefix$ac_prog" + $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done +IFS=$as_save_IFS + +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { $as_echo "$as_me:$LINENO: result: $CC" >&5 +$as_echo "$CC" >&6; } +else + { $as_echo "$as_me:$LINENO: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$CC" && break + done +fi +if test -z "$CC"; then + ac_ct_CC=$CC + for ac_prog in cl.exe +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_ac_ct_CC+set}" = set; then + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_CC"; then + ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_CC="$ac_prog" + $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done +IFS=$as_save_IFS + +fi +fi +ac_ct_CC=$ac_cv_prog_ac_ct_CC +if test -n "$ac_ct_CC"; then + { $as_echo "$as_me:$LINENO: result: $ac_ct_CC" >&5 +$as_echo "$ac_ct_CC" >&6; } +else + { $as_echo "$as_me:$LINENO: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$ac_ct_CC" && break +done + + if test "x$ac_ct_CC" = x; then + CC="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:$LINENO: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + CC=$ac_ct_CC + fi +fi + +fi + + +test -z "$CC" && { { $as_echo "$as_me:$LINENO: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +{ { $as_echo "$as_me:$LINENO: error: no acceptable C compiler found in \$PATH +See \`config.log' for more details." >&5 +$as_echo "$as_me: error: no acceptable C compiler found in \$PATH +See \`config.log' for more details." >&2;} + { (exit 1); exit 1; }; }; } + +# Provide some information about the compiler. +$as_echo "$as_me:$LINENO: checking for C compiler version" >&5 +set X $ac_compile +ac_compiler=$2 +{ (ac_try="$ac_compiler --version >&5" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compiler --version >&5") 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } +{ (ac_try="$ac_compiler -v >&5" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compiler -v >&5") 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } +{ (ac_try="$ac_compiler -V >&5" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compiler -V >&5") 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } + +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +ac_clean_files_save=$ac_clean_files +ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out" +# Try to create an executable without -o first, disregard a.out. +# It will help us diagnose broken compilers, and finding out an intuition +# of exeext. +{ $as_echo "$as_me:$LINENO: checking for C compiler default output file name" >&5 +$as_echo_n "checking for C compiler default output file name... " >&6; } +ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` + +# The possible output files: +ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*" + +ac_rmfiles= +for ac_file in $ac_files +do + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; + * ) ac_rmfiles="$ac_rmfiles $ac_file";; + esac +done +rm -f $ac_rmfiles + +if { (ac_try="$ac_link_default" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_link_default") 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; then + # Autoconf-2.13 could set the ac_cv_exeext variable to `no'. +# So ignore a value of `no', otherwise this would lead to `EXEEXT = no' +# in a Makefile. We should not override ac_cv_exeext if it was cached, +# so that the user can short-circuit this test for compilers unknown to +# Autoconf. +for ac_file in $ac_files '' +do + test -f "$ac_file" || continue + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) + ;; + [ab].out ) + # We found the default executable, but exeext='' is most + # certainly right. + break;; + *.* ) + if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no; + then :; else + ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` + fi + # We set ac_cv_exeext here because the later test for it is not + # safe: cross compilers may not add the suffix if given an `-o' + # argument, so we may need to know it at that point already. + # Even if this section looks crufty: it has the advantage of + # actually working. + break;; + * ) + break;; + esac +done +test "$ac_cv_exeext" = no && ac_cv_exeext= + +else + ac_file='' +fi + +{ $as_echo "$as_me:$LINENO: result: $ac_file" >&5 +$as_echo "$ac_file" >&6; } +if test -z "$ac_file"; then + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +{ { $as_echo "$as_me:$LINENO: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +{ { $as_echo "$as_me:$LINENO: error: C compiler cannot create executables +See \`config.log' for more details." >&5 +$as_echo "$as_me: error: C compiler cannot create executables +See \`config.log' for more details." >&2;} + { (exit 77); exit 77; }; }; } +fi + +ac_exeext=$ac_cv_exeext + +# Check that the compiler produces executables we can run. If not, either +# the compiler is broken, or we cross compile. +{ $as_echo "$as_me:$LINENO: checking whether the C compiler works" >&5 +$as_echo_n "checking whether the C compiler works... " >&6; } +# FIXME: These cross compiler hacks should be removed for Autoconf 3.0 +# If not cross compiling, check that we can run a simple program. +if test "$cross_compiling" != yes; then + if { ac_try='./$ac_file' + { (case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + cross_compiling=no + else + if test "$cross_compiling" = maybe; then + cross_compiling=yes + else + { { $as_echo "$as_me:$LINENO: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +{ { $as_echo "$as_me:$LINENO: error: cannot run C compiled programs. +If you meant to cross compile, use \`--host'. +See \`config.log' for more details." >&5 +$as_echo "$as_me: error: cannot run C compiled programs. +If you meant to cross compile, use \`--host'. +See \`config.log' for more details." >&2;} + { (exit 1); exit 1; }; }; } + fi + fi +fi +{ $as_echo "$as_me:$LINENO: result: yes" >&5 +$as_echo "yes" >&6; } + +rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out +ac_clean_files=$ac_clean_files_save +# Check that the compiler produces executables we can run. If not, either +# the compiler is broken, or we cross compile. +{ $as_echo "$as_me:$LINENO: checking whether we are cross compiling" >&5 +$as_echo_n "checking whether we are cross compiling... " >&6; } +{ $as_echo "$as_me:$LINENO: result: $cross_compiling" >&5 +$as_echo "$cross_compiling" >&6; } + +{ $as_echo "$as_me:$LINENO: checking for suffix of executables" >&5 +$as_echo_n "checking for suffix of executables... " >&6; } +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_link") 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; then + # If both `conftest.exe' and `conftest' are `present' (well, observable) +# catch `conftest.exe'. For instance with Cygwin, `ls conftest' will +# work properly (i.e., refer to `conftest.exe'), while it won't with +# `rm'. +for ac_file in conftest.exe conftest conftest.*; do + test -f "$ac_file" || continue + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; + *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` + break;; + * ) break;; + esac +done +else + { { $as_echo "$as_me:$LINENO: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +{ { $as_echo "$as_me:$LINENO: error: cannot compute suffix of executables: cannot compile and link +See \`config.log' for more details." >&5 +$as_echo "$as_me: error: cannot compute suffix of executables: cannot compile and link +See \`config.log' for more details." >&2;} + { (exit 1); exit 1; }; }; } +fi + +rm -f conftest$ac_cv_exeext +{ $as_echo "$as_me:$LINENO: result: $ac_cv_exeext" >&5 +$as_echo "$ac_cv_exeext" >&6; } + +rm -f conftest.$ac_ext +EXEEXT=$ac_cv_exeext +ac_exeext=$EXEEXT +{ $as_echo "$as_me:$LINENO: checking for suffix of object files" >&5 +$as_echo_n "checking for suffix of object files... " >&6; } +if test "${ac_cv_objext+set}" = set; then + $as_echo_n "(cached) " >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.o conftest.obj +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; then + for ac_file in conftest.o conftest.obj conftest.*; do + test -f "$ac_file" || continue; + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;; + *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` + break;; + esac +done +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +{ { $as_echo "$as_me:$LINENO: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +{ { $as_echo "$as_me:$LINENO: error: cannot compute suffix of object files: cannot compile +See \`config.log' for more details." >&5 +$as_echo "$as_me: error: cannot compute suffix of object files: cannot compile +See \`config.log' for more details." >&2;} + { (exit 1); exit 1; }; }; } +fi + +rm -f conftest.$ac_cv_objext conftest.$ac_ext +fi +{ $as_echo "$as_me:$LINENO: result: $ac_cv_objext" >&5 +$as_echo "$ac_cv_objext" >&6; } +OBJEXT=$ac_cv_objext +ac_objext=$OBJEXT +{ $as_echo "$as_me:$LINENO: checking whether we are using the GNU C compiler" >&5 +$as_echo_n "checking whether we are using the GNU C compiler... " >&6; } +if test "${ac_cv_c_compiler_gnu+set}" = set; then + $as_echo_n "(cached) " >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +int +main () +{ +#ifndef __GNUC__ + choke me +#endif + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_compiler_gnu=yes +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_compiler_gnu=no +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +ac_cv_c_compiler_gnu=$ac_compiler_gnu + +fi +{ $as_echo "$as_me:$LINENO: result: $ac_cv_c_compiler_gnu" >&5 +$as_echo "$ac_cv_c_compiler_gnu" >&6; } +if test $ac_compiler_gnu = yes; then + GCC=yes +else + GCC= +fi +ac_test_CFLAGS=${CFLAGS+set} +ac_save_CFLAGS=$CFLAGS +{ $as_echo "$as_me:$LINENO: checking whether $CC accepts -g" >&5 +$as_echo_n "checking whether $CC accepts -g... " >&6; } +if test "${ac_cv_prog_cc_g+set}" = set; then + $as_echo_n "(cached) " >&6 +else + ac_save_c_werror_flag=$ac_c_werror_flag + ac_c_werror_flag=yes + ac_cv_prog_cc_g=no + CFLAGS="-g" + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_cv_prog_cc_g=yes +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + CFLAGS="" + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + : +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_c_werror_flag=$ac_save_c_werror_flag + CFLAGS="-g" + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_cv_prog_cc_g=yes +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + ac_c_werror_flag=$ac_save_c_werror_flag +fi +{ $as_echo "$as_me:$LINENO: result: $ac_cv_prog_cc_g" >&5 +$as_echo "$ac_cv_prog_cc_g" >&6; } +if test "$ac_test_CFLAGS" = set; then + CFLAGS=$ac_save_CFLAGS +elif test $ac_cv_prog_cc_g = yes; then + if test "$GCC" = yes; then + CFLAGS="-g -O2" + else + CFLAGS="-g" + fi +else + if test "$GCC" = yes; then + CFLAGS="-O2" + else + CFLAGS= + fi +fi +{ $as_echo "$as_me:$LINENO: checking for $CC option to accept ISO C89" >&5 +$as_echo_n "checking for $CC option to accept ISO C89... " >&6; } +if test "${ac_cv_prog_cc_c89+set}" = set; then + $as_echo_n "(cached) " >&6 +else + ac_cv_prog_cc_c89=no +ac_save_CC=$CC +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include +#include +#include +#include +/* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ +struct buf { int x; }; +FILE * (*rcsopen) (struct buf *, struct stat *, int); +static char *e (p, i) + char **p; + int i; +{ + return p[i]; +} +static char *f (char * (*g) (char **, int), char **p, ...) +{ + char *s; + va_list v; + va_start (v,p); + s = g (p, va_arg (v,int)); + va_end (v); + return s; +} + +/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has + function prototypes and stuff, but not '\xHH' hex character constants. + These don't provoke an error unfortunately, instead are silently treated + as 'x'. The following induces an error, until -std is added to get + proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an + array size at least. It's necessary to write '\x00'==0 to get something + that's true only with -std. */ +int osf4_cc_array ['\x00' == 0 ? 1 : -1]; + +/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters + inside strings and character constants. */ +#define FOO(x) 'x' +int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1]; + +int test (int i, double x); +struct s1 {int (*f) (int a);}; +struct s2 {int (*f) (double a);}; +int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); +int argc; +char **argv; +int +main () +{ +return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; + ; + return 0; +} +_ACEOF +for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ + -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" +do + CC="$ac_save_CC $ac_arg" + rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_cv_prog_cc_c89=$ac_arg +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + +fi + +rm -f core conftest.err conftest.$ac_objext + test "x$ac_cv_prog_cc_c89" != "xno" && break +done +rm -f conftest.$ac_ext +CC=$ac_save_CC + +fi +# AC_CACHE_VAL +case "x$ac_cv_prog_cc_c89" in + x) + { $as_echo "$as_me:$LINENO: result: none needed" >&5 +$as_echo "none needed" >&6; } ;; + xno) + { $as_echo "$as_me:$LINENO: result: unsupported" >&5 +$as_echo "unsupported" >&6; } ;; + *) + CC="$CC $ac_cv_prog_cc_c89" + { $as_echo "$as_me:$LINENO: result: $ac_cv_prog_cc_c89" >&5 +$as_echo "$ac_cv_prog_cc_c89" >&6; } ;; +esac + + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu +DEPDIR="${am__leading_dot}deps" + +ac_config_commands="$ac_config_commands depfiles" + + +am_make=${MAKE-make} +cat > confinc << 'END' +am__doit: + @echo done +.PHONY: am__doit +END +# If we don't find an include directive, just comment out the code. +{ $as_echo "$as_me:$LINENO: checking for style of include used by $am_make" >&5 +$as_echo_n "checking for style of include used by $am_make... " >&6; } +am__include="#" +am__quote= +_am_result=none +# First try GNU make style include. +echo "include confinc" > confmf +# We grep out `Entering directory' and `Leaving directory' +# messages which can occur if `w' ends up in MAKEFLAGS. +# In particular we don't look at `^make:' because GNU make might +# be invoked under some other name (usually "gmake"), in which +# case it prints its new name instead of `make'. +if test "`$am_make -s -f confmf 2> /dev/null | grep -v 'ing directory'`" = "done"; then + am__include=include + am__quote= + _am_result=GNU +fi +# Now try BSD make style include. +if test "$am__include" = "#"; then + echo '.include "confinc"' > confmf + if test "`$am_make -s -f confmf 2> /dev/null`" = "done"; then + am__include=.include + am__quote="\"" + _am_result=BSD + fi +fi + + +{ $as_echo "$as_me:$LINENO: result: $_am_result" >&5 +$as_echo "$_am_result" >&6; } +rm -f confinc confmf + +# Check whether --enable-dependency-tracking was given. +if test "${enable_dependency_tracking+set}" = set; then + enableval=$enable_dependency_tracking; +fi + +if test "x$enable_dependency_tracking" != xno; then + am_depcomp="$ac_aux_dir/depcomp" + AMDEPBACKSLASH='\' +fi + if test "x$enable_dependency_tracking" != xno; then + AMDEP_TRUE= + AMDEP_FALSE='#' +else + AMDEP_TRUE='#' + AMDEP_FALSE= +fi + + + +depcc="$CC" am_compiler_list= + +{ $as_echo "$as_me:$LINENO: checking dependency style of $depcc" >&5 +$as_echo_n "checking dependency style of $depcc... " >&6; } +if test "${am_cv_CC_dependencies_compiler_type+set}" = set; then + $as_echo_n "(cached) " >&6 +else + if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then + # We make a subdir and do the tests there. Otherwise we can end up + # making bogus files that we don't know about and never remove. For + # instance it was reported that on HP-UX the gcc test will end up + # making a dummy file named `D' -- because `-MD' means `put the output + # in D'. + mkdir conftest.dir + # Copy depcomp to subdir because otherwise we won't find it if we're + # using a relative directory. + cp "$am_depcomp" conftest.dir + cd conftest.dir + # We will build objects and dependencies in a subdirectory because + # it helps to detect inapplicable dependency modes. For instance + # both Tru64's cc and ICC support -MD to output dependencies as a + # side effect of compilation, but ICC will put the dependencies in + # the current directory while Tru64 will put them in the object + # directory. + mkdir sub + + am_cv_CC_dependencies_compiler_type=none + if test "$am_compiler_list" = ""; then + am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` + fi + for depmode in $am_compiler_list; do + # Setup a source with many dependencies, because some compilers + # like to wrap large dependency lists on column 80 (with \), and + # we should not choose a depcomp mode which is confused by this. + # + # We need to recreate these files for each test, as the compiler may + # overwrite some of them when testing with obscure command lines. + # This happens at least with the AIX C compiler. + : > sub/conftest.c + for i in 1 2 3 4 5 6; do + echo '#include "conftst'$i'.h"' >> sub/conftest.c + # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with + # Solaris 8's {/usr,}/bin/sh. + touch sub/conftst$i.h + done + echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf + + case $depmode in + nosideeffect) + # after this tag, mechanisms are not by side-effect, so they'll + # only be used when explicitly requested + if test "x$enable_dependency_tracking" = xyes; then + continue + else + break + fi + ;; + none) break ;; + esac + # We check with `-c' and `-o' for the sake of the "dashmstdout" + # mode. It turns out that the SunPro C++ compiler does not properly + # handle `-M -o', and we need to detect this. + if depmode=$depmode \ + source=sub/conftest.c object=sub/conftest.${OBJEXT-o} \ + depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ + $SHELL ./depcomp $depcc -c -o sub/conftest.${OBJEXT-o} sub/conftest.c \ + >/dev/null 2>conftest.err && + grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && + grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && + grep sub/conftest.${OBJEXT-o} sub/conftest.Po > /dev/null 2>&1 && + ${MAKE-make} -s -f confmf > /dev/null 2>&1; then + # icc doesn't choke on unknown options, it will just issue warnings + # or remarks (even with -Werror). So we grep stderr for any message + # that says an option was ignored or not supported. + # When given -MP, icc 7.0 and 7.1 complain thusly: + # icc: Command line warning: ignoring option '-M'; no argument required + # The diagnosis changed in icc 8.0: + # icc: Command line remark: option '-MP' not supported + if (grep 'ignoring option' conftest.err || + grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else + am_cv_CC_dependencies_compiler_type=$depmode + break + fi + fi + done + + cd .. + rm -rf conftest.dir +else + am_cv_CC_dependencies_compiler_type=none +fi + +fi +{ $as_echo "$as_me:$LINENO: result: $am_cv_CC_dependencies_compiler_type" >&5 +$as_echo "$am_cv_CC_dependencies_compiler_type" >&6; } +CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type + + if + test "x$enable_dependency_tracking" != xno \ + && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then + am__fastdepCC_TRUE= + am__fastdepCC_FALSE='#' +else + am__fastdepCC_TRUE='#' + am__fastdepCC_FALSE= +fi + + +if test "x$CC" != xcc; then + { $as_echo "$as_me:$LINENO: checking whether $CC and cc understand -c and -o together" >&5 +$as_echo_n "checking whether $CC and cc understand -c and -o together... " >&6; } +else + { $as_echo "$as_me:$LINENO: checking whether cc understands -c and -o together" >&5 +$as_echo_n "checking whether cc understands -c and -o together... " >&6; } +fi +set dummy $CC; ac_cc=`$as_echo "$2" | + sed 's/[^a-zA-Z0-9_]/_/g;s/^[0-9]/_/'` +if { as_var=ac_cv_prog_cc_${ac_cc}_c_o; eval "test \"\${$as_var+set}\" = set"; }; then + $as_echo_n "(cached) " >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +# Make sure it works both with $CC and with simple cc. +# We do the test twice because some compilers refuse to overwrite an +# existing .o file with -o, though they will create one. +ac_try='$CC -c conftest.$ac_ext -o conftest2.$ac_objext >&5' +rm -f conftest2.* +if { (case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + test -f conftest2.$ac_objext && { (case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; +then + eval ac_cv_prog_cc_${ac_cc}_c_o=yes + if test "x$CC" != xcc; then + # Test first that cc exists at all. + if { ac_try='cc -c conftest.$ac_ext >&5' + { (case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_try='cc -c conftest.$ac_ext -o conftest2.$ac_objext >&5' + rm -f conftest2.* + if { (case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + test -f conftest2.$ac_objext && { (case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; + then + # cc works too. + : + else + # cc exists but doesn't like -o. + eval ac_cv_prog_cc_${ac_cc}_c_o=no + fi + fi + fi +else + eval ac_cv_prog_cc_${ac_cc}_c_o=no +fi +rm -f core conftest* + +fi +if eval test \$ac_cv_prog_cc_${ac_cc}_c_o = yes; then + { $as_echo "$as_me:$LINENO: result: yes" >&5 +$as_echo "yes" >&6; } +else + { $as_echo "$as_me:$LINENO: result: no" >&5 +$as_echo "no" >&6; } + +cat >>confdefs.h <<\_ACEOF +#define NO_MINUS_C_MINUS_O 1 +_ACEOF + +fi + +# FIXME: we rely on the cache variable name because +# there is no other way. +set dummy $CC +ac_cc=`echo $2 | sed 's/[^a-zA-Z0-9_]/_/g;s/^[0-9]/_/'` +if eval "test \"`echo '$ac_cv_prog_cc_'${ac_cc}_c_o`\" != yes"; then + # Losing compiler, so override with the script. + # FIXME: It is wrong to rewrite CC. + # But if we don't then we get into trouble of one sort or another. + # A longer-term fix would be to have automake use am__CC in this case, + # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)" + CC="$am_aux_dir/compile $CC" +fi + + + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu +{ $as_echo "$as_me:$LINENO: checking how to run the C preprocessor" >&5 +$as_echo_n "checking how to run the C preprocessor... " >&6; } +# On Suns, sometimes $CPP names a directory. +if test -n "$CPP" && test -d "$CPP"; then + CPP= +fi +if test -z "$CPP"; then + if test "${ac_cv_prog_CPP+set}" = set; then + $as_echo_n "(cached) " >&6 +else + # Double quotes because CPP needs to be expanded + for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp" + do + ac_preproc_ok=false +for ac_c_preproc_warn_flag in '' yes +do + # Use a header file that comes with gcc, so configuring glibc + # with a fresh cross-compiler works. + # Prefer to if __STDC__ is defined, since + # exists even on freestanding compilers. + # On the NeXT, cc -E runs the code through the compiler's parser, + # not just through cpp. "Syntax error" is here to catch this case. + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#ifdef __STDC__ +# include +#else +# include +#endif + Syntax error +_ACEOF +if { (ac_try="$ac_cpp conftest.$ac_ext" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } >/dev/null && { + test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || + test ! -s conftest.err + }; then + : +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + # Broken: fails on valid input. +continue +fi + +rm -f conftest.err conftest.$ac_ext + + # OK, works on sane cases. Now check whether nonexistent headers + # can be detected and how. + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include +_ACEOF +if { (ac_try="$ac_cpp conftest.$ac_ext" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } >/dev/null && { + test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || + test ! -s conftest.err + }; then + # Broken: success on invalid input. +continue +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + # Passes both tests. +ac_preproc_ok=: +break +fi + +rm -f conftest.err conftest.$ac_ext + +done +# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. +rm -f conftest.err conftest.$ac_ext +if $ac_preproc_ok; then + break +fi + + done + ac_cv_prog_CPP=$CPP + +fi + CPP=$ac_cv_prog_CPP +else + ac_cv_prog_CPP=$CPP +fi +{ $as_echo "$as_me:$LINENO: result: $CPP" >&5 +$as_echo "$CPP" >&6; } +ac_preproc_ok=false +for ac_c_preproc_warn_flag in '' yes +do + # Use a header file that comes with gcc, so configuring glibc + # with a fresh cross-compiler works. + # Prefer to if __STDC__ is defined, since + # exists even on freestanding compilers. + # On the NeXT, cc -E runs the code through the compiler's parser, + # not just through cpp. "Syntax error" is here to catch this case. + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#ifdef __STDC__ +# include +#else +# include +#endif + Syntax error +_ACEOF +if { (ac_try="$ac_cpp conftest.$ac_ext" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } >/dev/null && { + test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || + test ! -s conftest.err + }; then + : +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + # Broken: fails on valid input. +continue +fi + +rm -f conftest.err conftest.$ac_ext + + # OK, works on sane cases. Now check whether nonexistent headers + # can be detected and how. + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include +_ACEOF +if { (ac_try="$ac_cpp conftest.$ac_ext" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } >/dev/null && { + test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || + test ! -s conftest.err + }; then + # Broken: success on invalid input. +continue +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + # Passes both tests. +ac_preproc_ok=: +break +fi + +rm -f conftest.err conftest.$ac_ext + +done +# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. +rm -f conftest.err conftest.$ac_ext +if $ac_preproc_ok; then + : +else + { { $as_echo "$as_me:$LINENO: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +{ { $as_echo "$as_me:$LINENO: error: C preprocessor \"$CPP\" fails sanity check +See \`config.log' for more details." >&5 +$as_echo "$as_me: error: C preprocessor \"$CPP\" fails sanity check +See \`config.log' for more details." >&2;} + { (exit 1); exit 1; }; }; } +fi + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + +{ $as_echo "$as_me:$LINENO: checking for grep that handles long lines and -e" >&5 +$as_echo_n "checking for grep that handles long lines and -e... " >&6; } +if test "${ac_cv_path_GREP+set}" = set; then + $as_echo_n "(cached) " >&6 +else + if test -z "$GREP"; then + ac_path_GREP_found=false + # Loop through the user's path and test for each of PROGNAME-LIST + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in grep ggrep; do + for ac_exec_ext in '' $ac_executable_extensions; do + ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext" + { test -f "$ac_path_GREP" && $as_test_x "$ac_path_GREP"; } || continue +# Check for GNU ac_path_GREP and select it if it is found. + # Check for GNU $ac_path_GREP +case `"$ac_path_GREP" --version 2>&1` in +*GNU*) + ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;; +*) + ac_count=0 + $as_echo_n 0123456789 >"conftest.in" + while : + do + cat "conftest.in" "conftest.in" >"conftest.tmp" + mv "conftest.tmp" "conftest.in" + cp "conftest.in" "conftest.nl" + $as_echo 'GREP' >> "conftest.nl" + "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break + diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break + ac_count=`expr $ac_count + 1` + if test $ac_count -gt ${ac_path_GREP_max-0}; then + # Best one so far, save it but keep looking for a better one + ac_cv_path_GREP="$ac_path_GREP" + ac_path_GREP_max=$ac_count + fi + # 10*(2^10) chars as input seems more than enough + test $ac_count -gt 10 && break + done + rm -f conftest.in conftest.tmp conftest.nl conftest.out;; +esac + + $ac_path_GREP_found && break 3 + done + done +done +IFS=$as_save_IFS + if test -z "$ac_cv_path_GREP"; then + { { $as_echo "$as_me:$LINENO: error: no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&5 +$as_echo "$as_me: error: no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&2;} + { (exit 1); exit 1; }; } + fi +else + ac_cv_path_GREP=$GREP +fi + +fi +{ $as_echo "$as_me:$LINENO: result: $ac_cv_path_GREP" >&5 +$as_echo "$ac_cv_path_GREP" >&6; } + GREP="$ac_cv_path_GREP" + + +{ $as_echo "$as_me:$LINENO: checking for egrep" >&5 +$as_echo_n "checking for egrep... " >&6; } +if test "${ac_cv_path_EGREP+set}" = set; then + $as_echo_n "(cached) " >&6 +else + if echo a | $GREP -E '(a|b)' >/dev/null 2>&1 + then ac_cv_path_EGREP="$GREP -E" + else + if test -z "$EGREP"; then + ac_path_EGREP_found=false + # Loop through the user's path and test for each of PROGNAME-LIST + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in egrep; do + for ac_exec_ext in '' $ac_executable_extensions; do + ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext" + { test -f "$ac_path_EGREP" && $as_test_x "$ac_path_EGREP"; } || continue +# Check for GNU ac_path_EGREP and select it if it is found. + # Check for GNU $ac_path_EGREP +case `"$ac_path_EGREP" --version 2>&1` in +*GNU*) + ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;; +*) + ac_count=0 + $as_echo_n 0123456789 >"conftest.in" + while : + do + cat "conftest.in" "conftest.in" >"conftest.tmp" + mv "conftest.tmp" "conftest.in" + cp "conftest.in" "conftest.nl" + $as_echo 'EGREP' >> "conftest.nl" + "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break + diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break + ac_count=`expr $ac_count + 1` + if test $ac_count -gt ${ac_path_EGREP_max-0}; then + # Best one so far, save it but keep looking for a better one + ac_cv_path_EGREP="$ac_path_EGREP" + ac_path_EGREP_max=$ac_count + fi + # 10*(2^10) chars as input seems more than enough + test $ac_count -gt 10 && break + done + rm -f conftest.in conftest.tmp conftest.nl conftest.out;; +esac + + $ac_path_EGREP_found && break 3 + done + done +done +IFS=$as_save_IFS + if test -z "$ac_cv_path_EGREP"; then + { { $as_echo "$as_me:$LINENO: error: no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&5 +$as_echo "$as_me: error: no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&2;} + { (exit 1); exit 1; }; } + fi +else + ac_cv_path_EGREP=$EGREP +fi + + fi +fi +{ $as_echo "$as_me:$LINENO: result: $ac_cv_path_EGREP" >&5 +$as_echo "$ac_cv_path_EGREP" >&6; } + EGREP="$ac_cv_path_EGREP" + + +{ $as_echo "$as_me:$LINENO: checking for ANSI C header files" >&5 +$as_echo_n "checking for ANSI C header files... " >&6; } +if test "${ac_cv_header_stdc+set}" = set; then + $as_echo_n "(cached) " >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include +#include +#include +#include + +int +main () +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_cv_header_stdc=yes +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_cv_header_stdc=no +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + +if test $ac_cv_header_stdc = yes; then + # SunOS 4.x string.h does not declare mem*, contrary to ANSI. + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "memchr" >/dev/null 2>&1; then + : +else + ac_cv_header_stdc=no +fi +rm -f conftest* + +fi + +if test $ac_cv_header_stdc = yes; then + # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "free" >/dev/null 2>&1; then + : +else + ac_cv_header_stdc=no +fi +rm -f conftest* + +fi + +if test $ac_cv_header_stdc = yes; then + # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. + if test "$cross_compiling" = yes; then + : +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include +#include +#if ((' ' & 0x0FF) == 0x020) +# define ISLOWER(c) ('a' <= (c) && (c) <= 'z') +# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) +#else +# define ISLOWER(c) \ + (('a' <= (c) && (c) <= 'i') \ + || ('j' <= (c) && (c) <= 'r') \ + || ('s' <= (c) && (c) <= 'z')) +# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) +#endif + +#define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) +int +main () +{ + int i; + for (i = 0; i < 256; i++) + if (XOR (islower (i), ISLOWER (i)) + || toupper (i) != TOUPPER (i)) + return 2; + return 0; +} +_ACEOF +rm -f conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_link") 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { ac_try='./conftest$ac_exeext' + { (case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + : +else + $as_echo "$as_me: program exited with status $ac_status" >&5 +$as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +( exit $ac_status ) +ac_cv_header_stdc=no +fi +rm -rf conftest.dSYM +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext +fi + + +fi +fi +{ $as_echo "$as_me:$LINENO: result: $ac_cv_header_stdc" >&5 +$as_echo "$ac_cv_header_stdc" >&6; } +if test $ac_cv_header_stdc = yes; then + +cat >>confdefs.h <<\_ACEOF +#define STDC_HEADERS 1 +_ACEOF + +fi + +# On IRIX 5.3, sys/types and inttypes.h are conflicting. + + + + + + + + + +for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \ + inttypes.h stdint.h unistd.h +do +as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` +{ $as_echo "$as_me:$LINENO: checking for $ac_header" >&5 +$as_echo_n "checking for $ac_header... " >&6; } +if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then + $as_echo_n "(cached) " >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default + +#include <$ac_header> +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + eval "$as_ac_Header=yes" +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + eval "$as_ac_Header=no" +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +ac_res=`eval 'as_val=${'$as_ac_Header'} + $as_echo "$as_val"'` + { $as_echo "$as_me:$LINENO: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } +as_val=`eval 'as_val=${'$as_ac_Header'} + $as_echo "$as_val"'` + if test "x$as_val" = x""yes; then + cat >>confdefs.h <<_ACEOF +#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 +_ACEOF + +fi + +done + + + + if test "${ac_cv_header_minix_config_h+set}" = set; then + { $as_echo "$as_me:$LINENO: checking for minix/config.h" >&5 +$as_echo_n "checking for minix/config.h... " >&6; } +if test "${ac_cv_header_minix_config_h+set}" = set; then + $as_echo_n "(cached) " >&6 +fi +{ $as_echo "$as_me:$LINENO: result: $ac_cv_header_minix_config_h" >&5 +$as_echo "$ac_cv_header_minix_config_h" >&6; } +else + # Is the header compilable? +{ $as_echo "$as_me:$LINENO: checking minix/config.h usability" >&5 +$as_echo_n "checking minix/config.h usability... " >&6; } +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default +#include +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_header_compiler=yes +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_header_compiler=no +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +{ $as_echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 +$as_echo "$ac_header_compiler" >&6; } + +# Is the header present? +{ $as_echo "$as_me:$LINENO: checking minix/config.h presence" >&5 +$as_echo_n "checking minix/config.h presence... " >&6; } +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include +_ACEOF +if { (ac_try="$ac_cpp conftest.$ac_ext" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } >/dev/null && { + test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || + test ! -s conftest.err + }; then + ac_header_preproc=yes +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_header_preproc=no +fi + +rm -f conftest.err conftest.$ac_ext +{ $as_echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 +$as_echo "$ac_header_preproc" >&6; } + +# So? What about this header? +case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in + yes:no: ) + { $as_echo "$as_me:$LINENO: WARNING: minix/config.h: accepted by the compiler, rejected by the preprocessor!" >&5 +$as_echo "$as_me: WARNING: minix/config.h: accepted by the compiler, rejected by the preprocessor!" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: minix/config.h: proceeding with the compiler's result" >&5 +$as_echo "$as_me: WARNING: minix/config.h: proceeding with the compiler's result" >&2;} + ac_header_preproc=yes + ;; + no:yes:* ) + { $as_echo "$as_me:$LINENO: WARNING: minix/config.h: present but cannot be compiled" >&5 +$as_echo "$as_me: WARNING: minix/config.h: present but cannot be compiled" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: minix/config.h: check for missing prerequisite headers?" >&5 +$as_echo "$as_me: WARNING: minix/config.h: check for missing prerequisite headers?" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: minix/config.h: see the Autoconf documentation" >&5 +$as_echo "$as_me: WARNING: minix/config.h: see the Autoconf documentation" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: minix/config.h: section \"Present But Cannot Be Compiled\"" >&5 +$as_echo "$as_me: WARNING: minix/config.h: section \"Present But Cannot Be Compiled\"" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: minix/config.h: proceeding with the preprocessor's result" >&5 +$as_echo "$as_me: WARNING: minix/config.h: proceeding with the preprocessor's result" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: minix/config.h: in the future, the compiler will take precedence" >&5 +$as_echo "$as_me: WARNING: minix/config.h: in the future, the compiler will take precedence" >&2;} + + ;; +esac +{ $as_echo "$as_me:$LINENO: checking for minix/config.h" >&5 +$as_echo_n "checking for minix/config.h... " >&6; } +if test "${ac_cv_header_minix_config_h+set}" = set; then + $as_echo_n "(cached) " >&6 +else + ac_cv_header_minix_config_h=$ac_header_preproc +fi +{ $as_echo "$as_me:$LINENO: result: $ac_cv_header_minix_config_h" >&5 +$as_echo "$ac_cv_header_minix_config_h" >&6; } + +fi +if test "x$ac_cv_header_minix_config_h" = x""yes; then + MINIX=yes +else + MINIX= +fi + + + if test "$MINIX" = yes; then + +cat >>confdefs.h <<\_ACEOF +#define _POSIX_SOURCE 1 +_ACEOF + + +cat >>confdefs.h <<\_ACEOF +#define _POSIX_1_SOURCE 2 +_ACEOF + + +cat >>confdefs.h <<\_ACEOF +#define _MINIX 1 +_ACEOF + + fi + + + + { $as_echo "$as_me:$LINENO: checking whether it is safe to define __EXTENSIONS__" >&5 +$as_echo_n "checking whether it is safe to define __EXTENSIONS__... " >&6; } +if test "${ac_cv_safe_to_define___extensions__+set}" = set; then + $as_echo_n "(cached) " >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +# define __EXTENSIONS__ 1 + $ac_includes_default +int +main () +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_cv_safe_to_define___extensions__=yes +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_cv_safe_to_define___extensions__=no +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +{ $as_echo "$as_me:$LINENO: result: $ac_cv_safe_to_define___extensions__" >&5 +$as_echo "$ac_cv_safe_to_define___extensions__" >&6; } + test $ac_cv_safe_to_define___extensions__ = yes && + cat >>confdefs.h <<\_ACEOF +#define __EXTENSIONS__ 1 +_ACEOF + + cat >>confdefs.h <<\_ACEOF +#define _ALL_SOURCE 1 +_ACEOF + + cat >>confdefs.h <<\_ACEOF +#define _GNU_SOURCE 1 +_ACEOF + + cat >>confdefs.h <<\_ACEOF +#define _POSIX_PTHREAD_SEMANTICS 1 +_ACEOF + + cat >>confdefs.h <<\_ACEOF +#define _TANDEM_SOURCE 1 +_ACEOF + + + + { $as_echo "$as_me:$LINENO: checking for strerror in -lcposix" >&5 +$as_echo_n "checking for strerror in -lcposix... " >&6; } +if test "${ac_cv_lib_cposix_strerror+set}" = set; then + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lcposix $LIBS" +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char strerror (); +int +main () +{ +return strerror (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + $as_test_x conftest$ac_exeext + }; then + ac_cv_lib_cposix_strerror=yes +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_cv_lib_cposix_strerror=no +fi + +rm -rf conftest.dSYM +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:$LINENO: result: $ac_cv_lib_cposix_strerror" >&5 +$as_echo "$ac_cv_lib_cposix_strerror" >&6; } +if test "x$ac_cv_lib_cposix_strerror" = x""yes; then + LIBS="$LIBS -lcposix" +fi + + + +# Find a good install program. We prefer a C program (faster), +# so one script is as good as another. But avoid the broken or +# incompatible versions: +# SysV /etc/install, /usr/sbin/install +# SunOS /usr/etc/install +# IRIX /sbin/install +# AIX /bin/install +# AmigaOS /C/install, which installs bootblocks on floppy discs +# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag +# AFS /usr/afsws/bin/install, which mishandles nonexistent args +# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" +# OS/2's system install, which has a completely different semantic +# ./install, which can be erroneously created by make from ./install.sh. +# Reject install programs that cannot install multiple files. +{ $as_echo "$as_me:$LINENO: checking for a BSD-compatible install" >&5 +$as_echo_n "checking for a BSD-compatible install... " >&6; } +if test -z "$INSTALL"; then +if test "${ac_cv_path_install+set}" = set; then + $as_echo_n "(cached) " >&6 +else + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + # Account for people who put trailing slashes in PATH elements. +case $as_dir/ in + ./ | .// | /cC/* | \ + /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \ + ?:\\/os2\\/install\\/* | ?:\\/OS2\\/INSTALL\\/* | \ + /usr/ucb/* ) ;; + *) + # OSF1 and SCO ODT 3.0 have their own names for install. + # Don't use installbsd from OSF since it installs stuff as root + # by default. + for ac_prog in ginstall scoinst install; do + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; }; then + if test $ac_prog = install && + grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then + # AIX install. It has an incompatible calling convention. + : + elif test $ac_prog = install && + grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then + # program-specific install script used by HP pwplus--don't use. + : + else + rm -rf conftest.one conftest.two conftest.dir + echo one > conftest.one + echo two > conftest.two + mkdir conftest.dir + if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" && + test -s conftest.one && test -s conftest.two && + test -s conftest.dir/conftest.one && + test -s conftest.dir/conftest.two + then + ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c" + break 3 + fi + fi + fi + done + done + ;; +esac + +done +IFS=$as_save_IFS + +rm -rf conftest.one conftest.two conftest.dir + +fi + if test "${ac_cv_path_install+set}" = set; then + INSTALL=$ac_cv_path_install + else + # As a last resort, use the slow shell script. Don't cache a + # value for INSTALL within a source directory, because that will + # break other packages using the cache if that directory is + # removed, or if the value is a relative name. + INSTALL=$ac_install_sh + fi +fi +{ $as_echo "$as_me:$LINENO: result: $INSTALL" >&5 +$as_echo "$INSTALL" >&6; } + +# Use test -z because SunOS4 sh mishandles braces in ${var-val}. +# It thinks the first close brace ends the variable substitution. +test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' + +test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}' + +test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' + +{ $as_echo "$as_me:$LINENO: checking whether ${MAKE-make} sets \$(MAKE)" >&5 +$as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; } +set x ${MAKE-make} +ac_make=`$as_echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'` +if { as_var=ac_cv_prog_make_${ac_make}_set; eval "test \"\${$as_var+set}\" = set"; }; then + $as_echo_n "(cached) " >&6 +else + cat >conftest.make <<\_ACEOF +SHELL = /bin/sh +all: + @echo '@@@%%%=$(MAKE)=@@@%%%' +_ACEOF +# GNU make sometimes prints "make[1]: Entering...", which would confuse us. +case `${MAKE-make} -f conftest.make 2>/dev/null` in + *@@@%%%=?*=@@@%%%*) + eval ac_cv_prog_make_${ac_make}_set=yes;; + *) + eval ac_cv_prog_make_${ac_make}_set=no;; +esac +rm -f conftest.make +fi +if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then + { $as_echo "$as_me:$LINENO: result: yes" >&5 +$as_echo "yes" >&6; } + SET_MAKE= +else + { $as_echo "$as_me:$LINENO: result: no" >&5 +$as_echo "no" >&6; } + SET_MAKE="MAKE=${MAKE-make}" +fi + +case `pwd` in + *\ * | *\ *) + { $as_echo "$as_me:$LINENO: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&5 +$as_echo "$as_me: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&2;} ;; +esac + + + +macro_version='2.2.6' +macro_revision='1.3012' + + + + + + + + + + + + + +ltmain="$ac_aux_dir/ltmain.sh" + +{ $as_echo "$as_me:$LINENO: checking for a sed that does not truncate output" >&5 +$as_echo_n "checking for a sed that does not truncate output... " >&6; } +if test "${ac_cv_path_SED+set}" = set; then + $as_echo_n "(cached) " >&6 +else + ac_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/ + for ac_i in 1 2 3 4 5 6 7; do + ac_script="$ac_script$as_nl$ac_script" + done + echo "$ac_script" 2>/dev/null | sed 99q >conftest.sed + $as_unset ac_script || ac_script= + if test -z "$SED"; then + ac_path_SED_found=false + # Loop through the user's path and test for each of PROGNAME-LIST + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in sed gsed; do + for ac_exec_ext in '' $ac_executable_extensions; do + ac_path_SED="$as_dir/$ac_prog$ac_exec_ext" + { test -f "$ac_path_SED" && $as_test_x "$ac_path_SED"; } || continue +# Check for GNU ac_path_SED and select it if it is found. + # Check for GNU $ac_path_SED +case `"$ac_path_SED" --version 2>&1` in +*GNU*) + ac_cv_path_SED="$ac_path_SED" ac_path_SED_found=:;; +*) + ac_count=0 + $as_echo_n 0123456789 >"conftest.in" + while : + do + cat "conftest.in" "conftest.in" >"conftest.tmp" + mv "conftest.tmp" "conftest.in" + cp "conftest.in" "conftest.nl" + $as_echo '' >> "conftest.nl" + "$ac_path_SED" -f conftest.sed < "conftest.nl" >"conftest.out" 2>/dev/null || break + diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break + ac_count=`expr $ac_count + 1` + if test $ac_count -gt ${ac_path_SED_max-0}; then + # Best one so far, save it but keep looking for a better one + ac_cv_path_SED="$ac_path_SED" + ac_path_SED_max=$ac_count + fi + # 10*(2^10) chars as input seems more than enough + test $ac_count -gt 10 && break + done + rm -f conftest.in conftest.tmp conftest.nl conftest.out;; +esac + + $ac_path_SED_found && break 3 + done + done +done +IFS=$as_save_IFS + if test -z "$ac_cv_path_SED"; then + { { $as_echo "$as_me:$LINENO: error: no acceptable sed could be found in \$PATH" >&5 +$as_echo "$as_me: error: no acceptable sed could be found in \$PATH" >&2;} + { (exit 1); exit 1; }; } + fi +else + ac_cv_path_SED=$SED +fi + +fi +{ $as_echo "$as_me:$LINENO: result: $ac_cv_path_SED" >&5 +$as_echo "$ac_cv_path_SED" >&6; } + SED="$ac_cv_path_SED" + rm -f conftest.sed + +test -z "$SED" && SED=sed +Xsed="$SED -e 1s/^X//" + + + + + + + + + + + +{ $as_echo "$as_me:$LINENO: checking for fgrep" >&5 +$as_echo_n "checking for fgrep... " >&6; } +if test "${ac_cv_path_FGREP+set}" = set; then + $as_echo_n "(cached) " >&6 +else + if echo 'ab*c' | $GREP -F 'ab*c' >/dev/null 2>&1 + then ac_cv_path_FGREP="$GREP -F" + else + if test -z "$FGREP"; then + ac_path_FGREP_found=false + # Loop through the user's path and test for each of PROGNAME-LIST + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in fgrep; do + for ac_exec_ext in '' $ac_executable_extensions; do + ac_path_FGREP="$as_dir/$ac_prog$ac_exec_ext" + { test -f "$ac_path_FGREP" && $as_test_x "$ac_path_FGREP"; } || continue +# Check for GNU ac_path_FGREP and select it if it is found. + # Check for GNU $ac_path_FGREP +case `"$ac_path_FGREP" --version 2>&1` in +*GNU*) + ac_cv_path_FGREP="$ac_path_FGREP" ac_path_FGREP_found=:;; +*) + ac_count=0 + $as_echo_n 0123456789 >"conftest.in" + while : + do + cat "conftest.in" "conftest.in" >"conftest.tmp" + mv "conftest.tmp" "conftest.in" + cp "conftest.in" "conftest.nl" + $as_echo 'FGREP' >> "conftest.nl" + "$ac_path_FGREP" FGREP < "conftest.nl" >"conftest.out" 2>/dev/null || break + diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break + ac_count=`expr $ac_count + 1` + if test $ac_count -gt ${ac_path_FGREP_max-0}; then + # Best one so far, save it but keep looking for a better one + ac_cv_path_FGREP="$ac_path_FGREP" + ac_path_FGREP_max=$ac_count + fi + # 10*(2^10) chars as input seems more than enough + test $ac_count -gt 10 && break + done + rm -f conftest.in conftest.tmp conftest.nl conftest.out;; +esac + + $ac_path_FGREP_found && break 3 + done + done +done +IFS=$as_save_IFS + if test -z "$ac_cv_path_FGREP"; then + { { $as_echo "$as_me:$LINENO: error: no acceptable fgrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&5 +$as_echo "$as_me: error: no acceptable fgrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&2;} + { (exit 1); exit 1; }; } + fi +else + ac_cv_path_FGREP=$FGREP +fi + + fi +fi +{ $as_echo "$as_me:$LINENO: result: $ac_cv_path_FGREP" >&5 +$as_echo "$ac_cv_path_FGREP" >&6; } + FGREP="$ac_cv_path_FGREP" + + +test -z "$GREP" && GREP=grep + + + + + + + + + + + + + + + + + + + +# Check whether --with-gnu-ld was given. +if test "${with_gnu_ld+set}" = set; then + withval=$with_gnu_ld; test "$withval" = no || with_gnu_ld=yes +else + with_gnu_ld=no +fi + +ac_prog=ld +if test "$GCC" = yes; then + # Check if gcc -print-prog-name=ld gives a path. + { $as_echo "$as_me:$LINENO: checking for ld used by $CC" >&5 +$as_echo_n "checking for ld used by $CC... " >&6; } + case $host in + *-*-mingw*) + # gcc leaves a trailing carriage return which upsets mingw + ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; + *) + ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; + esac + case $ac_prog in + # Accept absolute paths. + [\\/]* | ?:[\\/]*) + re_direlt='/[^/][^/]*/\.\./' + # Canonicalize the pathname of ld + ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'` + while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do + ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"` + done + test -z "$LD" && LD="$ac_prog" + ;; + "") + # If it fails, then pretend we aren't using GCC. + ac_prog=ld + ;; + *) + # If it is relative, then search for the first ld in PATH. + with_gnu_ld=unknown + ;; + esac +elif test "$with_gnu_ld" = yes; then + { $as_echo "$as_me:$LINENO: checking for GNU ld" >&5 +$as_echo_n "checking for GNU ld... " >&6; } +else + { $as_echo "$as_me:$LINENO: checking for non-GNU ld" >&5 +$as_echo_n "checking for non-GNU ld... " >&6; } +fi +if test "${lt_cv_path_LD+set}" = set; then + $as_echo_n "(cached) " >&6 +else + if test -z "$LD"; then + lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR + for ac_dir in $PATH; do + IFS="$lt_save_ifs" + test -z "$ac_dir" && ac_dir=. + if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then + lt_cv_path_LD="$ac_dir/$ac_prog" + # Check to see if the program is GNU ld. I'd rather use --version, + # but apparently some variants of GNU ld only accept -v. + # Break only if it was the GNU/non-GNU ld that we prefer. + case `"$lt_cv_path_LD" -v 2>&1 &5 +$as_echo "$LD" >&6; } +else + { $as_echo "$as_me:$LINENO: result: no" >&5 +$as_echo "no" >&6; } +fi +test -z "$LD" && { { $as_echo "$as_me:$LINENO: error: no acceptable ld found in \$PATH" >&5 +$as_echo "$as_me: error: no acceptable ld found in \$PATH" >&2;} + { (exit 1); exit 1; }; } +{ $as_echo "$as_me:$LINENO: checking if the linker ($LD) is GNU ld" >&5 +$as_echo_n "checking if the linker ($LD) is GNU ld... " >&6; } +if test "${lt_cv_prog_gnu_ld+set}" = set; then + $as_echo_n "(cached) " >&6 +else + # I'd rather use --version here, but apparently some GNU lds only accept -v. +case `$LD -v 2>&1 &5 +$as_echo "$lt_cv_prog_gnu_ld" >&6; } +with_gnu_ld=$lt_cv_prog_gnu_ld + + + + + + + + + +{ $as_echo "$as_me:$LINENO: checking for BSD- or MS-compatible name lister (nm)" >&5 +$as_echo_n "checking for BSD- or MS-compatible name lister (nm)... " >&6; } +if test "${lt_cv_path_NM+set}" = set; then + $as_echo_n "(cached) " >&6 +else + if test -n "$NM"; then + # Let the user override the test. + lt_cv_path_NM="$NM" +else + lt_nm_to_check="${ac_tool_prefix}nm" + if test -n "$ac_tool_prefix" && test "$build" = "$host"; then + lt_nm_to_check="$lt_nm_to_check nm" + fi + for lt_tmp_nm in $lt_nm_to_check; do + lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR + for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do + IFS="$lt_save_ifs" + test -z "$ac_dir" && ac_dir=. + tmp_nm="$ac_dir/$lt_tmp_nm" + if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext" ; then + # Check to see if the nm accepts a BSD-compat flag. + # Adding the `sed 1q' prevents false positives on HP-UX, which says: + # nm: unknown option "B" ignored + # Tru64's nm complains that /dev/null is an invalid object file + case `"$tmp_nm" -B /dev/null 2>&1 | sed '1q'` in + */dev/null* | *'Invalid file or object type'*) + lt_cv_path_NM="$tmp_nm -B" + break + ;; + *) + case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in + */dev/null*) + lt_cv_path_NM="$tmp_nm -p" + break + ;; + *) + lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but + continue # so that we can try to find one that supports BSD flags + ;; + esac + ;; + esac + fi + done + IFS="$lt_save_ifs" + done + : ${lt_cv_path_NM=no} +fi +fi +{ $as_echo "$as_me:$LINENO: result: $lt_cv_path_NM" >&5 +$as_echo "$lt_cv_path_NM" >&6; } +if test "$lt_cv_path_NM" != "no"; then + NM="$lt_cv_path_NM" +else + # Didn't find any BSD compatible name lister, look for dumpbin. + if test -n "$ac_tool_prefix"; then + for ac_prog in "dumpbin -symbols" "link -dump -symbols" + do + # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. +set dummy $ac_tool_prefix$ac_prog; ac_word=$2 +{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_DUMPBIN+set}" = set; then + $as_echo_n "(cached) " >&6 +else + if test -n "$DUMPBIN"; then + ac_cv_prog_DUMPBIN="$DUMPBIN" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_DUMPBIN="$ac_tool_prefix$ac_prog" + $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done +IFS=$as_save_IFS + +fi +fi +DUMPBIN=$ac_cv_prog_DUMPBIN +if test -n "$DUMPBIN"; then + { $as_echo "$as_me:$LINENO: result: $DUMPBIN" >&5 +$as_echo "$DUMPBIN" >&6; } +else + { $as_echo "$as_me:$LINENO: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$DUMPBIN" && break + done +fi +if test -z "$DUMPBIN"; then + ac_ct_DUMPBIN=$DUMPBIN + for ac_prog in "dumpbin -symbols" "link -dump -symbols" +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_ac_ct_DUMPBIN+set}" = set; then + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_DUMPBIN"; then + ac_cv_prog_ac_ct_DUMPBIN="$ac_ct_DUMPBIN" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_DUMPBIN="$ac_prog" + $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done +IFS=$as_save_IFS + +fi +fi +ac_ct_DUMPBIN=$ac_cv_prog_ac_ct_DUMPBIN +if test -n "$ac_ct_DUMPBIN"; then + { $as_echo "$as_me:$LINENO: result: $ac_ct_DUMPBIN" >&5 +$as_echo "$ac_ct_DUMPBIN" >&6; } +else + { $as_echo "$as_me:$LINENO: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$ac_ct_DUMPBIN" && break +done + + if test "x$ac_ct_DUMPBIN" = x; then + DUMPBIN=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:$LINENO: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + DUMPBIN=$ac_ct_DUMPBIN + fi +fi + + + if test "$DUMPBIN" != ":"; then + NM="$DUMPBIN" + fi +fi +test -z "$NM" && NM=nm + + + + + + +{ $as_echo "$as_me:$LINENO: checking the name lister ($NM) interface" >&5 +$as_echo_n "checking the name lister ($NM) interface... " >&6; } +if test "${lt_cv_nm_interface+set}" = set; then + $as_echo_n "(cached) " >&6 +else + lt_cv_nm_interface="BSD nm" + echo "int some_variable = 0;" > conftest.$ac_ext + (eval echo "\"\$as_me:5461: $ac_compile\"" >&5) + (eval "$ac_compile" 2>conftest.err) + cat conftest.err >&5 + (eval echo "\"\$as_me:5464: $NM \\\"conftest.$ac_objext\\\"\"" >&5) + (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out) + cat conftest.err >&5 + (eval echo "\"\$as_me:5467: output\"" >&5) + cat conftest.out >&5 + if $GREP 'External.*some_variable' conftest.out > /dev/null; then + lt_cv_nm_interface="MS dumpbin" + fi + rm -f conftest* +fi +{ $as_echo "$as_me:$LINENO: result: $lt_cv_nm_interface" >&5 +$as_echo "$lt_cv_nm_interface" >&6; } + +{ $as_echo "$as_me:$LINENO: checking whether ln -s works" >&5 +$as_echo_n "checking whether ln -s works... " >&6; } +LN_S=$as_ln_s +if test "$LN_S" = "ln -s"; then + { $as_echo "$as_me:$LINENO: result: yes" >&5 +$as_echo "yes" >&6; } +else + { $as_echo "$as_me:$LINENO: result: no, using $LN_S" >&5 +$as_echo "no, using $LN_S" >&6; } +fi + +# find the maximum length of command line arguments +{ $as_echo "$as_me:$LINENO: checking the maximum length of command line arguments" >&5 +$as_echo_n "checking the maximum length of command line arguments... " >&6; } +if test "${lt_cv_sys_max_cmd_len+set}" = set; then + $as_echo_n "(cached) " >&6 +else + i=0 + teststring="ABCD" + + case $build_os in + msdosdjgpp*) + # On DJGPP, this test can blow up pretty badly due to problems in libc + # (any single argument exceeding 2000 bytes causes a buffer overrun + # during glob expansion). Even if it were fixed, the result of this + # check would be larger than it should be. + lt_cv_sys_max_cmd_len=12288; # 12K is about right + ;; + + gnu*) + # Under GNU Hurd, this test is not required because there is + # no limit to the length of command line arguments. + # Libtool will interpret -1 as no limit whatsoever + lt_cv_sys_max_cmd_len=-1; + ;; + + cygwin* | mingw* | cegcc*) + # On Win9x/ME, this test blows up -- it succeeds, but takes + # about 5 minutes as the teststring grows exponentially. + # Worse, since 9x/ME are not pre-emptively multitasking, + # you end up with a "frozen" computer, even though with patience + # the test eventually succeeds (with a max line length of 256k). + # Instead, let's just punt: use the minimum linelength reported by + # all of the supported platforms: 8192 (on NT/2K/XP). + lt_cv_sys_max_cmd_len=8192; + ;; + + amigaos*) + # On AmigaOS with pdksh, this test takes hours, literally. + # So we just punt and use a minimum line length of 8192. + lt_cv_sys_max_cmd_len=8192; + ;; + + netbsd* | freebsd* | openbsd* | darwin* | dragonfly*) + # This has been around since 386BSD, at least. Likely further. + if test -x /sbin/sysctl; then + lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax` + elif test -x /usr/sbin/sysctl; then + lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax` + else + lt_cv_sys_max_cmd_len=65536 # usable default for all BSDs + fi + # And add a safety zone + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` + ;; + + interix*) + # We know the value 262144 and hardcode it with a safety zone (like BSD) + lt_cv_sys_max_cmd_len=196608 + ;; + + osf*) + # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure + # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not + # nice to cause kernel panics so lets avoid the loop below. + # First set a reasonable default. + lt_cv_sys_max_cmd_len=16384 + # + if test -x /sbin/sysconfig; then + case `/sbin/sysconfig -q proc exec_disable_arg_limit` in + *1*) lt_cv_sys_max_cmd_len=-1 ;; + esac + fi + ;; + sco3.2v5*) + lt_cv_sys_max_cmd_len=102400 + ;; + sysv5* | sco5v6* | sysv4.2uw2*) + kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null` + if test -n "$kargmax"; then + lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[ ]//'` + else + lt_cv_sys_max_cmd_len=32768 + fi + ;; + *) + lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null` + if test -n "$lt_cv_sys_max_cmd_len"; then + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` + else + # Make teststring a little bigger before we do anything with it. + # a 1K string should be a reasonable start. + for i in 1 2 3 4 5 6 7 8 ; do + teststring=$teststring$teststring + done + SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}} + # If test is not a shell built-in, we'll probably end up computing a + # maximum length that is only half of the actual maximum length, but + # we can't tell. + while { test "X"`$SHELL $0 --fallback-echo "X$teststring$teststring" 2>/dev/null` \ + = "XX$teststring$teststring"; } >/dev/null 2>&1 && + test $i != 17 # 1/2 MB should be enough + do + i=`expr $i + 1` + teststring=$teststring$teststring + done + # Only check the string length outside the loop. + lt_cv_sys_max_cmd_len=`expr "X$teststring" : ".*" 2>&1` + teststring= + # Add a significant safety factor because C++ compilers can tack on + # massive amounts of additional arguments before passing them to the + # linker. It appears as though 1/2 is a usable value. + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2` + fi + ;; + esac + +fi + +if test -n $lt_cv_sys_max_cmd_len ; then + { $as_echo "$as_me:$LINENO: result: $lt_cv_sys_max_cmd_len" >&5 +$as_echo "$lt_cv_sys_max_cmd_len" >&6; } +else + { $as_echo "$as_me:$LINENO: result: none" >&5 +$as_echo "none" >&6; } +fi +max_cmd_len=$lt_cv_sys_max_cmd_len + + + + + + +: ${CP="cp -f"} +: ${MV="mv -f"} +: ${RM="rm -f"} + +{ $as_echo "$as_me:$LINENO: checking whether the shell understands some XSI constructs" >&5 +$as_echo_n "checking whether the shell understands some XSI constructs... " >&6; } +# Try some XSI features +xsi_shell=no +( _lt_dummy="a/b/c" + test "${_lt_dummy##*/},${_lt_dummy%/*},"${_lt_dummy%"$_lt_dummy"}, \ + = c,a/b,, \ + && eval 'test $(( 1 + 1 )) -eq 2 \ + && test "${#_lt_dummy}" -eq 5' ) >/dev/null 2>&1 \ + && xsi_shell=yes +{ $as_echo "$as_me:$LINENO: result: $xsi_shell" >&5 +$as_echo "$xsi_shell" >&6; } + + +{ $as_echo "$as_me:$LINENO: checking whether the shell understands \"+=\"" >&5 +$as_echo_n "checking whether the shell understands \"+=\"... " >&6; } +lt_shell_append=no +( foo=bar; set foo baz; eval "$1+=\$2" && test "$foo" = barbaz ) \ + >/dev/null 2>&1 \ + && lt_shell_append=yes +{ $as_echo "$as_me:$LINENO: result: $lt_shell_append" >&5 +$as_echo "$lt_shell_append" >&6; } + + +if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then + lt_unset=unset +else + lt_unset=false +fi + + + + + +# test EBCDIC or ASCII +case `echo X|tr X '\101'` in + A) # ASCII based system + # \n is not interpreted correctly by Solaris 8 /usr/ucb/tr + lt_SP2NL='tr \040 \012' + lt_NL2SP='tr \015\012 \040\040' + ;; + *) # EBCDIC based system + lt_SP2NL='tr \100 \n' + lt_NL2SP='tr \r\n \100\100' + ;; +esac + + + + + + + + + +{ $as_echo "$as_me:$LINENO: checking for $LD option to reload object files" >&5 +$as_echo_n "checking for $LD option to reload object files... " >&6; } +if test "${lt_cv_ld_reload_flag+set}" = set; then + $as_echo_n "(cached) " >&6 +else + lt_cv_ld_reload_flag='-r' +fi +{ $as_echo "$as_me:$LINENO: result: $lt_cv_ld_reload_flag" >&5 +$as_echo "$lt_cv_ld_reload_flag" >&6; } +reload_flag=$lt_cv_ld_reload_flag +case $reload_flag in +"" | " "*) ;; +*) reload_flag=" $reload_flag" ;; +esac +reload_cmds='$LD$reload_flag -o $output$reload_objs' +case $host_os in + darwin*) + if test "$GCC" = yes; then + reload_cmds='$LTCC $LTCFLAGS -nostdlib ${wl}-r -o $output$reload_objs' + else + reload_cmds='$LD$reload_flag -o $output$reload_objs' + fi + ;; +esac + + + + + + + + + +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}objdump", so it can be a program name with args. +set dummy ${ac_tool_prefix}objdump; ac_word=$2 +{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_OBJDUMP+set}" = set; then + $as_echo_n "(cached) " >&6 +else + if test -n "$OBJDUMP"; then + ac_cv_prog_OBJDUMP="$OBJDUMP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_OBJDUMP="${ac_tool_prefix}objdump" + $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done +IFS=$as_save_IFS + +fi +fi +OBJDUMP=$ac_cv_prog_OBJDUMP +if test -n "$OBJDUMP"; then + { $as_echo "$as_me:$LINENO: result: $OBJDUMP" >&5 +$as_echo "$OBJDUMP" >&6; } +else + { $as_echo "$as_me:$LINENO: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_OBJDUMP"; then + ac_ct_OBJDUMP=$OBJDUMP + # Extract the first word of "objdump", so it can be a program name with args. +set dummy objdump; ac_word=$2 +{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_ac_ct_OBJDUMP+set}" = set; then + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_OBJDUMP"; then + ac_cv_prog_ac_ct_OBJDUMP="$ac_ct_OBJDUMP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_OBJDUMP="objdump" + $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done +IFS=$as_save_IFS + +fi +fi +ac_ct_OBJDUMP=$ac_cv_prog_ac_ct_OBJDUMP +if test -n "$ac_ct_OBJDUMP"; then + { $as_echo "$as_me:$LINENO: result: $ac_ct_OBJDUMP" >&5 +$as_echo "$ac_ct_OBJDUMP" >&6; } +else + { $as_echo "$as_me:$LINENO: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_OBJDUMP" = x; then + OBJDUMP="false" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:$LINENO: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + OBJDUMP=$ac_ct_OBJDUMP + fi +else + OBJDUMP="$ac_cv_prog_OBJDUMP" +fi + +test -z "$OBJDUMP" && OBJDUMP=objdump + + + + + + + + + +{ $as_echo "$as_me:$LINENO: checking how to recognize dependent libraries" >&5 +$as_echo_n "checking how to recognize dependent libraries... " >&6; } +if test "${lt_cv_deplibs_check_method+set}" = set; then + $as_echo_n "(cached) " >&6 +else + lt_cv_file_magic_cmd='$MAGIC_CMD' +lt_cv_file_magic_test_file= +lt_cv_deplibs_check_method='unknown' +# Need to set the preceding variable on all platforms that support +# interlibrary dependencies. +# 'none' -- dependencies not supported. +# `unknown' -- same as none, but documents that we really don't know. +# 'pass_all' -- all dependencies passed with no checks. +# 'test_compile' -- check by making test program. +# 'file_magic [[regex]]' -- check by looking for files in library path +# which responds to the $file_magic_cmd with a given extended regex. +# If you have `file' or equivalent on your system and you're not sure +# whether `pass_all' will *always* work, you probably want this one. + +case $host_os in +aix[4-9]*) + lt_cv_deplibs_check_method=pass_all + ;; + +beos*) + lt_cv_deplibs_check_method=pass_all + ;; + +bsdi[45]*) + lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib)' + lt_cv_file_magic_cmd='/usr/bin/file -L' + lt_cv_file_magic_test_file=/shlib/libc.so + ;; + +cygwin*) + # func_win32_libid is a shell function defined in ltmain.sh + lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' + lt_cv_file_magic_cmd='func_win32_libid' + ;; + +mingw* | pw32*) + # Base MSYS/MinGW do not provide the 'file' command needed by + # func_win32_libid shell function, so use a weaker test based on 'objdump', + # unless we find 'file', for example because we are cross-compiling. + if ( file / ) >/dev/null 2>&1; then + lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' + lt_cv_file_magic_cmd='func_win32_libid' + else + lt_cv_deplibs_check_method='file_magic file format pei*-i386(.*architecture: i386)?' + lt_cv_file_magic_cmd='$OBJDUMP -f' + fi + ;; + +cegcc) + # use the weaker test based on 'objdump'. See mingw*. + lt_cv_deplibs_check_method='file_magic file format pe-arm-.*little(.*architecture: arm)?' + lt_cv_file_magic_cmd='$OBJDUMP -f' + ;; + +darwin* | rhapsody*) + lt_cv_deplibs_check_method=pass_all + ;; + +freebsd* | dragonfly*) + if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then + case $host_cpu in + i*86 ) + # Not sure whether the presence of OpenBSD here was a mistake. + # Let's accept both of them until this is cleared up. + lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[3-9]86 (compact )?demand paged shared library' + lt_cv_file_magic_cmd=/usr/bin/file + lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*` + ;; + esac + else + lt_cv_deplibs_check_method=pass_all + fi + ;; + +gnu*) + lt_cv_deplibs_check_method=pass_all + ;; + +hpux10.20* | hpux11*) + lt_cv_file_magic_cmd=/usr/bin/file + case $host_cpu in + ia64*) + lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - IA64' + lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so + ;; + hppa*64*) + lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - PA-RISC [0-9].[0-9]' + lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl + ;; + *) + lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|PA-RISC[0-9].[0-9]) shared library' + lt_cv_file_magic_test_file=/usr/lib/libc.sl + ;; + esac + ;; + +interix[3-9]*) + # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here + lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|\.a)$' + ;; + +irix5* | irix6* | nonstopux*) + case $LD in + *-32|*"-32 ") libmagic=32-bit;; + *-n32|*"-n32 ") libmagic=N32;; + *-64|*"-64 ") libmagic=64-bit;; + *) libmagic=never-match;; + esac + lt_cv_deplibs_check_method=pass_all + ;; + +# This must be Linux ELF. +linux* | k*bsd*-gnu) + lt_cv_deplibs_check_method=pass_all + ;; + +netbsd*) + if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then + lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$' + else + lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|_pic\.a)$' + fi + ;; + +newos6*) + lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (executable|dynamic lib)' + lt_cv_file_magic_cmd=/usr/bin/file + lt_cv_file_magic_test_file=/usr/lib/libnls.so + ;; + +*nto* | *qnx*) + lt_cv_deplibs_check_method=pass_all + ;; + +openbsd*) + if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|\.so|_pic\.a)$' + else + lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$' + fi + ;; + +osf3* | osf4* | osf5*) + lt_cv_deplibs_check_method=pass_all + ;; + +rdos*) + lt_cv_deplibs_check_method=pass_all + ;; + +solaris*) + lt_cv_deplibs_check_method=pass_all + ;; + +sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) + lt_cv_deplibs_check_method=pass_all + ;; + +sysv4 | sysv4.3*) + case $host_vendor in + motorola) + lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib) M[0-9][0-9]* Version [0-9]' + lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*` + ;; + ncr) + lt_cv_deplibs_check_method=pass_all + ;; + sequent) + lt_cv_file_magic_cmd='/bin/file' + lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [LM]SB (shared object|dynamic lib )' + ;; + sni) + lt_cv_file_magic_cmd='/bin/file' + lt_cv_deplibs_check_method="file_magic ELF [0-9][0-9]*-bit [LM]SB dynamic lib" + lt_cv_file_magic_test_file=/lib/libc.so + ;; + siemens) + lt_cv_deplibs_check_method=pass_all + ;; + pc) + lt_cv_deplibs_check_method=pass_all + ;; + esac + ;; + +tpf*) + lt_cv_deplibs_check_method=pass_all + ;; +esac + +fi +{ $as_echo "$as_me:$LINENO: result: $lt_cv_deplibs_check_method" >&5 +$as_echo "$lt_cv_deplibs_check_method" >&6; } +file_magic_cmd=$lt_cv_file_magic_cmd +deplibs_check_method=$lt_cv_deplibs_check_method +test -z "$deplibs_check_method" && deplibs_check_method=unknown + + + + + + + + + + + + +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args. +set dummy ${ac_tool_prefix}ar; ac_word=$2 +{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_AR+set}" = set; then + $as_echo_n "(cached) " >&6 +else + if test -n "$AR"; then + ac_cv_prog_AR="$AR" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_AR="${ac_tool_prefix}ar" + $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done +IFS=$as_save_IFS + +fi +fi +AR=$ac_cv_prog_AR +if test -n "$AR"; then + { $as_echo "$as_me:$LINENO: result: $AR" >&5 +$as_echo "$AR" >&6; } +else + { $as_echo "$as_me:$LINENO: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_AR"; then + ac_ct_AR=$AR + # Extract the first word of "ar", so it can be a program name with args. +set dummy ar; ac_word=$2 +{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_ac_ct_AR+set}" = set; then + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_AR"; then + ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_AR="ar" + $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done +IFS=$as_save_IFS + +fi +fi +ac_ct_AR=$ac_cv_prog_ac_ct_AR +if test -n "$ac_ct_AR"; then + { $as_echo "$as_me:$LINENO: result: $ac_ct_AR" >&5 +$as_echo "$ac_ct_AR" >&6; } +else + { $as_echo "$as_me:$LINENO: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_AR" = x; then + AR="false" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:$LINENO: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + AR=$ac_ct_AR + fi +else + AR="$ac_cv_prog_AR" +fi + +test -z "$AR" && AR=ar +test -z "$AR_FLAGS" && AR_FLAGS=cru + + + + + + + + + + + +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. +set dummy ${ac_tool_prefix}strip; ac_word=$2 +{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_STRIP+set}" = set; then + $as_echo_n "(cached) " >&6 +else + if test -n "$STRIP"; then + ac_cv_prog_STRIP="$STRIP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_STRIP="${ac_tool_prefix}strip" + $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done +IFS=$as_save_IFS + +fi +fi +STRIP=$ac_cv_prog_STRIP +if test -n "$STRIP"; then + { $as_echo "$as_me:$LINENO: result: $STRIP" >&5 +$as_echo "$STRIP" >&6; } +else + { $as_echo "$as_me:$LINENO: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_STRIP"; then + ac_ct_STRIP=$STRIP + # Extract the first word of "strip", so it can be a program name with args. +set dummy strip; ac_word=$2 +{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_ac_ct_STRIP+set}" = set; then + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_STRIP"; then + ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_STRIP="strip" + $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done +IFS=$as_save_IFS + +fi +fi +ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP +if test -n "$ac_ct_STRIP"; then + { $as_echo "$as_me:$LINENO: result: $ac_ct_STRIP" >&5 +$as_echo "$ac_ct_STRIP" >&6; } +else + { $as_echo "$as_me:$LINENO: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_STRIP" = x; then + STRIP=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:$LINENO: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + STRIP=$ac_ct_STRIP + fi +else + STRIP="$ac_cv_prog_STRIP" +fi + +test -z "$STRIP" && STRIP=: + + + + + + +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args. +set dummy ${ac_tool_prefix}ranlib; ac_word=$2 +{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_RANLIB+set}" = set; then + $as_echo_n "(cached) " >&6 +else + if test -n "$RANLIB"; then + ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib" + $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done +IFS=$as_save_IFS + +fi +fi +RANLIB=$ac_cv_prog_RANLIB +if test -n "$RANLIB"; then + { $as_echo "$as_me:$LINENO: result: $RANLIB" >&5 +$as_echo "$RANLIB" >&6; } +else + { $as_echo "$as_me:$LINENO: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_RANLIB"; then + ac_ct_RANLIB=$RANLIB + # Extract the first word of "ranlib", so it can be a program name with args. +set dummy ranlib; ac_word=$2 +{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_ac_ct_RANLIB+set}" = set; then + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_RANLIB"; then + ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_RANLIB="ranlib" + $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done +IFS=$as_save_IFS + +fi +fi +ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB +if test -n "$ac_ct_RANLIB"; then + { $as_echo "$as_me:$LINENO: result: $ac_ct_RANLIB" >&5 +$as_echo "$ac_ct_RANLIB" >&6; } +else + { $as_echo "$as_me:$LINENO: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_RANLIB" = x; then + RANLIB=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:$LINENO: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + RANLIB=$ac_ct_RANLIB + fi +else + RANLIB="$ac_cv_prog_RANLIB" +fi + +test -z "$RANLIB" && RANLIB=: + + + + + + +# Determine commands to create old-style static archives. +old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs' +old_postinstall_cmds='chmod 644 $oldlib' +old_postuninstall_cmds= + +if test -n "$RANLIB"; then + case $host_os in + openbsd*) + old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$oldlib" + ;; + *) + old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$oldlib" + ;; + esac + old_archive_cmds="$old_archive_cmds~\$RANLIB \$oldlib" +fi + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +# If no C compiler was specified, use CC. +LTCC=${LTCC-"$CC"} + +# If no C compiler flags were specified, use CFLAGS. +LTCFLAGS=${LTCFLAGS-"$CFLAGS"} + +# Allow CC to be a program name with arguments. +compiler=$CC + + +# Check for command to grab the raw symbol name followed by C symbol from nm. +{ $as_echo "$as_me:$LINENO: checking command to parse $NM output from $compiler object" >&5 +$as_echo_n "checking command to parse $NM output from $compiler object... " >&6; } +if test "${lt_cv_sys_global_symbol_pipe+set}" = set; then + $as_echo_n "(cached) " >&6 +else + +# These are sane defaults that work on at least a few old systems. +# [They come from Ultrix. What could be older than Ultrix?!! ;)] + +# Character class describing NM global symbol codes. +symcode='[BCDEGRST]' + +# Regexp to match symbols that can be accessed directly from C. +sympat='\([_A-Za-z][_A-Za-z0-9]*\)' + +# Define system-specific variables. +case $host_os in +aix*) + symcode='[BCDT]' + ;; +cygwin* | mingw* | pw32* | cegcc*) + symcode='[ABCDGISTW]' + ;; +hpux*) + if test "$host_cpu" = ia64; then + symcode='[ABCDEGRST]' + fi + ;; +irix* | nonstopux*) + symcode='[BCDEGRST]' + ;; +osf*) + symcode='[BCDEGQRST]' + ;; +solaris*) + symcode='[BDRT]' + ;; +sco3.2v5*) + symcode='[DT]' + ;; +sysv4.2uw2*) + symcode='[DT]' + ;; +sysv5* | sco5v6* | unixware* | OpenUNIX*) + symcode='[ABDT]' + ;; +sysv4) + symcode='[DFNSTU]' + ;; +esac + +# If we're using GNU nm, then use its standard symbol codes. +case `$NM -V 2>&1` in +*GNU* | *'with BFD'*) + symcode='[ABCDGIRSTW]' ;; +esac + +# Transform an extracted symbol line into a proper C declaration. +# Some systems (esp. on ia64) link data and code symbols differently, +# so use this general approach. +lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'" + +# Transform an extracted symbol line into symbol name and symbol address +lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([^ ]*\) $/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"\2\", (void *) \&\2},/p'" +lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n -e 's/^: \([^ ]*\) $/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \(lib[^ ]*\)$/ {\"\2\", (void *) \&\2},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"lib\2\", (void *) \&\2},/p'" + +# Handle CRLF in mingw tool chain +opt_cr= +case $build_os in +mingw*) + opt_cr=`$ECHO 'x\{0,1\}' | tr x '\015'` # option cr in regexp + ;; +esac + +# Try without a prefix underscore, then with it. +for ac_symprfx in "" "_"; do + + # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol. + symxfrm="\\1 $ac_symprfx\\2 \\2" + + # Write the raw and C identifiers. + if test "$lt_cv_nm_interface" = "MS dumpbin"; then + # Fake it for dumpbin and say T for any non-static function + # and D for any global variable. + # Also find C++ and __fastcall symbols from MSVC++, + # which start with @ or ?. + lt_cv_sys_global_symbol_pipe="$AWK '"\ +" {last_section=section; section=\$ 3};"\ +" /Section length .*#relocs.*(pick any)/{hide[last_section]=1};"\ +" \$ 0!~/External *\|/{next};"\ +" / 0+ UNDEF /{next}; / UNDEF \([^|]\)*()/{next};"\ +" {if(hide[section]) next};"\ +" {f=0}; \$ 0~/\(\).*\|/{f=1}; {printf f ? \"T \" : \"D \"};"\ +" {split(\$ 0, a, /\||\r/); split(a[2], s)};"\ +" s[1]~/^[@?]/{print s[1], s[1]; next};"\ +" s[1]~prfx {split(s[1],t,\"@\"); print t[1], substr(t[1],length(prfx))}"\ +" ' prfx=^$ac_symprfx" + else + lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[ ]\($symcode$symcode*\)[ ][ ]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'" + fi + + # Check to see that the pipe works correctly. + pipe_works=no + + rm -f conftest* + cat > conftest.$ac_ext <<_LT_EOF +#ifdef __cplusplus +extern "C" { +#endif +char nm_test_var; +void nm_test_func(void); +void nm_test_func(void){} +#ifdef __cplusplus +} +#endif +int main(){nm_test_var='a';nm_test_func();return(0);} +_LT_EOF + + if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; then + # Now try to grab the symbols. + nlist=conftest.nm + if { (eval echo "$as_me:$LINENO: \"$NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $nlist\"") >&5 + (eval $NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $nlist) 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && test -s "$nlist"; then + # Try sorting and uniquifying the output. + if sort "$nlist" | uniq > "$nlist"T; then + mv -f "$nlist"T "$nlist" + else + rm -f "$nlist"T + fi + + # Make sure that we snagged all the symbols we need. + if $GREP ' nm_test_var$' "$nlist" >/dev/null; then + if $GREP ' nm_test_func$' "$nlist" >/dev/null; then + cat <<_LT_EOF > conftest.$ac_ext +#ifdef __cplusplus +extern "C" { +#endif + +_LT_EOF + # Now generate the symbol file. + eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | $GREP -v main >> conftest.$ac_ext' + + cat <<_LT_EOF >> conftest.$ac_ext + +/* The mapping between symbol names and symbols. */ +const struct { + const char *name; + void *address; +} +lt__PROGRAM__LTX_preloaded_symbols[] = +{ + { "@PROGRAM@", (void *) 0 }, +_LT_EOF + $SED "s/^$symcode$symcode* \(.*\) \(.*\)$/ {\"\2\", (void *) \&\2},/" < "$nlist" | $GREP -v main >> conftest.$ac_ext + cat <<\_LT_EOF >> conftest.$ac_ext + {0, (void *) 0} +}; + +/* This works around a problem in FreeBSD linker */ +#ifdef FREEBSD_WORKAROUND +static const void *lt_preloaded_setup() { + return lt__PROGRAM__LTX_preloaded_symbols; +} +#endif + +#ifdef __cplusplus +} +#endif +_LT_EOF + # Now try linking the two files. + mv conftest.$ac_objext conftstm.$ac_objext + lt_save_LIBS="$LIBS" + lt_save_CFLAGS="$CFLAGS" + LIBS="conftstm.$ac_objext" + CFLAGS="$CFLAGS$lt_prog_compiler_no_builtin_flag" + if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && test -s conftest${ac_exeext}; then + pipe_works=yes + fi + LIBS="$lt_save_LIBS" + CFLAGS="$lt_save_CFLAGS" + else + echo "cannot find nm_test_func in $nlist" >&5 + fi + else + echo "cannot find nm_test_var in $nlist" >&5 + fi + else + echo "cannot run $lt_cv_sys_global_symbol_pipe" >&5 + fi + else + echo "$progname: failed program was:" >&5 + cat conftest.$ac_ext >&5 + fi + rm -rf conftest* conftst* + + # Do not use the global_symbol_pipe unless it works. + if test "$pipe_works" = yes; then + break + else + lt_cv_sys_global_symbol_pipe= + fi +done + +fi + +if test -z "$lt_cv_sys_global_symbol_pipe"; then + lt_cv_sys_global_symbol_to_cdecl= +fi +if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then + { $as_echo "$as_me:$LINENO: result: failed" >&5 +$as_echo "failed" >&6; } +else + { $as_echo "$as_me:$LINENO: result: ok" >&5 +$as_echo "ok" >&6; } +fi + + + + + + + + + + + + + + + + + + + + + + +# Check whether --enable-libtool-lock was given. +if test "${enable_libtool_lock+set}" = set; then + enableval=$enable_libtool_lock; +fi + +test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes + +# Some flags need to be propagated to the compiler or linker for good +# libtool support. +case $host in +ia64-*-hpux*) + # Find out which ABI we are using. + echo 'int i;' > conftest.$ac_ext + if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; then + case `/usr/bin/file conftest.$ac_objext` in + *ELF-32*) + HPUX_IA64_MODE="32" + ;; + *ELF-64*) + HPUX_IA64_MODE="64" + ;; + esac + fi + rm -rf conftest* + ;; +*-*-irix6*) + # Find out which ABI we are using. + echo '#line 6672 "configure"' > conftest.$ac_ext + if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; then + if test "$lt_cv_prog_gnu_ld" = yes; then + case `/usr/bin/file conftest.$ac_objext` in + *32-bit*) + LD="${LD-ld} -melf32bsmip" + ;; + *N32*) + LD="${LD-ld} -melf32bmipn32" + ;; + *64-bit*) + LD="${LD-ld} -melf64bmip" + ;; + esac + else + case `/usr/bin/file conftest.$ac_objext` in + *32-bit*) + LD="${LD-ld} -32" + ;; + *N32*) + LD="${LD-ld} -n32" + ;; + *64-bit*) + LD="${LD-ld} -64" + ;; + esac + fi + fi + rm -rf conftest* + ;; + +x86_64-*kfreebsd*-gnu|x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*| \ +s390*-*linux*|s390*-*tpf*|sparc*-*linux*) + # Find out which ABI we are using. + echo 'int i;' > conftest.$ac_ext + if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; then + case `/usr/bin/file conftest.o` in + *32-bit*) + case $host in + x86_64-*kfreebsd*-gnu) + LD="${LD-ld} -m elf_i386_fbsd" + ;; + x86_64-*linux*) + LD="${LD-ld} -m elf_i386" + ;; + ppc64-*linux*|powerpc64-*linux*) + LD="${LD-ld} -m elf32ppclinux" + ;; + s390x-*linux*) + LD="${LD-ld} -m elf_s390" + ;; + sparc64-*linux*) + LD="${LD-ld} -m elf32_sparc" + ;; + esac + ;; + *64-bit*) + case $host in + x86_64-*kfreebsd*-gnu) + LD="${LD-ld} -m elf_x86_64_fbsd" + ;; + x86_64-*linux*) + LD="${LD-ld} -m elf_x86_64" + ;; + ppc*-*linux*|powerpc*-*linux*) + LD="${LD-ld} -m elf64ppc" + ;; + s390*-*linux*|s390*-*tpf*) + LD="${LD-ld} -m elf64_s390" + ;; + sparc*-*linux*) + LD="${LD-ld} -m elf64_sparc" + ;; + esac + ;; + esac + fi + rm -rf conftest* + ;; + +*-*-sco3.2v5*) + # On SCO OpenServer 5, we need -belf to get full-featured binaries. + SAVE_CFLAGS="$CFLAGS" + CFLAGS="$CFLAGS -belf" + { $as_echo "$as_me:$LINENO: checking whether the C compiler needs -belf" >&5 +$as_echo_n "checking whether the C compiler needs -belf... " >&6; } +if test "${lt_cv_cc_needs_belf+set}" = set; then + $as_echo_n "(cached) " >&6 +else + ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + $as_test_x conftest$ac_exeext + }; then + lt_cv_cc_needs_belf=yes +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + lt_cv_cc_needs_belf=no +fi + +rm -rf conftest.dSYM +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext + ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + +fi +{ $as_echo "$as_me:$LINENO: result: $lt_cv_cc_needs_belf" >&5 +$as_echo "$lt_cv_cc_needs_belf" >&6; } + if test x"$lt_cv_cc_needs_belf" != x"yes"; then + # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf + CFLAGS="$SAVE_CFLAGS" + fi + ;; +sparc*-*solaris*) + # Find out which ABI we are using. + echo 'int i;' > conftest.$ac_ext + if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; then + case `/usr/bin/file conftest.o` in + *64-bit*) + case $lt_cv_prog_gnu_ld in + yes*) LD="${LD-ld} -m elf64_sparc" ;; + *) + if ${LD-ld} -64 -r -o conftest2.o conftest.o >/dev/null 2>&1; then + LD="${LD-ld} -64" + fi + ;; + esac + ;; + esac + fi + rm -rf conftest* + ;; +esac + +need_locks="$enable_libtool_lock" + + + case $host_os in + rhapsody* | darwin*) + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}dsymutil", so it can be a program name with args. +set dummy ${ac_tool_prefix}dsymutil; ac_word=$2 +{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_DSYMUTIL+set}" = set; then + $as_echo_n "(cached) " >&6 +else + if test -n "$DSYMUTIL"; then + ac_cv_prog_DSYMUTIL="$DSYMUTIL" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_DSYMUTIL="${ac_tool_prefix}dsymutil" + $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done +IFS=$as_save_IFS + +fi +fi +DSYMUTIL=$ac_cv_prog_DSYMUTIL +if test -n "$DSYMUTIL"; then + { $as_echo "$as_me:$LINENO: result: $DSYMUTIL" >&5 +$as_echo "$DSYMUTIL" >&6; } +else + { $as_echo "$as_me:$LINENO: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_DSYMUTIL"; then + ac_ct_DSYMUTIL=$DSYMUTIL + # Extract the first word of "dsymutil", so it can be a program name with args. +set dummy dsymutil; ac_word=$2 +{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_ac_ct_DSYMUTIL+set}" = set; then + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_DSYMUTIL"; then + ac_cv_prog_ac_ct_DSYMUTIL="$ac_ct_DSYMUTIL" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_DSYMUTIL="dsymutil" + $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done +IFS=$as_save_IFS + +fi +fi +ac_ct_DSYMUTIL=$ac_cv_prog_ac_ct_DSYMUTIL +if test -n "$ac_ct_DSYMUTIL"; then + { $as_echo "$as_me:$LINENO: result: $ac_ct_DSYMUTIL" >&5 +$as_echo "$ac_ct_DSYMUTIL" >&6; } +else + { $as_echo "$as_me:$LINENO: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_DSYMUTIL" = x; then + DSYMUTIL=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:$LINENO: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + DSYMUTIL=$ac_ct_DSYMUTIL + fi +else + DSYMUTIL="$ac_cv_prog_DSYMUTIL" +fi + + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}nmedit", so it can be a program name with args. +set dummy ${ac_tool_prefix}nmedit; ac_word=$2 +{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_NMEDIT+set}" = set; then + $as_echo_n "(cached) " >&6 +else + if test -n "$NMEDIT"; then + ac_cv_prog_NMEDIT="$NMEDIT" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_NMEDIT="${ac_tool_prefix}nmedit" + $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done +IFS=$as_save_IFS + +fi +fi +NMEDIT=$ac_cv_prog_NMEDIT +if test -n "$NMEDIT"; then + { $as_echo "$as_me:$LINENO: result: $NMEDIT" >&5 +$as_echo "$NMEDIT" >&6; } +else + { $as_echo "$as_me:$LINENO: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_NMEDIT"; then + ac_ct_NMEDIT=$NMEDIT + # Extract the first word of "nmedit", so it can be a program name with args. +set dummy nmedit; ac_word=$2 +{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_ac_ct_NMEDIT+set}" = set; then + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_NMEDIT"; then + ac_cv_prog_ac_ct_NMEDIT="$ac_ct_NMEDIT" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_NMEDIT="nmedit" + $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done +IFS=$as_save_IFS + +fi +fi +ac_ct_NMEDIT=$ac_cv_prog_ac_ct_NMEDIT +if test -n "$ac_ct_NMEDIT"; then + { $as_echo "$as_me:$LINENO: result: $ac_ct_NMEDIT" >&5 +$as_echo "$ac_ct_NMEDIT" >&6; } +else + { $as_echo "$as_me:$LINENO: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_NMEDIT" = x; then + NMEDIT=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:$LINENO: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + NMEDIT=$ac_ct_NMEDIT + fi +else + NMEDIT="$ac_cv_prog_NMEDIT" +fi + + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}lipo", so it can be a program name with args. +set dummy ${ac_tool_prefix}lipo; ac_word=$2 +{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_LIPO+set}" = set; then + $as_echo_n "(cached) " >&6 +else + if test -n "$LIPO"; then + ac_cv_prog_LIPO="$LIPO" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_LIPO="${ac_tool_prefix}lipo" + $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done +IFS=$as_save_IFS + +fi +fi +LIPO=$ac_cv_prog_LIPO +if test -n "$LIPO"; then + { $as_echo "$as_me:$LINENO: result: $LIPO" >&5 +$as_echo "$LIPO" >&6; } +else + { $as_echo "$as_me:$LINENO: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_LIPO"; then + ac_ct_LIPO=$LIPO + # Extract the first word of "lipo", so it can be a program name with args. +set dummy lipo; ac_word=$2 +{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_ac_ct_LIPO+set}" = set; then + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_LIPO"; then + ac_cv_prog_ac_ct_LIPO="$ac_ct_LIPO" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_LIPO="lipo" + $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done +IFS=$as_save_IFS + +fi +fi +ac_ct_LIPO=$ac_cv_prog_ac_ct_LIPO +if test -n "$ac_ct_LIPO"; then + { $as_echo "$as_me:$LINENO: result: $ac_ct_LIPO" >&5 +$as_echo "$ac_ct_LIPO" >&6; } +else + { $as_echo "$as_me:$LINENO: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_LIPO" = x; then + LIPO=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:$LINENO: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + LIPO=$ac_ct_LIPO + fi +else + LIPO="$ac_cv_prog_LIPO" +fi + + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}otool", so it can be a program name with args. +set dummy ${ac_tool_prefix}otool; ac_word=$2 +{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_OTOOL+set}" = set; then + $as_echo_n "(cached) " >&6 +else + if test -n "$OTOOL"; then + ac_cv_prog_OTOOL="$OTOOL" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_OTOOL="${ac_tool_prefix}otool" + $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done +IFS=$as_save_IFS + +fi +fi +OTOOL=$ac_cv_prog_OTOOL +if test -n "$OTOOL"; then + { $as_echo "$as_me:$LINENO: result: $OTOOL" >&5 +$as_echo "$OTOOL" >&6; } +else + { $as_echo "$as_me:$LINENO: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_OTOOL"; then + ac_ct_OTOOL=$OTOOL + # Extract the first word of "otool", so it can be a program name with args. +set dummy otool; ac_word=$2 +{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_ac_ct_OTOOL+set}" = set; then + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_OTOOL"; then + ac_cv_prog_ac_ct_OTOOL="$ac_ct_OTOOL" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_OTOOL="otool" + $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done +IFS=$as_save_IFS + +fi +fi +ac_ct_OTOOL=$ac_cv_prog_ac_ct_OTOOL +if test -n "$ac_ct_OTOOL"; then + { $as_echo "$as_me:$LINENO: result: $ac_ct_OTOOL" >&5 +$as_echo "$ac_ct_OTOOL" >&6; } +else + { $as_echo "$as_me:$LINENO: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_OTOOL" = x; then + OTOOL=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:$LINENO: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + OTOOL=$ac_ct_OTOOL + fi +else + OTOOL="$ac_cv_prog_OTOOL" +fi + + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}otool64", so it can be a program name with args. +set dummy ${ac_tool_prefix}otool64; ac_word=$2 +{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_OTOOL64+set}" = set; then + $as_echo_n "(cached) " >&6 +else + if test -n "$OTOOL64"; then + ac_cv_prog_OTOOL64="$OTOOL64" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_OTOOL64="${ac_tool_prefix}otool64" + $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done +IFS=$as_save_IFS + +fi +fi +OTOOL64=$ac_cv_prog_OTOOL64 +if test -n "$OTOOL64"; then + { $as_echo "$as_me:$LINENO: result: $OTOOL64" >&5 +$as_echo "$OTOOL64" >&6; } +else + { $as_echo "$as_me:$LINENO: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_OTOOL64"; then + ac_ct_OTOOL64=$OTOOL64 + # Extract the first word of "otool64", so it can be a program name with args. +set dummy otool64; ac_word=$2 +{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_ac_ct_OTOOL64+set}" = set; then + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_OTOOL64"; then + ac_cv_prog_ac_ct_OTOOL64="$ac_ct_OTOOL64" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_OTOOL64="otool64" + $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done +IFS=$as_save_IFS + +fi +fi +ac_ct_OTOOL64=$ac_cv_prog_ac_ct_OTOOL64 +if test -n "$ac_ct_OTOOL64"; then + { $as_echo "$as_me:$LINENO: result: $ac_ct_OTOOL64" >&5 +$as_echo "$ac_ct_OTOOL64" >&6; } +else + { $as_echo "$as_me:$LINENO: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_OTOOL64" = x; then + OTOOL64=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:$LINENO: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + OTOOL64=$ac_ct_OTOOL64 + fi +else + OTOOL64="$ac_cv_prog_OTOOL64" +fi + + + + + + + + + + + + + + + + + + + + + + + + + + + + { $as_echo "$as_me:$LINENO: checking for -single_module linker flag" >&5 +$as_echo_n "checking for -single_module linker flag... " >&6; } +if test "${lt_cv_apple_cc_single_mod+set}" = set; then + $as_echo_n "(cached) " >&6 +else + lt_cv_apple_cc_single_mod=no + if test -z "${LT_MULTI_MODULE}"; then + # By default we will add the -single_module flag. You can override + # by either setting the environment variable LT_MULTI_MODULE + # non-empty at configure time, or by adding -multi_module to the + # link flags. + rm -rf libconftest.dylib* + echo "int foo(void){return 1;}" > conftest.c + echo "$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ +-dynamiclib -Wl,-single_module conftest.c" >&5 + $LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ + -dynamiclib -Wl,-single_module conftest.c 2>conftest.err + _lt_result=$? + if test -f libconftest.dylib && test ! -s conftest.err && test $_lt_result = 0; then + lt_cv_apple_cc_single_mod=yes + else + cat conftest.err >&5 + fi + rm -rf libconftest.dylib* + rm -f conftest.* + fi +fi +{ $as_echo "$as_me:$LINENO: result: $lt_cv_apple_cc_single_mod" >&5 +$as_echo "$lt_cv_apple_cc_single_mod" >&6; } + { $as_echo "$as_me:$LINENO: checking for -exported_symbols_list linker flag" >&5 +$as_echo_n "checking for -exported_symbols_list linker flag... " >&6; } +if test "${lt_cv_ld_exported_symbols_list+set}" = set; then + $as_echo_n "(cached) " >&6 +else + lt_cv_ld_exported_symbols_list=no + save_LDFLAGS=$LDFLAGS + echo "_main" > conftest.sym + LDFLAGS="$LDFLAGS -Wl,-exported_symbols_list,conftest.sym" + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + $as_test_x conftest$ac_exeext + }; then + lt_cv_ld_exported_symbols_list=yes +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + lt_cv_ld_exported_symbols_list=no +fi + +rm -rf conftest.dSYM +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext + LDFLAGS="$save_LDFLAGS" + +fi +{ $as_echo "$as_me:$LINENO: result: $lt_cv_ld_exported_symbols_list" >&5 +$as_echo "$lt_cv_ld_exported_symbols_list" >&6; } + case $host_os in + rhapsody* | darwin1.[012]) + _lt_dar_allow_undefined='${wl}-undefined ${wl}suppress' ;; + darwin1.*) + _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; + darwin*) # darwin 5.x on + # if running on 10.5 or later, the deployment target defaults + # to the OS version, if on x86, and 10.4, the deployment + # target defaults to 10.4. Don't you love it? + case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in + 10.0,*86*-darwin8*|10.0,*-darwin[91]*) + _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;; + 10.[012]*) + _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; + 10.*) + _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;; + esac + ;; + esac + if test "$lt_cv_apple_cc_single_mod" = "yes"; then + _lt_dar_single_mod='$single_module' + fi + if test "$lt_cv_ld_exported_symbols_list" = "yes"; then + _lt_dar_export_syms=' ${wl}-exported_symbols_list,$output_objdir/${libname}-symbols.expsym' + else + _lt_dar_export_syms='~$NMEDIT -s $output_objdir/${libname}-symbols.expsym ${lib}' + fi + if test "$DSYMUTIL" != ":"; then + _lt_dsymutil='~$DSYMUTIL $lib || :' + else + _lt_dsymutil= + fi + ;; + esac + + +for ac_header in dlfcn.h +do +as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` +{ $as_echo "$as_me:$LINENO: checking for $ac_header" >&5 +$as_echo_n "checking for $ac_header... " >&6; } +if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then + $as_echo_n "(cached) " >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default + +#include <$ac_header> +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + eval "$as_ac_Header=yes" +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + eval "$as_ac_Header=no" +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +ac_res=`eval 'as_val=${'$as_ac_Header'} + $as_echo "$as_val"'` + { $as_echo "$as_me:$LINENO: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } +as_val=`eval 'as_val=${'$as_ac_Header'} + $as_echo "$as_val"'` + if test "x$as_val" = x""yes; then + cat >>confdefs.h <<_ACEOF +#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 +_ACEOF + +fi + +done + + + +# Set options + + + + enable_dlopen=no + + + enable_win32_dll=no + + + # Check whether --enable-shared was given. +if test "${enable_shared+set}" = set; then + enableval=$enable_shared; p=${PACKAGE-default} + case $enableval in + yes) enable_shared=yes ;; + no) enable_shared=no ;; + *) + enable_shared=no + # Look at the argument we got. We use all the common list separators. + lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," + for pkg in $enableval; do + IFS="$lt_save_ifs" + if test "X$pkg" = "X$p"; then + enable_shared=yes + fi + done + IFS="$lt_save_ifs" + ;; + esac +else + enable_shared=yes +fi + + + + + + + + + + # Check whether --enable-static was given. +if test "${enable_static+set}" = set; then + enableval=$enable_static; p=${PACKAGE-default} + case $enableval in + yes) enable_static=yes ;; + no) enable_static=no ;; + *) + enable_static=no + # Look at the argument we got. We use all the common list separators. + lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," + for pkg in $enableval; do + IFS="$lt_save_ifs" + if test "X$pkg" = "X$p"; then + enable_static=yes + fi + done + IFS="$lt_save_ifs" + ;; + esac +else + enable_static=yes +fi + + + + + + + + + + +# Check whether --with-pic was given. +if test "${with_pic+set}" = set; then + withval=$with_pic; pic_mode="$withval" +else + pic_mode=default +fi + + +test -z "$pic_mode" && pic_mode=default + + + + + + + + # Check whether --enable-fast-install was given. +if test "${enable_fast_install+set}" = set; then + enableval=$enable_fast_install; p=${PACKAGE-default} + case $enableval in + yes) enable_fast_install=yes ;; + no) enable_fast_install=no ;; + *) + enable_fast_install=no + # Look at the argument we got. We use all the common list separators. + lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," + for pkg in $enableval; do + IFS="$lt_save_ifs" + if test "X$pkg" = "X$p"; then + enable_fast_install=yes + fi + done + IFS="$lt_save_ifs" + ;; + esac +else + enable_fast_install=yes +fi + + + + + + + + + + + +# This can be used to rebuild libtool when needed +LIBTOOL_DEPS="$ltmain" + +# Always use our own libtool. +LIBTOOL='$(SHELL) $(top_builddir)/libtool' + + + + + + + + + + + + + + + + + + + + + + + + + +test -z "$LN_S" && LN_S="ln -s" + + + + + + + + + + + + + + +if test -n "${ZSH_VERSION+set}" ; then + setopt NO_GLOB_SUBST +fi + +{ $as_echo "$as_me:$LINENO: checking for objdir" >&5 +$as_echo_n "checking for objdir... " >&6; } +if test "${lt_cv_objdir+set}" = set; then + $as_echo_n "(cached) " >&6 +else + rm -f .libs 2>/dev/null +mkdir .libs 2>/dev/null +if test -d .libs; then + lt_cv_objdir=.libs +else + # MS-DOS does not allow filenames that begin with a dot. + lt_cv_objdir=_libs +fi +rmdir .libs 2>/dev/null +fi +{ $as_echo "$as_me:$LINENO: result: $lt_cv_objdir" >&5 +$as_echo "$lt_cv_objdir" >&6; } +objdir=$lt_cv_objdir + + + + + +cat >>confdefs.h <<_ACEOF +#define LT_OBJDIR "$lt_cv_objdir/" +_ACEOF + + + + + + + + + + + + + + + + + +case $host_os in +aix3*) + # AIX sometimes has problems with the GCC collect2 program. For some + # reason, if we set the COLLECT_NAMES environment variable, the problems + # vanish in a puff of smoke. + if test "X${COLLECT_NAMES+set}" != Xset; then + COLLECT_NAMES= + export COLLECT_NAMES + fi + ;; +esac + +# Sed substitution that helps us do robust quoting. It backslashifies +# metacharacters that are still active within double-quoted strings. +sed_quote_subst='s/\(["`$\\]\)/\\\1/g' + +# Same as above, but do not quote variable references. +double_quote_subst='s/\(["`\\]\)/\\\1/g' + +# Sed substitution to delay expansion of an escaped shell variable in a +# double_quote_subst'ed string. +delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g' + +# Sed substitution to delay expansion of an escaped single quote. +delay_single_quote_subst='s/'\''/'\'\\\\\\\'\''/g' + +# Sed substitution to avoid accidental globbing in evaled expressions +no_glob_subst='s/\*/\\\*/g' + +# Global variables: +ofile=libtool +can_build_shared=yes + +# All known linkers require a `.a' archive for static linking (except MSVC, +# which needs '.lib'). +libext=a + +with_gnu_ld="$lt_cv_prog_gnu_ld" + +old_CC="$CC" +old_CFLAGS="$CFLAGS" + +# Set sane defaults for various variables +test -z "$CC" && CC=cc +test -z "$LTCC" && LTCC=$CC +test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS +test -z "$LD" && LD=ld +test -z "$ac_objext" && ac_objext=o + +for cc_temp in $compiler""; do + case $cc_temp in + compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; + distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; + \-*) ;; + *) break;; + esac +done +cc_basename=`$ECHO "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"` + + +# Only perform the check for file, if the check method requires it +test -z "$MAGIC_CMD" && MAGIC_CMD=file +case $deplibs_check_method in +file_magic*) + if test "$file_magic_cmd" = '$MAGIC_CMD'; then + { $as_echo "$as_me:$LINENO: checking for ${ac_tool_prefix}file" >&5 +$as_echo_n "checking for ${ac_tool_prefix}file... " >&6; } +if test "${lt_cv_path_MAGIC_CMD+set}" = set; then + $as_echo_n "(cached) " >&6 +else + case $MAGIC_CMD in +[\\/*] | ?:[\\/]*) + lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path. + ;; +*) + lt_save_MAGIC_CMD="$MAGIC_CMD" + lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR + ac_dummy="/usr/bin$PATH_SEPARATOR$PATH" + for ac_dir in $ac_dummy; do + IFS="$lt_save_ifs" + test -z "$ac_dir" && ac_dir=. + if test -f $ac_dir/${ac_tool_prefix}file; then + lt_cv_path_MAGIC_CMD="$ac_dir/${ac_tool_prefix}file" + if test -n "$file_magic_test_file"; then + case $deplibs_check_method in + "file_magic "*) + file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` + MAGIC_CMD="$lt_cv_path_MAGIC_CMD" + if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | + $EGREP "$file_magic_regex" > /dev/null; then + : + else + cat <<_LT_EOF 1>&2 + +*** Warning: the command libtool uses to detect shared libraries, +*** $file_magic_cmd, produces output that libtool cannot recognize. +*** The result is that libtool may fail to recognize shared libraries +*** as such. This will affect the creation of libtool libraries that +*** depend on shared libraries, but programs linked with such libtool +*** libraries will work regardless of this problem. Nevertheless, you +*** may want to report the problem to your system manager and/or to +*** bug-libtool@gnu.org + +_LT_EOF + fi ;; + esac + fi + break + fi + done + IFS="$lt_save_ifs" + MAGIC_CMD="$lt_save_MAGIC_CMD" + ;; +esac +fi + +MAGIC_CMD="$lt_cv_path_MAGIC_CMD" +if test -n "$MAGIC_CMD"; then + { $as_echo "$as_me:$LINENO: result: $MAGIC_CMD" >&5 +$as_echo "$MAGIC_CMD" >&6; } +else + { $as_echo "$as_me:$LINENO: result: no" >&5 +$as_echo "no" >&6; } +fi + + + + + +if test -z "$lt_cv_path_MAGIC_CMD"; then + if test -n "$ac_tool_prefix"; then + { $as_echo "$as_me:$LINENO: checking for file" >&5 +$as_echo_n "checking for file... " >&6; } +if test "${lt_cv_path_MAGIC_CMD+set}" = set; then + $as_echo_n "(cached) " >&6 +else + case $MAGIC_CMD in +[\\/*] | ?:[\\/]*) + lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path. + ;; +*) + lt_save_MAGIC_CMD="$MAGIC_CMD" + lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR + ac_dummy="/usr/bin$PATH_SEPARATOR$PATH" + for ac_dir in $ac_dummy; do + IFS="$lt_save_ifs" + test -z "$ac_dir" && ac_dir=. + if test -f $ac_dir/file; then + lt_cv_path_MAGIC_CMD="$ac_dir/file" + if test -n "$file_magic_test_file"; then + case $deplibs_check_method in + "file_magic "*) + file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` + MAGIC_CMD="$lt_cv_path_MAGIC_CMD" + if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | + $EGREP "$file_magic_regex" > /dev/null; then + : + else + cat <<_LT_EOF 1>&2 + +*** Warning: the command libtool uses to detect shared libraries, +*** $file_magic_cmd, produces output that libtool cannot recognize. +*** The result is that libtool may fail to recognize shared libraries +*** as such. This will affect the creation of libtool libraries that +*** depend on shared libraries, but programs linked with such libtool +*** libraries will work regardless of this problem. Nevertheless, you +*** may want to report the problem to your system manager and/or to +*** bug-libtool@gnu.org + +_LT_EOF + fi ;; + esac + fi + break + fi + done + IFS="$lt_save_ifs" + MAGIC_CMD="$lt_save_MAGIC_CMD" + ;; +esac +fi + +MAGIC_CMD="$lt_cv_path_MAGIC_CMD" +if test -n "$MAGIC_CMD"; then + { $as_echo "$as_me:$LINENO: result: $MAGIC_CMD" >&5 +$as_echo "$MAGIC_CMD" >&6; } +else + { $as_echo "$as_me:$LINENO: result: no" >&5 +$as_echo "no" >&6; } +fi + + + else + MAGIC_CMD=: + fi +fi + + fi + ;; +esac + +# Use C for the default configuration in the libtool script + +lt_save_CC="$CC" +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + +# Source file extension for C test sources. +ac_ext=c + +# Object file extension for compiled C test sources. +objext=o +objext=$objext + +# Code to be used in simple compile tests +lt_simple_compile_test_code="int some_variable = 0;" + +# Code to be used in simple link tests +lt_simple_link_test_code='int main(){return(0);}' + + + + + + + +# If no C compiler was specified, use CC. +LTCC=${LTCC-"$CC"} + +# If no C compiler flags were specified, use CFLAGS. +LTCFLAGS=${LTCFLAGS-"$CFLAGS"} + +# Allow CC to be a program name with arguments. +compiler=$CC + +# Save the default compiler, since it gets overwritten when the other +# tags are being tested, and _LT_TAGVAR(compiler, []) is a NOP. +compiler_DEFAULT=$CC + +# save warnings/boilerplate of simple test code +ac_outfile=conftest.$ac_objext +echo "$lt_simple_compile_test_code" >conftest.$ac_ext +eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err +_lt_compiler_boilerplate=`cat conftest.err` +$RM conftest* + +ac_outfile=conftest.$ac_objext +echo "$lt_simple_link_test_code" >conftest.$ac_ext +eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err +_lt_linker_boilerplate=`cat conftest.err` +$RM -r conftest* + + +## CAVEAT EMPTOR: +## There is no encapsulation within the following macros, do not change +## the running order or otherwise move them around unless you know exactly +## what you are doing... +if test -n "$compiler"; then + +lt_prog_compiler_no_builtin_flag= + +if test "$GCC" = yes; then + lt_prog_compiler_no_builtin_flag=' -fno-builtin' + + { $as_echo "$as_me:$LINENO: checking if $compiler supports -fno-rtti -fno-exceptions" >&5 +$as_echo_n "checking if $compiler supports -fno-rtti -fno-exceptions... " >&6; } +if test "${lt_cv_prog_compiler_rtti_exceptions+set}" = set; then + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler_rtti_exceptions=no + ac_outfile=conftest.$ac_objext + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + lt_compiler_flag="-fno-rtti -fno-exceptions" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + # The option is referenced via a variable to avoid confusing sed. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:8041: $lt_compile\"" >&5) + (eval "$lt_compile" 2>conftest.err) + ac_status=$? + cat conftest.err >&5 + echo "$as_me:8045: \$? = $ac_status" >&5 + if (exit $ac_status) && test -s "$ac_outfile"; then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings other than the usual output. + $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp + $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 + if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then + lt_cv_prog_compiler_rtti_exceptions=yes + fi + fi + $RM conftest* + +fi +{ $as_echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_rtti_exceptions" >&5 +$as_echo "$lt_cv_prog_compiler_rtti_exceptions" >&6; } + +if test x"$lt_cv_prog_compiler_rtti_exceptions" = xyes; then + lt_prog_compiler_no_builtin_flag="$lt_prog_compiler_no_builtin_flag -fno-rtti -fno-exceptions" +else + : +fi + +fi + + + + + + + lt_prog_compiler_wl= +lt_prog_compiler_pic= +lt_prog_compiler_static= + +{ $as_echo "$as_me:$LINENO: checking for $compiler option to produce PIC" >&5 +$as_echo_n "checking for $compiler option to produce PIC... " >&6; } + + if test "$GCC" = yes; then + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_static='-static' + + case $host_os in + aix*) + # All AIX code is PIC. + if test "$host_cpu" = ia64; then + # AIX 5 now supports IA64 processor + lt_prog_compiler_static='-Bstatic' + fi + ;; + + amigaos*) + case $host_cpu in + powerpc) + # see comment about AmigaOS4 .so support + lt_prog_compiler_pic='-fPIC' + ;; + m68k) + # FIXME: we need at least 68020 code to build shared libraries, but + # adding the `-m68020' flag to GCC prevents building anything better, + # like `-m68040'. + lt_prog_compiler_pic='-m68020 -resident32 -malways-restore-a4' + ;; + esac + ;; + + beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) + # PIC is the default for these OSes. + ;; + + mingw* | cygwin* | pw32* | os2* | cegcc*) + # This hack is so that the source file can tell whether it is being + # built for inclusion in a dll (and should export symbols for example). + # Although the cygwin gcc ignores -fPIC, still need this for old-style + # (--disable-auto-import) libraries + lt_prog_compiler_pic='-DDLL_EXPORT' + ;; + + darwin* | rhapsody*) + # PIC is the default on this platform + # Common symbols not allowed in MH_DYLIB files + lt_prog_compiler_pic='-fno-common' + ;; + + hpux*) + # PIC is the default for 64-bit PA HP-UX, but not for 32-bit + # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag + # sets the default TLS model and affects inlining. + case $host_cpu in + hppa*64*) + # +Z the default + ;; + *) + lt_prog_compiler_pic='-fPIC' + ;; + esac + ;; + + interix[3-9]*) + # Interix 3.x gcc -fpic/-fPIC options generate broken code. + # Instead, we relocate shared libraries at runtime. + ;; + + msdosdjgpp*) + # Just because we use GCC doesn't mean we suddenly get shared libraries + # on systems that don't support them. + lt_prog_compiler_can_build_shared=no + enable_shared=no + ;; + + *nto* | *qnx*) + # QNX uses GNU C++, but need to define -shared option too, otherwise + # it will coredump. + lt_prog_compiler_pic='-fPIC -shared' + ;; + + sysv4*MP*) + if test -d /usr/nec; then + lt_prog_compiler_pic=-Kconform_pic + fi + ;; + + *) + lt_prog_compiler_pic='-fPIC' + ;; + esac + else + # PORTME Check for flag to pass linker flags through the system compiler. + case $host_os in + aix*) + lt_prog_compiler_wl='-Wl,' + if test "$host_cpu" = ia64; then + # AIX 5 now supports IA64 processor + lt_prog_compiler_static='-Bstatic' + else + lt_prog_compiler_static='-bnso -bI:/lib/syscalls.exp' + fi + ;; + + mingw* | cygwin* | pw32* | os2* | cegcc*) + # This hack is so that the source file can tell whether it is being + # built for inclusion in a dll (and should export symbols for example). + lt_prog_compiler_pic='-DDLL_EXPORT' + ;; + + hpux9* | hpux10* | hpux11*) + lt_prog_compiler_wl='-Wl,' + # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but + # not for PA HP-UX. + case $host_cpu in + hppa*64*|ia64*) + # +Z the default + ;; + *) + lt_prog_compiler_pic='+Z' + ;; + esac + # Is there a better lt_prog_compiler_static that works with the bundled CC? + lt_prog_compiler_static='${wl}-a ${wl}archive' + ;; + + irix5* | irix6* | nonstopux*) + lt_prog_compiler_wl='-Wl,' + # PIC (with -KPIC) is the default. + lt_prog_compiler_static='-non_shared' + ;; + + linux* | k*bsd*-gnu) + case $cc_basename in + # old Intel for x86_64 which still supported -KPIC. + ecc*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-static' + ;; + # icc used to be incompatible with GCC. + # ICC 10 doesn't accept -KPIC any more. + icc* | ifort*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-fPIC' + lt_prog_compiler_static='-static' + ;; + # Lahey Fortran 8.1. + lf95*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='--shared' + lt_prog_compiler_static='--static' + ;; + pgcc* | pgf77* | pgf90* | pgf95*) + # Portland Group compilers (*not* the Pentium gcc compiler, + # which looks to be a dead project) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-fpic' + lt_prog_compiler_static='-Bstatic' + ;; + ccc*) + lt_prog_compiler_wl='-Wl,' + # All Alpha code is PIC. + lt_prog_compiler_static='-non_shared' + ;; + xl*) + # IBM XL C 8.0/Fortran 10.1 on PPC + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-qpic' + lt_prog_compiler_static='-qstaticlink' + ;; + *) + case `$CC -V 2>&1 | sed 5q` in + *Sun\ C*) + # Sun C 5.9 + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-Bstatic' + lt_prog_compiler_wl='-Wl,' + ;; + *Sun\ F*) + # Sun Fortran 8.3 passes all unrecognized flags to the linker + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-Bstatic' + lt_prog_compiler_wl='' + ;; + esac + ;; + esac + ;; + + newsos6) + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-Bstatic' + ;; + + *nto* | *qnx*) + # QNX uses GNU C++, but need to define -shared option too, otherwise + # it will coredump. + lt_prog_compiler_pic='-fPIC -shared' + ;; + + osf3* | osf4* | osf5*) + lt_prog_compiler_wl='-Wl,' + # All OSF/1 code is PIC. + lt_prog_compiler_static='-non_shared' + ;; + + rdos*) + lt_prog_compiler_static='-non_shared' + ;; + + solaris*) + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-Bstatic' + case $cc_basename in + f77* | f90* | f95*) + lt_prog_compiler_wl='-Qoption ld ';; + *) + lt_prog_compiler_wl='-Wl,';; + esac + ;; + + sunos4*) + lt_prog_compiler_wl='-Qoption ld ' + lt_prog_compiler_pic='-PIC' + lt_prog_compiler_static='-Bstatic' + ;; + + sysv4 | sysv4.2uw2* | sysv4.3*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-Bstatic' + ;; + + sysv4*MP*) + if test -d /usr/nec ;then + lt_prog_compiler_pic='-Kconform_pic' + lt_prog_compiler_static='-Bstatic' + fi + ;; + + sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-Bstatic' + ;; + + unicos*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_can_build_shared=no + ;; + + uts4*) + lt_prog_compiler_pic='-pic' + lt_prog_compiler_static='-Bstatic' + ;; + + *) + lt_prog_compiler_can_build_shared=no + ;; + esac + fi + +case $host_os in + # For platforms which do not support PIC, -DPIC is meaningless: + *djgpp*) + lt_prog_compiler_pic= + ;; + *) + lt_prog_compiler_pic="$lt_prog_compiler_pic -DPIC" + ;; +esac +{ $as_echo "$as_me:$LINENO: result: $lt_prog_compiler_pic" >&5 +$as_echo "$lt_prog_compiler_pic" >&6; } + + + + + + +# +# Check to make sure the PIC flag actually works. +# +if test -n "$lt_prog_compiler_pic"; then + { $as_echo "$as_me:$LINENO: checking if $compiler PIC flag $lt_prog_compiler_pic works" >&5 +$as_echo_n "checking if $compiler PIC flag $lt_prog_compiler_pic works... " >&6; } +if test "${lt_cv_prog_compiler_pic_works+set}" = set; then + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler_pic_works=no + ac_outfile=conftest.$ac_objext + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + lt_compiler_flag="$lt_prog_compiler_pic -DPIC" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + # The option is referenced via a variable to avoid confusing sed. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:8380: $lt_compile\"" >&5) + (eval "$lt_compile" 2>conftest.err) + ac_status=$? + cat conftest.err >&5 + echo "$as_me:8384: \$? = $ac_status" >&5 + if (exit $ac_status) && test -s "$ac_outfile"; then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings other than the usual output. + $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp + $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 + if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then + lt_cv_prog_compiler_pic_works=yes + fi + fi + $RM conftest* + +fi +{ $as_echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_pic_works" >&5 +$as_echo "$lt_cv_prog_compiler_pic_works" >&6; } + +if test x"$lt_cv_prog_compiler_pic_works" = xyes; then + case $lt_prog_compiler_pic in + "" | " "*) ;; + *) lt_prog_compiler_pic=" $lt_prog_compiler_pic" ;; + esac +else + lt_prog_compiler_pic= + lt_prog_compiler_can_build_shared=no +fi + +fi + + + + + + +# +# Check to make sure the static flag actually works. +# +wl=$lt_prog_compiler_wl eval lt_tmp_static_flag=\"$lt_prog_compiler_static\" +{ $as_echo "$as_me:$LINENO: checking if $compiler static flag $lt_tmp_static_flag works" >&5 +$as_echo_n "checking if $compiler static flag $lt_tmp_static_flag works... " >&6; } +if test "${lt_cv_prog_compiler_static_works+set}" = set; then + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler_static_works=no + save_LDFLAGS="$LDFLAGS" + LDFLAGS="$LDFLAGS $lt_tmp_static_flag" + echo "$lt_simple_link_test_code" > conftest.$ac_ext + if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then + # The linker can only warn and ignore the option if not recognized + # So say no if there are warnings + if test -s conftest.err; then + # Append any errors to the config.log. + cat conftest.err 1>&5 + $ECHO "X$_lt_linker_boilerplate" | $Xsed -e '/^$/d' > conftest.exp + $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 + if diff conftest.exp conftest.er2 >/dev/null; then + lt_cv_prog_compiler_static_works=yes + fi + else + lt_cv_prog_compiler_static_works=yes + fi + fi + $RM -r conftest* + LDFLAGS="$save_LDFLAGS" + +fi +{ $as_echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_static_works" >&5 +$as_echo "$lt_cv_prog_compiler_static_works" >&6; } + +if test x"$lt_cv_prog_compiler_static_works" = xyes; then + : +else + lt_prog_compiler_static= +fi + + + + + + + + { $as_echo "$as_me:$LINENO: checking if $compiler supports -c -o file.$ac_objext" >&5 +$as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } +if test "${lt_cv_prog_compiler_c_o+set}" = set; then + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler_c_o=no + $RM -r conftest 2>/dev/null + mkdir conftest + cd conftest + mkdir out + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + + lt_compiler_flag="-o out/conftest2.$ac_objext" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:8485: $lt_compile\"" >&5) + (eval "$lt_compile" 2>out/conftest.err) + ac_status=$? + cat out/conftest.err >&5 + echo "$as_me:8489: \$? = $ac_status" >&5 + if (exit $ac_status) && test -s out/conftest2.$ac_objext + then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings + $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' > out/conftest.exp + $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 + if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then + lt_cv_prog_compiler_c_o=yes + fi + fi + chmod u+w . 2>&5 + $RM conftest* + # SGI C++ compiler will create directory out/ii_files/ for + # template instantiation + test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files + $RM out/* && rmdir out + cd .. + $RM -r conftest + $RM conftest* + +fi +{ $as_echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_c_o" >&5 +$as_echo "$lt_cv_prog_compiler_c_o" >&6; } + + + + + + + { $as_echo "$as_me:$LINENO: checking if $compiler supports -c -o file.$ac_objext" >&5 +$as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } +if test "${lt_cv_prog_compiler_c_o+set}" = set; then + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler_c_o=no + $RM -r conftest 2>/dev/null + mkdir conftest + cd conftest + mkdir out + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + + lt_compiler_flag="-o out/conftest2.$ac_objext" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:8540: $lt_compile\"" >&5) + (eval "$lt_compile" 2>out/conftest.err) + ac_status=$? + cat out/conftest.err >&5 + echo "$as_me:8544: \$? = $ac_status" >&5 + if (exit $ac_status) && test -s out/conftest2.$ac_objext + then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings + $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' > out/conftest.exp + $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 + if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then + lt_cv_prog_compiler_c_o=yes + fi + fi + chmod u+w . 2>&5 + $RM conftest* + # SGI C++ compiler will create directory out/ii_files/ for + # template instantiation + test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files + $RM out/* && rmdir out + cd .. + $RM -r conftest + $RM conftest* + +fi +{ $as_echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_c_o" >&5 +$as_echo "$lt_cv_prog_compiler_c_o" >&6; } + + + + +hard_links="nottested" +if test "$lt_cv_prog_compiler_c_o" = no && test "$need_locks" != no; then + # do not overwrite the value of need_locks provided by the user + { $as_echo "$as_me:$LINENO: checking if we can lock with hard links" >&5 +$as_echo_n "checking if we can lock with hard links... " >&6; } + hard_links=yes + $RM conftest* + ln conftest.a conftest.b 2>/dev/null && hard_links=no + touch conftest.a + ln conftest.a conftest.b 2>&5 || hard_links=no + ln conftest.a conftest.b 2>/dev/null && hard_links=no + { $as_echo "$as_me:$LINENO: result: $hard_links" >&5 +$as_echo "$hard_links" >&6; } + if test "$hard_links" = no; then + { $as_echo "$as_me:$LINENO: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5 +$as_echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;} + need_locks=warn + fi +else + need_locks=no +fi + + + + + + + { $as_echo "$as_me:$LINENO: checking whether the $compiler linker ($LD) supports shared libraries" >&5 +$as_echo_n "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; } + + runpath_var= + allow_undefined_flag= + always_export_symbols=no + archive_cmds= + archive_expsym_cmds= + compiler_needs_object=no + enable_shared_with_static_runtimes=no + export_dynamic_flag_spec= + export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' + hardcode_automatic=no + hardcode_direct=no + hardcode_direct_absolute=no + hardcode_libdir_flag_spec= + hardcode_libdir_flag_spec_ld= + hardcode_libdir_separator= + hardcode_minus_L=no + hardcode_shlibpath_var=unsupported + inherit_rpath=no + link_all_deplibs=unknown + module_cmds= + module_expsym_cmds= + old_archive_from_new_cmds= + old_archive_from_expsyms_cmds= + thread_safe_flag_spec= + whole_archive_flag_spec= + # include_expsyms should be a list of space-separated symbols to be *always* + # included in the symbol list + include_expsyms= + # exclude_expsyms can be an extended regexp of symbols to exclude + # it will be wrapped by ` (' and `)$', so one must not match beginning or + # end of line. Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc', + # as well as any symbol that contains `d'. + exclude_expsyms='_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*' + # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out + # platforms (ab)use it in PIC code, but their linkers get confused if + # the symbol is explicitly referenced. Since portable code cannot + # rely on this symbol name, it's probably fine to never include it in + # preloaded symbol tables. + # Exclude shared library initialization/finalization symbols. + extract_expsyms_cmds= + + 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 + # If archive_cmds runs LD, not CC, wlarc should be empty + wlarc='${wl}' + + # 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. + runpath_var=LD_RUN_PATH + hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + export_dynamic_flag_spec='${wl}--export-dynamic' + # ancient GNU ld didn't support --whole-archive et. al. + if $LD --help 2>&1 | $GREP 'no-whole-archive' > /dev/null; then + whole_archive_flag_spec="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' + else + whole_archive_flag_spec= + fi + supports_anon_versioning=no + case `$LD -v 2>&1` in + *\ [01].* | *\ 2.[0-9].* | *\ 2.10.*) ;; # catch versions < 2.11 + *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ... + *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ... + *\ 2.11.*) ;; # other 2.11 versions + *) supports_anon_versioning=yes ;; + esac + + # See if GNU ld supports shared libraries. + 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 + cat <<_LT_EOF 1>&2 + +*** Warning: the GNU linker, at least up to release 2.9.1, is reported +*** to be unable to reliably create shared libraries on AIX. +*** Therefore, libtool is disabling shared libraries support. If you +*** really care for shared libraries, you may want to modify your PATH +*** so that a non-GNU linker is found, and then restart. + +_LT_EOF + fi + ;; + + amigaos*) + case $host_cpu in + powerpc) + # see comment about AmigaOS4 .so support + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds='' + ;; + m68k) + archive_cmds='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' + hardcode_libdir_flag_spec='-L$libdir' + hardcode_minus_L=yes + ;; + esac + ;; + + beos*) + if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + allow_undefined_flag=unsupported + # Joseph Beckenbach says some releases of gcc + # support --undefined. This deserves some investigation. FIXME + archive_cmds='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + else + ld_shlibs=no + fi + ;; + + cygwin* | mingw* | pw32* | cegcc*) + # _LT_TAGVAR(hardcode_libdir_flag_spec, ) is actually meaningless, + # as there is no search path for DLLs. + hardcode_libdir_flag_spec='-L$libdir' + allow_undefined_flag=unsupported + always_export_symbols=no + enable_shared_with_static_runtimes=yes + export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/'\'' | $SED -e '\''/^[AITW][ ]/s/.*[ ]//'\'' | sort | uniq > $export_symbols' + + if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' + # If the export-symbols file already is a .def file (1st line + # is EXPORTS), use it as is; otherwise, prepend... + archive_expsym_cmds='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then + cp $export_symbols $output_objdir/$soname.def; + else + echo EXPORTS > $output_objdir/$soname.def; + cat $export_symbols >> $output_objdir/$soname.def; + fi~ + $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' + else + ld_shlibs=no + fi + ;; + + interix[3-9]*) + hardcode_direct=no + hardcode_shlibpath_var=no + hardcode_libdir_flag_spec='${wl}-rpath,$libdir' + export_dynamic_flag_spec='${wl}-E' + # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. + # Instead, shared libraries are loaded at an image base (0x10000000 by + # default) and relocated if they conflict, which is a slow very memory + # consuming and fragmenting process. To avoid this, we pick a random, + # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link + # time. Moving up from 0x10000000 also allows more sbrk(2) space. + archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' + archive_expsym_cmds='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' + ;; + + gnu* | linux* | tpf* | k*bsd*-gnu) + tmp_diet=no + if test "$host_os" = linux-dietlibc; then + case $cc_basename in + diet\ *) tmp_diet=yes;; # linux-dietlibc with static linking (!diet-dyn) + esac + fi + if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \ + && test "$tmp_diet" = no + then + tmp_addflag= + tmp_sharedflag='-shared' + case $cc_basename,$host_cpu in + pgcc*) # Portland Group C compiler + whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive' + tmp_addflag=' $pic_flag' + ;; + pgf77* | pgf90* | pgf95*) # Portland Group f77 and f90 compilers + whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive' + tmp_addflag=' $pic_flag -Mnomain' ;; + ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64 + tmp_addflag=' -i_dynamic' ;; + efc*,ia64* | ifort*,ia64*) # Intel Fortran compiler on ia64 + tmp_addflag=' -i_dynamic -nofor_main' ;; + ifc* | ifort*) # Intel Fortran compiler + tmp_addflag=' -nofor_main' ;; + lf95*) # Lahey Fortran 8.1 + whole_archive_flag_spec= + tmp_sharedflag='--shared' ;; + xl[cC]*) # IBM XL C 8.0 on PPC (deal with xlf below) + tmp_sharedflag='-qmkshrobj' + tmp_addflag= ;; + esac + case `$CC -V 2>&1 | sed 5q` in + *Sun\ C*) # Sun C 5.9 + whole_archive_flag_spec='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive' + compiler_needs_object=yes + tmp_sharedflag='-G' ;; + *Sun\ F*) # Sun Fortran 8.3 + tmp_sharedflag='-G' ;; + esac + archive_cmds='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + + if test "x$supports_anon_versioning" = xyes; then + archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~ + cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ + echo "local: *; };" >> $output_objdir/$libname.ver~ + $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' + fi + + case $cc_basename in + xlf*) + # IBM XL Fortran 10.1 on PPC cannot create shared libs itself + whole_archive_flag_spec='--whole-archive$convenience --no-whole-archive' + hardcode_libdir_flag_spec= + hardcode_libdir_flag_spec_ld='-rpath $libdir' + archive_cmds='$LD -shared $libobjs $deplibs $compiler_flags -soname $soname -o $lib' + if test "x$supports_anon_versioning" = xyes; then + archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~ + cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ + echo "local: *; };" >> $output_objdir/$libname.ver~ + $LD -shared $libobjs $deplibs $compiler_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib' + fi + ;; + esac + else + ld_shlibs=no + fi + ;; + + netbsd*) + if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then + archive_cmds='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' + wlarc= + else + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + fi + ;; + + solaris*) + if $LD -v 2>&1 | $GREP 'BFD 2\.8' > /dev/null; then + ld_shlibs=no + cat <<_LT_EOF 1>&2 + +*** Warning: The releases 2.8.* of the GNU linker cannot reliably +*** create shared libraries on Solaris systems. Therefore, libtool +*** is disabling shared libraries support. We urge you to upgrade GNU +*** binutils to release 2.9.1 or newer. Another option is to modify +*** your PATH or compiler configuration so that the native linker is +*** used, and then restart. + +_LT_EOF + elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + 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 + cat <<_LT_EOF 1>&2 + +*** Warning: Releases of the GNU linker prior to 2.16.91.0.3 can not +*** reliably create shared libraries on SCO systems. Therefore, libtool +*** is disabling shared libraries support. We urge you to upgrade GNU +*** binutils to release 2.16.91.0.3 or newer. Another option is to modify +*** your PATH or compiler configuration so that the native linker is +*** used, and then restart. + +_LT_EOF + ;; + *) + # For security reasons, it is highly recommended that you always + # use absolute paths for naming shared libraries, and exclude the + # DT_RUNPATH tag from executables and libraries. But doing so + # requires that you compile everything twice, which is a pain. + if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + else + ld_shlibs=no + fi + ;; + esac + ;; + + sunos4*) + archive_cmds='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' + wlarc= + hardcode_direct=yes + hardcode_shlibpath_var=no + ;; + + *) + if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + else + ld_shlibs=no + fi + ;; + esac + + if test "$ld_shlibs" = no; then + runpath_var= + hardcode_libdir_flag_spec= + export_dynamic_flag_spec= + whole_archive_flag_spec= + fi + else + # PORTME fill in a description of your system's linker (not GNU ld) + case $host_os in + aix3*) + allow_undefined_flag=unsupported + always_export_symbols=yes + archive_expsym_cmds='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname' + # Note: this linker hardcodes the directories in LIBPATH if there + # are no directories specified by -L. + hardcode_minus_L=yes + if test "$GCC" = yes && test -z "$lt_prog_compiler_static"; 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 + exp_sym_flag='-Bexport' + no_entry_flag="" + else + # If we're using GNU nm, then we don't want the "-C" option. + # -C means demangle to AIX nm, but means don't demangle with GNU nm + if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then + export_symbols_cmds='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' + else + export_symbols_cmds='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' + fi + 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 + + exp_sym_flag='-bexport' + no_entry_flag='-bnoentry' + fi + + # When large executables or shared objects are built, AIX ld can + # have problems creating the table of contents. If linking a library + # or program results in "error TOC overflow" add -mminimal-toc to + # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not + # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. + + archive_cmds='' + hardcode_direct=yes + hardcode_direct_absolute=yes + hardcode_libdir_separator=':' + link_all_deplibs=yes + file_list_spec='${wl}-f,' + + if test "$GCC" = yes; then + case $host_os in aix4.[012]|aix4.[012].*) + # We only want to do this on AIX 4.2 and lower, the check + # below for broken collect2 doesn't work under 4.3+ + 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 + # It fails to find uninstalled libraries when the uninstalled + # path is not listed in the libpath. Setting hardcode_minus_L + # to unsupported forces relinking + hardcode_minus_L=yes + hardcode_libdir_flag_spec='-L$libdir' + hardcode_libdir_separator= + fi + ;; + esac + shared_flag='-shared' + if test "$aix_use_runtimelinking" = yes; then + shared_flag="$shared_flag "'${wl}-G' + fi + else + # not using gcc + if test "$host_cpu" = ia64; then + # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release + # chokes on -Wl,-G. The following line is correct: + shared_flag='-G' + else + if test "$aix_use_runtimelinking" = yes; then + shared_flag='${wl}-G' + else + shared_flag='${wl}-bM:SRE' + fi + fi + fi + + export_dynamic_flag_spec='${wl}-bexpall' + # It seems that -bexpall does not export symbols beginning with + # underscore (_), so it is better to generate a list of symbols to export. + always_export_symbols=yes + if test "$aix_use_runtimelinking" = yes; then + # Warning - without using the other runtime loading flags (-brtl), + # -berok will link without error, but may produce a broken library. + allow_undefined_flag='-berok' + # Determine the default libpath from the value encoded in an + # empty executable. + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + $as_test_x conftest$ac_exeext + }; then + +lt_aix_libpath_sed=' + /Import File Strings/,/^$/ { + /^0/ { + s/^0 *\(.*\)$/\1/ + p + } + }' +aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` +# Check for a 64-bit object if we didn't find anything. +if test -z "$aix_libpath"; then + aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` +fi +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + +fi + +rm -rf conftest.dSYM +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext +if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi + + hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath" + archive_expsym_cmds='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then $ECHO "X${wl}${allow_undefined_flag}" | $Xsed; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" + else + if test "$host_cpu" = ia64; then + hardcode_libdir_flag_spec='${wl}-R $libdir:/usr/lib:/lib' + allow_undefined_flag="-z nodefs" + archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" + else + # Determine the default libpath from the value encoded in an + # empty executable. + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + $as_test_x conftest$ac_exeext + }; then + +lt_aix_libpath_sed=' + /Import File Strings/,/^$/ { + /^0/ { + s/^0 *\(.*\)$/\1/ + p + } + }' +aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` +# Check for a 64-bit object if we didn't find anything. +if test -z "$aix_libpath"; then + aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` +fi +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + +fi + +rm -rf conftest.dSYM +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext +if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi + + hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath" + # Warning - without using the other run time loading flags, + # -berok will link without error, but may produce a broken library. + no_undefined_flag=' ${wl}-bernotok' + allow_undefined_flag=' ${wl}-berok' + # Exported symbols can be pulled into shared objects from archives + whole_archive_flag_spec='$convenience' + archive_cmds_need_lc=yes + # This is similar to how AIX traditionally builds its shared libraries. + archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' + fi + fi + ;; + + amigaos*) + case $host_cpu in + powerpc) + # see comment about AmigaOS4 .so support + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds='' + ;; + m68k) + archive_cmds='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' + hardcode_libdir_flag_spec='-L$libdir' + hardcode_minus_L=yes + ;; + esac + ;; + + bsdi[45]*) + export_dynamic_flag_spec=-rdynamic + ;; + + 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=' ' + allow_undefined_flag=unsupported + # Tell ltmain to make .lib files, not .a files. + libext=lib + # Tell ltmain to make .dll files, not .so files. + shrext_cmds=".dll" + # FIXME: Setting linknames here is a bad hack. + archive_cmds='$CC -o $lib $libobjs $compiler_flags `$ECHO "X$deplibs" | $Xsed -e '\''s/ -lc$//'\''` -link -dll~linknames=' + # The linker will automatically build a .lib file if we build a DLL. + old_archive_from_new_cmds='true' + # FIXME: Should let the user specify the lib program. + old_archive_cmds='lib -OUT:$oldlib$oldobjs$old_deplibs' + fix_srcfile_path='`cygpath -w "$srcfile"`' + enable_shared_with_static_runtimes=yes + ;; + + darwin* | rhapsody*) + + + archive_cmds_need_lc=no + hardcode_direct=no + hardcode_automatic=yes + hardcode_shlibpath_var=unsupported + whole_archive_flag_spec='' + link_all_deplibs=yes + allow_undefined_flag="$_lt_dar_allow_undefined" + case $cc_basename in + ifort*) _lt_dar_can_shared=yes ;; + *) _lt_dar_can_shared=$GCC ;; + esac + if test "$_lt_dar_can_shared" = "yes"; then + output_verbose_link_cmd=echo + archive_cmds="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}" + module_cmds="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}" + archive_expsym_cmds="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}" + module_expsym_cmds="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}" + + else + ld_shlibs=no + fi + + ;; + + dgux*) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_libdir_flag_spec='-L$libdir' + hardcode_shlibpath_var=no + ;; + + freebsd1*) + ld_shlibs=no + ;; + + # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor + # support. Future versions do this automatically, but an explicit c++rt0.o + # does not break anything, and helps significantly (at the cost of a little + # extra space). + freebsd2.2*) + archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o' + hardcode_libdir_flag_spec='-R$libdir' + hardcode_direct=yes + hardcode_shlibpath_var=no + ;; + + # Unfortunately, older versions of FreeBSD 2 do not have this feature. + freebsd2*) + archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' + hardcode_direct=yes + hardcode_minus_L=yes + hardcode_shlibpath_var=no + ;; + + # FreeBSD 3 and greater uses gcc -shared to do shared libraries. + freebsd* | dragonfly*) + archive_cmds='$CC -shared -o $lib $libobjs $deplibs $compiler_flags' + hardcode_libdir_flag_spec='-R$libdir' + hardcode_direct=yes + hardcode_shlibpath_var=no + ;; + + hpux9*) + if test "$GCC" = yes; then + archive_cmds='$RM $output_objdir/$soname~$CC -shared -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' + else + archive_cmds='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' + fi + 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 + export_dynamic_flag_spec='${wl}-E' + ;; + + hpux10*) + if test "$GCC" = yes -a "$with_gnu_ld" = no; then + archive_cmds='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' + else + archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' + fi + if test "$with_gnu_ld" = no; then + hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' + hardcode_libdir_flag_spec_ld='+b $libdir' + hardcode_libdir_separator=: + hardcode_direct=yes + hardcode_direct_absolute=yes + export_dynamic_flag_spec='${wl}-E' + # 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 "$GCC" = yes -a "$with_gnu_ld" = no; then + case $host_cpu in + hppa*64*) + archive_cmds='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + ia64*) + archive_cmds='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' + ;; + *) + archive_cmds='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' + ;; + esac + else + case $host_cpu in + hppa*64*) + archive_cmds='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + ia64*) + archive_cmds='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' + ;; + *) + archive_cmds='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' + ;; + esac + fi + 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_shlibpath_var=no + ;; + *) + hardcode_direct=yes + hardcode_direct_absolute=yes + export_dynamic_flag_spec='${wl}-E' + + # 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*) + if test "$GCC" = yes; then + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + # Try to use the -exported_symbol ld option, if it does not + # work, assume that -exports_file does not work either and + # implicitly export all symbols. + save_LDFLAGS="$LDFLAGS" + LDFLAGS="$LDFLAGS -shared ${wl}-exported_symbol ${wl}foo ${wl}-update_registry ${wl}/dev/null" + cat >conftest.$ac_ext <<_ACEOF +int foo(void) {} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + $as_test_x conftest$ac_exeext + }; then + archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib' + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + +fi + +rm -rf conftest.dSYM +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext + LDFLAGS="$save_LDFLAGS" + else + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib' + archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -exports_file $export_symbols -o $lib' + fi + archive_cmds_need_lc='no' + hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + hardcode_libdir_separator=: + inherit_rpath=yes + link_all_deplibs=yes + ;; + + netbsd*) + if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then + archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out + else + archive_cmds='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF + fi + hardcode_libdir_flag_spec='-R$libdir' + hardcode_direct=yes + hardcode_shlibpath_var=no + ;; + + newsos6) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_direct=yes + hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + hardcode_libdir_separator=: + hardcode_shlibpath_var=no + ;; + + *nto* | *qnx*) + ;; + + openbsd*) + if test -f /usr/libexec/ld.so; then + hardcode_direct=yes + hardcode_shlibpath_var=no + hardcode_direct_absolute=yes + if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols' + hardcode_libdir_flag_spec='${wl}-rpath,$libdir' + export_dynamic_flag_spec='${wl}-E' + else + case $host_os in + openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*) + archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' + hardcode_libdir_flag_spec='-R$libdir' + ;; + *) + archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' + 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 + allow_undefined_flag=unsupported + archive_cmds='$ECHO "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~$ECHO DATA >> $output_objdir/$libname.def~$ECHO " SINGLE NONSHARED" >> $output_objdir/$libname.def~$ECHO EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def' + old_archive_from_new_cmds='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def' + ;; + + osf3*) + if test "$GCC" = yes; then + allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*' + archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + else + allow_undefined_flag=' -expect_unresolved \*' + archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib' + fi + archive_cmds_need_lc='no' + hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + hardcode_libdir_separator=: + ;; + + osf4* | osf5*) # as osf3* with the addition of -msym flag + if test "$GCC" = yes; then + allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*' + archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + else + allow_undefined_flag=' -expect_unresolved \*' + archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib' + archive_expsym_cmds='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; printf "%s\\n" "-hidden">> $lib.exp~ + $CC -shared${allow_undefined_flag} ${wl}-input ${wl}$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib~$RM $lib.exp' + + # Both c and cxx compiler support -rpath directly + hardcode_libdir_flag_spec='-rpath $libdir' + fi + archive_cmds_need_lc='no' + hardcode_libdir_separator=: + ;; + + solaris*) + no_undefined_flag=' -z defs' + if test "$GCC" = yes; then + wlarc='${wl}' + archive_cmds='$CC -shared ${wl}-z ${wl}text ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $CC -shared ${wl}-z ${wl}text ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' + else + case `$CC -V 2>&1` in + *"Compilers 5.0"*) + wlarc='' + archive_cmds='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags' + archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$RM $lib.exp' + ;; + *) + wlarc='${wl}' + archive_cmds='$CC -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $CC -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' + ;; + esac + fi + hardcode_libdir_flag_spec='-R$libdir' + hardcode_shlibpath_var=no + case $host_os in + solaris2.[0-5] | solaris2.[0-5].*) ;; + *) + # The compiler driver will combine and reorder linker options, + # but understands `-z linker_flag'. GCC discards it without `$wl', + # but is careful enough not to reorder. + # Supported since Solaris 2.6 (maybe 2.5.1?) + if test "$GCC" = yes; then + whole_archive_flag_spec='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' + else + whole_archive_flag_spec='-z allextract$convenience -z defaultextract' + fi + ;; + esac + link_all_deplibs=yes + ;; + + sunos4*) + if test "x$host_vendor" = xsequent; then + # Use $CC to link under sequent, because it throws in some extra .o + # files that make .init and .fini sections work. + archive_cmds='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags' + else + archive_cmds='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' + fi + hardcode_libdir_flag_spec='-L$libdir' + hardcode_direct=yes + hardcode_minus_L=yes + hardcode_shlibpath_var=no + ;; + + sysv4) + case $host_vendor in + sni) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_direct=yes # is this really true??? + ;; + siemens) + ## LD is ld it makes a PLAMLIB + ## CC just makes a GrossModule. + archive_cmds='$LD -G -o $lib $libobjs $deplibs $linker_flags' + reload_cmds='$CC -r -o $output$reload_objs' + hardcode_direct=no + ;; + motorola) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_direct=no #Motorola manual says yes, but my tests say they lie + ;; + esac + runpath_var='LD_RUN_PATH' + hardcode_shlibpath_var=no + ;; + + sysv4.3*) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_shlibpath_var=no + export_dynamic_flag_spec='-Bexport' + ;; + + sysv4*MP*) + if test -d /usr/nec; then + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_shlibpath_var=no + runpath_var=LD_RUN_PATH + hardcode_runpath_var=yes + ld_shlibs=yes + fi + ;; + + sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*) + no_undefined_flag='${wl}-z,text' + archive_cmds_need_lc=no + hardcode_shlibpath_var=no + runpath_var='LD_RUN_PATH' + + if test "$GCC" = yes; then + archive_cmds='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + else + archive_cmds='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + fi + ;; + + sysv5* | sco3.2v5* | sco5v6*) + # Note: We can NOT use -z defs as we might desire, because we do not + # link with -lc, and that would cause any symbols used from libc to + # always be unresolved, which means just about no library would + # ever link correctly. If we're not using GNU ld we use -z text + # though, which does catch some bad symbols but isn't as heavy-handed + # as -z defs. + no_undefined_flag='${wl}-z,text' + allow_undefined_flag='${wl}-z,nodefs' + archive_cmds_need_lc=no + hardcode_shlibpath_var=no + hardcode_libdir_flag_spec='${wl}-R,$libdir' + hardcode_libdir_separator=':' + link_all_deplibs=yes + export_dynamic_flag_spec='${wl}-Bexport' + runpath_var='LD_RUN_PATH' + + if test "$GCC" = yes; then + archive_cmds='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + else + archive_cmds='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + fi + ;; + + uts4*) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_libdir_flag_spec='-L$libdir' + hardcode_shlibpath_var=no + ;; + + *) + ld_shlibs=no + ;; + esac + + if test x$host_vendor = xsni; then + case $host in + sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) + export_dynamic_flag_spec='${wl}-Blargedynsym' + ;; + esac + fi + fi + +{ $as_echo "$as_me:$LINENO: result: $ld_shlibs" >&5 +$as_echo "$ld_shlibs" >&6; } +test "$ld_shlibs" = no && can_build_shared=no + +with_gnu_ld=$with_gnu_ld + + + + + + + + + + + + + + + +# +# Do we need to explicitly link libc? +# +case "x$archive_cmds_need_lc" in +x|xyes) + # Assume -lc should be added + archive_cmds_need_lc=yes + + if test "$enable_shared" = yes && test "$GCC" = yes; then + case $archive_cmds in + *'~'*) + # FIXME: we may have to deal with multi-command sequences. + ;; + '$CC '*) + # Test whether the compiler implicitly links with -lc since on some + # systems, -lgcc has to come before -lc. If gcc already passes -lc + # to ld, don't add -lc before -lgcc. + { $as_echo "$as_me:$LINENO: checking whether -lc should be explicitly linked in" >&5 +$as_echo_n "checking whether -lc should be explicitly linked in... " >&6; } + $RM conftest* + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + + if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } 2>conftest.err; then + soname=conftest + lib=conftest + libobjs=conftest.$ac_objext + deplibs= + wl=$lt_prog_compiler_wl + pic_flag=$lt_prog_compiler_pic + compiler_flags=-v + linker_flags=-v + verstring= + output_objdir=. + libname=conftest + lt_save_allow_undefined_flag=$allow_undefined_flag + allow_undefined_flag= + if { (eval echo "$as_me:$LINENO: \"$archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1\"") >&5 + (eval $archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } + then + archive_cmds_need_lc=no + else + archive_cmds_need_lc=yes + fi + allow_undefined_flag=$lt_save_allow_undefined_flag + else + cat conftest.err 1>&5 + fi + $RM conftest* + { $as_echo "$as_me:$LINENO: result: $archive_cmds_need_lc" >&5 +$as_echo "$archive_cmds_need_lc" >&6; } + ;; + esac + fi + ;; +esac + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + { $as_echo "$as_me:$LINENO: checking dynamic linker characteristics" >&5 +$as_echo_n "checking dynamic linker characteristics... " >&6; } + +if test "$GCC" = yes; then + case $host_os in + darwin*) lt_awk_arg="/^libraries:/,/LR/" ;; + *) lt_awk_arg="/^libraries:/" ;; + esac + lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e "s,=/,/,g"` + if $ECHO "$lt_search_path_spec" | $GREP ';' >/dev/null ; then + # if the path contains ";" then we assume it to be the separator + # otherwise default to the standard path separator (i.e. ":") - it is + # assumed that no part of a normal pathname contains ";" but that should + # okay in the real world where ";" in dirpaths is itself problematic. + lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED -e 's/;/ /g'` + else + lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` + fi + # Ok, now we have the path, separated by spaces, we can step through it + # and add multilib dir if necessary. + lt_tmp_lt_search_path_spec= + lt_multi_os_dir=`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null` + for lt_sys_path in $lt_search_path_spec; do + if test -d "$lt_sys_path/$lt_multi_os_dir"; then + lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path/$lt_multi_os_dir" + else + test -d "$lt_sys_path" && \ + lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path" + fi + done + lt_search_path_spec=`$ECHO $lt_tmp_lt_search_path_spec | awk ' +BEGIN {RS=" "; FS="/|\n";} { + lt_foo=""; + lt_count=0; + for (lt_i = NF; lt_i > 0; lt_i--) { + if ($lt_i != "" && $lt_i != ".") { + if ($lt_i == "..") { + lt_count++; + } else { + if (lt_count == 0) { + lt_foo="/" $lt_i lt_foo; + } else { + lt_count--; + } + } + } + } + if (lt_foo != "") { lt_freq[lt_foo]++; } + if (lt_freq[lt_foo] == 1) { print lt_foo; } +}'` + sys_lib_search_path_spec=`$ECHO $lt_search_path_spec` +else + sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" +fi +library_names_spec= +libname_spec='lib$name' +soname_spec= +shrext_cmds=".so" +postinstall_cmds= +postuninstall_cmds= +finish_cmds= +finish_eval= +shlibpath_var= +shlibpath_overrides_runpath=unknown +version_type=none +dynamic_linker="$host_os ld.so" +sys_lib_dlsearch_path_spec="/lib /usr/lib" +need_lib_prefix=unknown +hardcode_into_libs=no + +# when you set need_version to no, make sure it does not cause -set_version +# flags to be left without arguments +need_version=unknown + +case $host_os in +aix3*) + version_type=linux + library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a' + shlibpath_var=LIBPATH + + # AIX 3 has no versioning support, so we append a major version to the name. + soname_spec='${libname}${release}${shared_ext}$major' + ;; + +aix[4-9]*) + version_type=linux + need_lib_prefix=no + need_version=no + hardcode_into_libs=yes + if test "$host_cpu" = ia64; then + # AIX 5 supports IA64 + library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + else + # With GCC up to 2.95.x, collect2 would create an import file + # for dependence libraries. The import file would start with + # the line `#! .'. This would cause the generated library to + # depend on `.', always an invalid library. This was fixed in + # development snapshots of GCC prior to 3.0. + case $host_os in + aix4 | aix4.[01] | aix4.[01].*) + if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' + echo ' yes ' + echo '#endif'; } | ${CC} -E - | $GREP yes > /dev/null; then + : + else + can_build_shared=no + fi + ;; + esac + # AIX (on Power*) has no versioning support, so currently we can not hardcode correct + # soname into executable. Probably we can add versioning support to + # collect2, so additional links can be useful in future. + if test "$aix_use_runtimelinking" = yes; then + # If using run time linking (on AIX 4.2 or later) use lib.so + # instead of lib.a to let people know that these are not + # typical AIX shared libraries. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + else + # We preserve .a as extension for shared libraries through AIX4.2 + # and later when we are not doing run time linking. + library_names_spec='${libname}${release}.a $libname.a' + soname_spec='${libname}${release}${shared_ext}$major' + fi + shlibpath_var=LIBPATH + fi + ;; + +amigaos*) + case $host_cpu in + powerpc) + # Since July 2007 AmigaOS4 officially supports .so libraries. + # When compiling the executable, add -use-dynld -Lsobjs: to the compileline. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + ;; + m68k) + library_names_spec='$libname.ixlibrary $libname.a' + # Create ${libname}_ixlibrary.a entries in /sys/libs. + finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$ECHO "X$lib" | $Xsed -e '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' + ;; + esac + ;; + +beos*) + library_names_spec='${libname}${shared_ext}' + dynamic_linker="$host_os ld.so" + shlibpath_var=LIBRARY_PATH + ;; + +bsdi[45]*) + version_type=linux + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' + shlibpath_var=LD_LIBRARY_PATH + sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" + sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" + # the default ld.so.conf also contains /usr/contrib/lib and + # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow + # libtool to hard-code these into programs + ;; + +cygwin* | mingw* | pw32* | cegcc*) + version_type=windows + shrext_cmds=".dll" + need_version=no + need_lib_prefix=no + + case $GCC,$host_os in + yes,cygwin* | yes,mingw* | yes,pw32* | yes,cegcc*) + library_names_spec='$libname.dll.a' + # DLL is installed to $(libdir)/../bin by postinstall_cmds + postinstall_cmds='base_file=`basename \${file}`~ + dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ + dldir=$destdir/`dirname \$dlpath`~ + test -d \$dldir || mkdir -p \$dldir~ + $install_prog $dir/$dlname \$dldir/$dlname~ + chmod a+x \$dldir/$dlname~ + if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then + eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; + fi' + postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ + dlpath=$dir/\$dldll~ + $RM \$dlpath' + shlibpath_overrides_runpath=yes + + case $host_os in + cygwin*) + # Cygwin DLLs use 'cyg' prefix rather than 'lib' + soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' + sys_lib_search_path_spec="/usr/lib /lib/w32api /lib /usr/local/lib" + ;; + mingw* | cegcc*) + # MinGW DLLs use traditional 'lib' prefix + soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' + sys_lib_search_path_spec=`$CC -print-search-dirs | $GREP "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"` + if $ECHO "$sys_lib_search_path_spec" | $GREP ';[c-zC-Z]:/' >/dev/null; then + # It is most probably a Windows format PATH printed by + # mingw gcc, but we are running on Cygwin. Gcc prints its search + # path with ; separators, and with drive letters. We can handle the + # drive letters (cygwin fileutils understands them), so leave them, + # especially as we might pass files found there to a mingw objdump, + # which wouldn't understand a cygwinified path. Ahh. + sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` + else + sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` + fi + ;; + pw32*) + # pw32 DLLs use 'pw' prefix rather than 'lib' + library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' + ;; + esac + ;; + + *) + library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib' + ;; + esac + dynamic_linker='Win32 ld.exe' + # FIXME: first we should search . and the directory the executable is in + shlibpath_var=PATH + ;; + +darwin* | rhapsody*) + dynamic_linker="$host_os dyld" + version_type=darwin + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${major}$shared_ext ${libname}$shared_ext' + soname_spec='${libname}${release}${major}$shared_ext' + shlibpath_overrides_runpath=yes + shlibpath_var=DYLD_LIBRARY_PATH + shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' + + sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/local/lib" + sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' + ;; + +dgux*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + ;; + +freebsd1*) + dynamic_linker=no + ;; + +freebsd* | dragonfly*) + # DragonFly does not have aout. When/if they implement a new + # versioning mechanism, adjust this. + if test -x /usr/bin/objformat; then + objformat=`/usr/bin/objformat` + else + case $host_os in + freebsd[123]*) objformat=aout ;; + *) objformat=elf ;; + esac + fi + version_type=freebsd-$objformat + case $version_type in + freebsd-elf*) + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' + need_version=no + need_lib_prefix=no + ;; + freebsd-*) + library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix' + need_version=yes + ;; + esac + shlibpath_var=LD_LIBRARY_PATH + case $host_os in + freebsd2*) + shlibpath_overrides_runpath=yes + ;; + freebsd3.[01]* | freebsdelf3.[01]*) + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + freebsd3.[2-9]* | freebsdelf3.[2-9]* | \ + freebsd4.[0-5] | freebsdelf4.[0-5] | freebsd4.1.1 | freebsdelf4.1.1) + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + *) # from 4.6 on, and DragonFly + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + esac + ;; + +gnu*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + hardcode_into_libs=yes + ;; + +hpux9* | hpux10* | hpux11*) + # Give a soname corresponding to the major version so that dld.sl refuses to + # link against other versions. + version_type=sunos + need_lib_prefix=no + need_version=no + case $host_cpu in + ia64*) + shrext_cmds='.so' + hardcode_into_libs=yes + dynamic_linker="$host_os dld.so" + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + if test "X$HPUX_IA64_MODE" = X32; then + sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" + else + sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" + fi + sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec + ;; + hppa*64*) + shrext_cmds='.sl' + hardcode_into_libs=yes + dynamic_linker="$host_os dld.sl" + shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH + shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" + sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec + ;; + *) + shrext_cmds='.sl' + dynamic_linker="$host_os dld.sl" + shlibpath_var=SHLIB_PATH + shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + ;; + esac + # HP-UX runs *really* slowly unless shared libraries are mode 555. + postinstall_cmds='chmod 555 $lib' + ;; + +interix[3-9]*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + +irix5* | irix6* | nonstopux*) + case $host_os in + nonstopux*) version_type=nonstopux ;; + *) + if test "$lt_cv_prog_gnu_ld" = yes; then + version_type=linux + else + version_type=irix + fi ;; + esac + need_lib_prefix=no + need_version=no + soname_spec='${libname}${release}${shared_ext}$major' + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}' + case $host_os in + irix5* | nonstopux*) + libsuff= shlibsuff= + ;; + *) + case $LD in # libtool.m4 will add one of these switches to LD + *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") + libsuff= shlibsuff= libmagic=32-bit;; + *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") + libsuff=32 shlibsuff=N32 libmagic=N32;; + *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") + libsuff=64 shlibsuff=64 libmagic=64-bit;; + *) libsuff= shlibsuff= libmagic=never-match;; + esac + ;; + esac + shlibpath_var=LD_LIBRARY${shlibsuff}_PATH + shlibpath_overrides_runpath=no + sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" + sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" + hardcode_into_libs=yes + ;; + +# No shared lib support for Linux oldld, aout, or coff. +linux*oldld* | linux*aout* | linux*coff*) + dynamic_linker=no + ;; + +# This must be Linux ELF. +linux* | k*bsd*-gnu) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + # Some binutils ld are patched to set DT_RUNPATH + save_LDFLAGS=$LDFLAGS + save_libdir=$libdir + eval "libdir=/foo; wl=\"$lt_prog_compiler_wl\"; \ + LDFLAGS=\"\$LDFLAGS $hardcode_libdir_flag_spec\"" + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + $as_test_x conftest$ac_exeext + }; then + if ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null; then + shlibpath_overrides_runpath=yes +fi + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + +fi + +rm -rf conftest.dSYM +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext + LDFLAGS=$save_LDFLAGS + libdir=$save_libdir + + # This implies no fast_install, which is unacceptable. + # Some rework will be needed to allow for fast_install + # before this can be enabled. + hardcode_into_libs=yes + + # Append ld.so.conf contents to the search path + if test -f /etc/ld.so.conf; then + lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;/^$/d' | tr '\n' ' '` + sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" + fi + + # We used to test for /lib/ld.so.1 and disable shared libraries on + # powerpc, because MkLinux only supported shared libraries with the + # GNU dynamic linker. Since this was broken with cross compilers, + # most powerpc-linux boxes support dynamic linking these days and + # people can always --disable-shared, the test was removed, and we + # assume the GNU/Linux dynamic linker is in use. + dynamic_linker='GNU/Linux ld.so' + ;; + +netbsd*) + version_type=sunos + need_lib_prefix=no + need_version=no + if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' + dynamic_linker='NetBSD (a.out) ld.so' + else + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + dynamic_linker='NetBSD ld.elf_so' + fi + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + +newsos6) + version_type=linux + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + ;; + +*nto* | *qnx*) + version_type=qnx + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + dynamic_linker='ldqnx.so' + ;; + +openbsd*) + version_type=sunos + sys_lib_dlsearch_path_spec="/usr/lib" + need_lib_prefix=no + # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs. + case $host_os in + openbsd3.3 | openbsd3.3.*) need_version=yes ;; + *) need_version=no ;; + esac + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' + shlibpath_var=LD_LIBRARY_PATH + if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + case $host_os in + openbsd2.[89] | openbsd2.[89].*) + shlibpath_overrides_runpath=no + ;; + *) + shlibpath_overrides_runpath=yes + ;; + esac + else + shlibpath_overrides_runpath=yes + fi + ;; + +os2*) + libname_spec='$name' + shrext_cmds=".dll" + need_lib_prefix=no + library_names_spec='$libname${shared_ext} $libname.a' + dynamic_linker='OS/2 ld.exe' + shlibpath_var=LIBPATH + ;; + +osf3* | osf4* | osf5*) + version_type=osf + need_lib_prefix=no + need_version=no + soname_spec='${libname}${release}${shared_ext}$major' + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" + sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" + ;; + +rdos*) + dynamic_linker=no + ;; + +solaris*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + # ldd complains unless libraries are executable + postinstall_cmds='chmod +x $lib' + ;; + +sunos4*) + version_type=sunos + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + if test "$with_gnu_ld" = yes; then + need_lib_prefix=no + fi + need_version=yes + ;; + +sysv4 | sysv4.3*) + version_type=linux + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + case $host_vendor in + sni) + shlibpath_overrides_runpath=no + need_lib_prefix=no + runpath_var=LD_RUN_PATH + ;; + siemens) + need_lib_prefix=no + ;; + motorola) + need_lib_prefix=no + need_version=no + shlibpath_overrides_runpath=no + sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' + ;; + esac + ;; + +sysv4*MP*) + if test -d /usr/nec ;then + version_type=linux + library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}' + soname_spec='$libname${shared_ext}.$major' + shlibpath_var=LD_LIBRARY_PATH + fi + ;; + +sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) + version_type=freebsd-elf + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + if test "$with_gnu_ld" = yes; then + sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' + else + sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' + case $host_os in + sco3.2v5*) + sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" + ;; + esac + fi + sys_lib_dlsearch_path_spec='/usr/lib' + ;; + +tpf*) + # TPF is a cross-target only. Preferred cross-host = GNU/Linux. + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + +uts4*) + version_type=linux + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + ;; + +*) + dynamic_linker=no + ;; +esac +{ $as_echo "$as_me:$LINENO: result: $dynamic_linker" >&5 +$as_echo "$dynamic_linker" >&6; } +test "$dynamic_linker" = no && can_build_shared=no + +variables_saved_for_relink="PATH $shlibpath_var $runpath_var" +if test "$GCC" = yes; then + variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" +fi + +if test "${lt_cv_sys_lib_search_path_spec+set}" = set; then + sys_lib_search_path_spec="$lt_cv_sys_lib_search_path_spec" +fi +if test "${lt_cv_sys_lib_dlsearch_path_spec+set}" = set; then + sys_lib_dlsearch_path_spec="$lt_cv_sys_lib_dlsearch_path_spec" +fi + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + { $as_echo "$as_me:$LINENO: checking how to hardcode library paths into programs" >&5 +$as_echo_n "checking how to hardcode library paths into programs... " >&6; } +hardcode_action= +if test -n "$hardcode_libdir_flag_spec" || + test -n "$runpath_var" || + test "X$hardcode_automatic" = "Xyes" ; then + + # We can hardcode non-existent directories. + if test "$hardcode_direct" != no && + # If the only mechanism to avoid hardcoding is shlibpath_var, we + # have to relink, otherwise we might link with an installed library + # when we should be linking with a yet-to-be-installed one + ## test "$_LT_TAGVAR(hardcode_shlibpath_var, )" != no && + test "$hardcode_minus_L" != no; then + # Linking always hardcodes the temporary library directory. + hardcode_action=relink + else + # We can link without hardcoding, and we can hardcode nonexisting dirs. + hardcode_action=immediate + fi +else + # We cannot hardcode anything, or else we can only hardcode existing + # directories. + hardcode_action=unsupported +fi +{ $as_echo "$as_me:$LINENO: result: $hardcode_action" >&5 +$as_echo "$hardcode_action" >&6; } + +if test "$hardcode_action" = relink || + test "$inherit_rpath" = yes; then + # Fast installation is not supported + enable_fast_install=no +elif test "$shlibpath_overrides_runpath" = yes || + test "$enable_shared" = no; then + # Fast installation is not necessary + enable_fast_install=needless +fi + + + + + + + if test "x$enable_dlopen" != xyes; then + enable_dlopen=unknown + enable_dlopen_self=unknown + enable_dlopen_self_static=unknown +else + lt_cv_dlopen=no + lt_cv_dlopen_libs= + + case $host_os in + beos*) + lt_cv_dlopen="load_add_on" + lt_cv_dlopen_libs= + lt_cv_dlopen_self=yes + ;; + + mingw* | pw32* | cegcc*) + lt_cv_dlopen="LoadLibrary" + lt_cv_dlopen_libs= + ;; + + cygwin*) + lt_cv_dlopen="dlopen" + lt_cv_dlopen_libs= + ;; + + darwin*) + # if libdl is installed we need to link against it + { $as_echo "$as_me:$LINENO: checking for dlopen in -ldl" >&5 +$as_echo_n "checking for dlopen in -ldl... " >&6; } +if test "${ac_cv_lib_dl_dlopen+set}" = set; then + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ldl $LIBS" +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char dlopen (); +int +main () +{ +return dlopen (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + $as_test_x conftest$ac_exeext + }; then + ac_cv_lib_dl_dlopen=yes +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_cv_lib_dl_dlopen=no +fi + +rm -rf conftest.dSYM +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:$LINENO: result: $ac_cv_lib_dl_dlopen" >&5 +$as_echo "$ac_cv_lib_dl_dlopen" >&6; } +if test "x$ac_cv_lib_dl_dlopen" = x""yes; then + lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl" +else + + lt_cv_dlopen="dyld" + lt_cv_dlopen_libs= + lt_cv_dlopen_self=yes + +fi + + ;; + + *) + { $as_echo "$as_me:$LINENO: checking for shl_load" >&5 +$as_echo_n "checking for shl_load... " >&6; } +if test "${ac_cv_func_shl_load+set}" = set; then + $as_echo_n "(cached) " >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +/* Define shl_load to an innocuous variant, in case declares shl_load. + For example, HP-UX 11i declares gettimeofday. */ +#define shl_load innocuous_shl_load + +/* System header to define __stub macros and hopefully few prototypes, + which can conflict with char shl_load (); below. + Prefer to if __STDC__ is defined, since + exists even on freestanding compilers. */ + +#ifdef __STDC__ +# include +#else +# include +#endif + +#undef shl_load + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char shl_load (); +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined __stub_shl_load || defined __stub___shl_load +choke me +#endif + +int +main () +{ +return shl_load (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + $as_test_x conftest$ac_exeext + }; then + ac_cv_func_shl_load=yes +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_cv_func_shl_load=no +fi + +rm -rf conftest.dSYM +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext +fi +{ $as_echo "$as_me:$LINENO: result: $ac_cv_func_shl_load" >&5 +$as_echo "$ac_cv_func_shl_load" >&6; } +if test "x$ac_cv_func_shl_load" = x""yes; then + lt_cv_dlopen="shl_load" +else + { $as_echo "$as_me:$LINENO: checking for shl_load in -ldld" >&5 +$as_echo_n "checking for shl_load in -ldld... " >&6; } +if test "${ac_cv_lib_dld_shl_load+set}" = set; then + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ldld $LIBS" +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char shl_load (); +int +main () +{ +return shl_load (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + $as_test_x conftest$ac_exeext + }; then + ac_cv_lib_dld_shl_load=yes +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_cv_lib_dld_shl_load=no +fi + +rm -rf conftest.dSYM +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:$LINENO: result: $ac_cv_lib_dld_shl_load" >&5 +$as_echo "$ac_cv_lib_dld_shl_load" >&6; } +if test "x$ac_cv_lib_dld_shl_load" = x""yes; then + lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-ldld" +else + { $as_echo "$as_me:$LINENO: checking for dlopen" >&5 +$as_echo_n "checking for dlopen... " >&6; } +if test "${ac_cv_func_dlopen+set}" = set; then + $as_echo_n "(cached) " >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +/* Define dlopen to an innocuous variant, in case declares dlopen. + For example, HP-UX 11i declares gettimeofday. */ +#define dlopen innocuous_dlopen + +/* System header to define __stub macros and hopefully few prototypes, + which can conflict with char dlopen (); below. + Prefer to if __STDC__ is defined, since + exists even on freestanding compilers. */ + +#ifdef __STDC__ +# include +#else +# include +#endif + +#undef dlopen + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char dlopen (); +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined __stub_dlopen || defined __stub___dlopen +choke me +#endif + +int +main () +{ +return dlopen (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + $as_test_x conftest$ac_exeext + }; then + ac_cv_func_dlopen=yes +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_cv_func_dlopen=no +fi + +rm -rf conftest.dSYM +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext +fi +{ $as_echo "$as_me:$LINENO: result: $ac_cv_func_dlopen" >&5 +$as_echo "$ac_cv_func_dlopen" >&6; } +if test "x$ac_cv_func_dlopen" = x""yes; then + lt_cv_dlopen="dlopen" +else + { $as_echo "$as_me:$LINENO: checking for dlopen in -ldl" >&5 +$as_echo_n "checking for dlopen in -ldl... " >&6; } +if test "${ac_cv_lib_dl_dlopen+set}" = set; then + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ldl $LIBS" +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char dlopen (); +int +main () +{ +return dlopen (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + $as_test_x conftest$ac_exeext + }; then + ac_cv_lib_dl_dlopen=yes +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_cv_lib_dl_dlopen=no +fi + +rm -rf conftest.dSYM +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:$LINENO: result: $ac_cv_lib_dl_dlopen" >&5 +$as_echo "$ac_cv_lib_dl_dlopen" >&6; } +if test "x$ac_cv_lib_dl_dlopen" = x""yes; then + lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl" +else + { $as_echo "$as_me:$LINENO: checking for dlopen in -lsvld" >&5 +$as_echo_n "checking for dlopen in -lsvld... " >&6; } +if test "${ac_cv_lib_svld_dlopen+set}" = set; then + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lsvld $LIBS" +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char dlopen (); +int +main () +{ +return dlopen (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + $as_test_x conftest$ac_exeext + }; then + ac_cv_lib_svld_dlopen=yes +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_cv_lib_svld_dlopen=no +fi + +rm -rf conftest.dSYM +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:$LINENO: result: $ac_cv_lib_svld_dlopen" >&5 +$as_echo "$ac_cv_lib_svld_dlopen" >&6; } +if test "x$ac_cv_lib_svld_dlopen" = x""yes; then + lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld" +else + { $as_echo "$as_me:$LINENO: checking for dld_link in -ldld" >&5 +$as_echo_n "checking for dld_link in -ldld... " >&6; } +if test "${ac_cv_lib_dld_dld_link+set}" = set; then + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ldld $LIBS" +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char dld_link (); +int +main () +{ +return dld_link (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + $as_test_x conftest$ac_exeext + }; then + ac_cv_lib_dld_dld_link=yes +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_cv_lib_dld_dld_link=no +fi + +rm -rf conftest.dSYM +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:$LINENO: result: $ac_cv_lib_dld_dld_link" >&5 +$as_echo "$ac_cv_lib_dld_dld_link" >&6; } +if test "x$ac_cv_lib_dld_dld_link" = x""yes; then + lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-ldld" +fi + + +fi + + +fi + + +fi + + +fi + + +fi + + ;; + esac + + if test "x$lt_cv_dlopen" != xno; then + enable_dlopen=yes + else + enable_dlopen=no + fi + + case $lt_cv_dlopen in + dlopen) + save_CPPFLAGS="$CPPFLAGS" + test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H" + + save_LDFLAGS="$LDFLAGS" + wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\" + + save_LIBS="$LIBS" + LIBS="$lt_cv_dlopen_libs $LIBS" + + { $as_echo "$as_me:$LINENO: checking whether a program can dlopen itself" >&5 +$as_echo_n "checking whether a program can dlopen itself... " >&6; } +if test "${lt_cv_dlopen_self+set}" = set; then + $as_echo_n "(cached) " >&6 +else + if test "$cross_compiling" = yes; then : + lt_cv_dlopen_self=cross +else + lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 + lt_status=$lt_dlunknown + cat > conftest.$ac_ext <<_LT_EOF +#line 11340 "configure" +#include "confdefs.h" + +#if HAVE_DLFCN_H +#include +#endif + +#include + +#ifdef RTLD_GLOBAL +# define LT_DLGLOBAL RTLD_GLOBAL +#else +# ifdef DL_GLOBAL +# define LT_DLGLOBAL DL_GLOBAL +# else +# define LT_DLGLOBAL 0 +# endif +#endif + +/* We may have to define LT_DLLAZY_OR_NOW in the command line if we + find out it does not work in some platform. */ +#ifndef LT_DLLAZY_OR_NOW +# ifdef RTLD_LAZY +# define LT_DLLAZY_OR_NOW RTLD_LAZY +# else +# ifdef DL_LAZY +# define LT_DLLAZY_OR_NOW DL_LAZY +# else +# ifdef RTLD_NOW +# define LT_DLLAZY_OR_NOW RTLD_NOW +# else +# ifdef DL_NOW +# define LT_DLLAZY_OR_NOW DL_NOW +# else +# define LT_DLLAZY_OR_NOW 0 +# endif +# endif +# endif +# endif +#endif + +void fnord() { int i=42;} +int main () +{ + void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); + int status = $lt_dlunknown; + + if (self) + { + if (dlsym (self,"fnord")) status = $lt_dlno_uscore; + else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; + /* dlclose (self); */ + } + else + puts (dlerror ()); + + return status; +} +_LT_EOF + if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && test -s conftest${ac_exeext} 2>/dev/null; then + (./conftest; exit; ) >&5 2>/dev/null + lt_status=$? + case x$lt_status in + x$lt_dlno_uscore) lt_cv_dlopen_self=yes ;; + x$lt_dlneed_uscore) lt_cv_dlopen_self=yes ;; + x$lt_dlunknown|x*) lt_cv_dlopen_self=no ;; + esac + else : + # compilation failed + lt_cv_dlopen_self=no + fi +fi +rm -fr conftest* + + +fi +{ $as_echo "$as_me:$LINENO: result: $lt_cv_dlopen_self" >&5 +$as_echo "$lt_cv_dlopen_self" >&6; } + + if test "x$lt_cv_dlopen_self" = xyes; then + wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\" + { $as_echo "$as_me:$LINENO: checking whether a statically linked program can dlopen itself" >&5 +$as_echo_n "checking whether a statically linked program can dlopen itself... " >&6; } +if test "${lt_cv_dlopen_self_static+set}" = set; then + $as_echo_n "(cached) " >&6 +else + if test "$cross_compiling" = yes; then : + lt_cv_dlopen_self_static=cross +else + lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 + lt_status=$lt_dlunknown + cat > conftest.$ac_ext <<_LT_EOF +#line 11436 "configure" +#include "confdefs.h" + +#if HAVE_DLFCN_H +#include +#endif + +#include + +#ifdef RTLD_GLOBAL +# define LT_DLGLOBAL RTLD_GLOBAL +#else +# ifdef DL_GLOBAL +# define LT_DLGLOBAL DL_GLOBAL +# else +# define LT_DLGLOBAL 0 +# endif +#endif + +/* We may have to define LT_DLLAZY_OR_NOW in the command line if we + find out it does not work in some platform. */ +#ifndef LT_DLLAZY_OR_NOW +# ifdef RTLD_LAZY +# define LT_DLLAZY_OR_NOW RTLD_LAZY +# else +# ifdef DL_LAZY +# define LT_DLLAZY_OR_NOW DL_LAZY +# else +# ifdef RTLD_NOW +# define LT_DLLAZY_OR_NOW RTLD_NOW +# else +# ifdef DL_NOW +# define LT_DLLAZY_OR_NOW DL_NOW +# else +# define LT_DLLAZY_OR_NOW 0 +# endif +# endif +# endif +# endif +#endif + +void fnord() { int i=42;} +int main () +{ + void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); + int status = $lt_dlunknown; + + if (self) + { + if (dlsym (self,"fnord")) status = $lt_dlno_uscore; + else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; + /* dlclose (self); */ + } + else + puts (dlerror ()); + + return status; +} +_LT_EOF + if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && test -s conftest${ac_exeext} 2>/dev/null; then + (./conftest; exit; ) >&5 2>/dev/null + lt_status=$? + case x$lt_status in + x$lt_dlno_uscore) lt_cv_dlopen_self_static=yes ;; + x$lt_dlneed_uscore) lt_cv_dlopen_self_static=yes ;; + x$lt_dlunknown|x*) lt_cv_dlopen_self_static=no ;; + esac + else : + # compilation failed + lt_cv_dlopen_self_static=no + fi +fi +rm -fr conftest* + + +fi +{ $as_echo "$as_me:$LINENO: result: $lt_cv_dlopen_self_static" >&5 +$as_echo "$lt_cv_dlopen_self_static" >&6; } + fi + + CPPFLAGS="$save_CPPFLAGS" + LDFLAGS="$save_LDFLAGS" + LIBS="$save_LIBS" + ;; + esac + + case $lt_cv_dlopen_self in + yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;; + *) enable_dlopen_self=unknown ;; + esac + + case $lt_cv_dlopen_self_static in + yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;; + *) enable_dlopen_self_static=unknown ;; + esac +fi + + + + + + + + + + + + + + + + + +striplib= +old_striplib= +{ $as_echo "$as_me:$LINENO: checking whether stripping libraries is possible" >&5 +$as_echo_n "checking whether stripping libraries is possible... " >&6; } +if test -n "$STRIP" && $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then + test -z "$old_striplib" && old_striplib="$STRIP --strip-debug" + test -z "$striplib" && striplib="$STRIP --strip-unneeded" + { $as_echo "$as_me:$LINENO: result: yes" >&5 +$as_echo "yes" >&6; } +else +# FIXME - insert some real tests, host_os isn't really good enough + case $host_os in + darwin*) + if test -n "$STRIP" ; then + striplib="$STRIP -x" + old_striplib="$STRIP -S" + { $as_echo "$as_me:$LINENO: result: yes" >&5 +$as_echo "yes" >&6; } + else + { $as_echo "$as_me:$LINENO: result: no" >&5 +$as_echo "no" >&6; } + fi + ;; + *) + { $as_echo "$as_me:$LINENO: result: no" >&5 +$as_echo "no" >&6; } + ;; + esac +fi + + + + + + + + + + + + + # Report which library types will actually be built + { $as_echo "$as_me:$LINENO: checking if libtool supports shared libraries" >&5 +$as_echo_n "checking if libtool supports shared libraries... " >&6; } + { $as_echo "$as_me:$LINENO: result: $can_build_shared" >&5 +$as_echo "$can_build_shared" >&6; } + + { $as_echo "$as_me:$LINENO: checking whether to build shared libraries" >&5 +$as_echo_n "checking whether to build shared libraries... " >&6; } + test "$can_build_shared" = "no" && enable_shared=no + + # On AIX, shared libraries and static libraries use the same namespace, and + # are all built from PIC. + case $host_os in + aix3*) + test "$enable_shared" = yes && enable_static=no + if test -n "$RANLIB"; then + archive_cmds="$archive_cmds~\$RANLIB \$lib" + postinstall_cmds='$RANLIB $lib' + fi + ;; + + aix[4-9]*) + if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then + test "$enable_shared" = yes && enable_static=no + fi + ;; + esac + { $as_echo "$as_me:$LINENO: result: $enable_shared" >&5 +$as_echo "$enable_shared" >&6; } + + { $as_echo "$as_me:$LINENO: checking whether to build static libraries" >&5 +$as_echo_n "checking whether to build static libraries... " >&6; } + # Make sure either enable_shared or enable_static is yes. + test "$enable_shared" = yes || enable_static=yes + { $as_echo "$as_me:$LINENO: result: $enable_static" >&5 +$as_echo "$enable_static" >&6; } + + + + +fi +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + +CC="$lt_save_CC" + + + + + + + + + + + + + + ac_config_commands="$ac_config_commands libtool" + + + + +# Only expand once: + + +# Check whether --enable-largefile was given. +if test "${enable_largefile+set}" = set; then + enableval=$enable_largefile; +fi + +if test "$enable_largefile" != no; then + + { $as_echo "$as_me:$LINENO: checking for special C compiler options needed for large files" >&5 +$as_echo_n "checking for special C compiler options needed for large files... " >&6; } +if test "${ac_cv_sys_largefile_CC+set}" = set; then + $as_echo_n "(cached) " >&6 +else + ac_cv_sys_largefile_CC=no + if test "$GCC" != yes; then + ac_save_CC=$CC + while :; do + # IRIX 6.2 and later do not support large files by default, + # so use the C compiler's -n32 option if that helps. + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include + /* Check that off_t can represent 2**63 - 1 correctly. + We can't simply define LARGE_OFF_T to be 9223372036854775807, + since some C++ compilers masquerading as C compilers + incorrectly reject 9223372036854775807. */ +#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) + int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 + && LARGE_OFF_T % 2147483647 == 1) + ? 1 : -1]; +int +main () +{ + + ; + return 0; +} +_ACEOF + rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + break +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + +fi + +rm -f core conftest.err conftest.$ac_objext + CC="$CC -n32" + rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_cv_sys_largefile_CC=' -n32'; break +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + +fi + +rm -f core conftest.err conftest.$ac_objext + break + done + CC=$ac_save_CC + rm -f conftest.$ac_ext + fi +fi +{ $as_echo "$as_me:$LINENO: result: $ac_cv_sys_largefile_CC" >&5 +$as_echo "$ac_cv_sys_largefile_CC" >&6; } + if test "$ac_cv_sys_largefile_CC" != no; then + CC=$CC$ac_cv_sys_largefile_CC + fi + + { $as_echo "$as_me:$LINENO: checking for _FILE_OFFSET_BITS value needed for large files" >&5 +$as_echo_n "checking for _FILE_OFFSET_BITS value needed for large files... " >&6; } +if test "${ac_cv_sys_file_offset_bits+set}" = set; then + $as_echo_n "(cached) " >&6 +else + while :; do + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include + /* Check that off_t can represent 2**63 - 1 correctly. + We can't simply define LARGE_OFF_T to be 9223372036854775807, + since some C++ compilers masquerading as C compilers + incorrectly reject 9223372036854775807. */ +#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) + int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 + && LARGE_OFF_T % 2147483647 == 1) + ? 1 : -1]; +int +main () +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_cv_sys_file_offset_bits=no; break +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#define _FILE_OFFSET_BITS 64 +#include + /* Check that off_t can represent 2**63 - 1 correctly. + We can't simply define LARGE_OFF_T to be 9223372036854775807, + since some C++ compilers masquerading as C compilers + incorrectly reject 9223372036854775807. */ +#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) + int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 + && LARGE_OFF_T % 2147483647 == 1) + ? 1 : -1]; +int +main () +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_cv_sys_file_offset_bits=64; break +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + ac_cv_sys_file_offset_bits=unknown + break +done +fi +{ $as_echo "$as_me:$LINENO: result: $ac_cv_sys_file_offset_bits" >&5 +$as_echo "$ac_cv_sys_file_offset_bits" >&6; } +case $ac_cv_sys_file_offset_bits in #( + no | unknown) ;; + *) +cat >>confdefs.h <<_ACEOF +#define _FILE_OFFSET_BITS $ac_cv_sys_file_offset_bits +_ACEOF +;; +esac +rm -rf conftest* + if test $ac_cv_sys_file_offset_bits = unknown; then + { $as_echo "$as_me:$LINENO: checking for _LARGE_FILES value needed for large files" >&5 +$as_echo_n "checking for _LARGE_FILES value needed for large files... " >&6; } +if test "${ac_cv_sys_large_files+set}" = set; then + $as_echo_n "(cached) " >&6 +else + while :; do + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include + /* Check that off_t can represent 2**63 - 1 correctly. + We can't simply define LARGE_OFF_T to be 9223372036854775807, + since some C++ compilers masquerading as C compilers + incorrectly reject 9223372036854775807. */ +#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) + int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 + && LARGE_OFF_T % 2147483647 == 1) + ? 1 : -1]; +int +main () +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_cv_sys_large_files=no; break +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#define _LARGE_FILES 1 +#include + /* Check that off_t can represent 2**63 - 1 correctly. + We can't simply define LARGE_OFF_T to be 9223372036854775807, + since some C++ compilers masquerading as C compilers + incorrectly reject 9223372036854775807. */ +#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) + int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 + && LARGE_OFF_T % 2147483647 == 1) + ? 1 : -1]; +int +main () +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_cv_sys_large_files=1; break +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + ac_cv_sys_large_files=unknown + break +done +fi +{ $as_echo "$as_me:$LINENO: result: $ac_cv_sys_large_files" >&5 +$as_echo "$ac_cv_sys_large_files" >&6; } +case $ac_cv_sys_large_files in #( + no | unknown) ;; + *) +cat >>confdefs.h <<_ACEOF +#define _LARGE_FILES $ac_cv_sys_large_files +_ACEOF +;; +esac +rm -rf conftest* + fi +fi + + +EXTRA_CFLAGS="" +if eval "test x$GCC = xyes"; then + for flag in \ +-W -Wall -Wbad-function-cast -Wcast-align -Wcast-qual -Winline -Wmissing-declarations -Wmissing-prototypes -Wnested-externs -Wshadow -Wstrict-prototypes -Wundef -Wpointer-arith + do + case "$CFLAGS" in +"$flag" | "$flag "* | *" $flag" | *" $flag "* ) + : + ;; +*) + EXTRA_CFLAGS="$EXTRA_CFLAGS $flag" + ;; +esac + + done +fi + + +# Check whether --enable-static was given. +if test "${enable_static+set}" = set; then + enableval=$enable_static; p=${PACKAGE-default} + case $enableval in + yes) enable_static=yes ;; + no) enable_static=no ;; + *) + enable_static=no + # Look at the argument we got. We use all the common list separators. + lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," + for pkg in $enableval; do + IFS="$lt_save_ifs" + if test "X$pkg" = "X$p"; then + enable_static=yes + fi + done + IFS="$lt_save_ifs" + ;; + esac +else + enable_static=no +fi + + + + + + +# Check whether --enable-shared was given. +if test "${enable_shared+set}" = set; then + enableval=$enable_shared; p=${PACKAGE-default} + case $enableval in + yes) enable_shared=yes ;; + no) enable_shared=no ;; + *) + enable_shared=no + # Look at the argument we got. We use all the common list separators. + lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," + for pkg in $enableval; do + IFS="$lt_save_ifs" + if test "X$pkg" = "X$p"; then + enable_shared=yes + fi + done + IFS="$lt_save_ifs" + ;; + esac +else + enable_shared=yes +fi + + + + + + + +{ $as_echo "$as_me:$LINENO: checking for -fpie" >&5 +$as_echo_n "checking for -fpie... " >&6; } +if test "${libc_cv_fpie+set}" = set; then + $as_echo_n "(cached) " >&6 +else + cat > conftest.c <&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } + then + libc_cv_fpie=yes + PIE_CFLAGS="-fpie" + PIE_LDFLAGS="-pie" + else + libc_cv_fpie=no + PIE_CFLAGS="" + PIE_LDFLAGS="" + fi + rm -f conftest* +fi +{ $as_echo "$as_me:$LINENO: result: $libc_cv_fpie" >&5 +$as_echo "$libc_cv_fpie" >&6; } + + + + +{ $as_echo "$as_me:$LINENO: checking if malloc debugging is wanted" >&5 +$as_echo_n "checking if malloc debugging is wanted... " >&6; } + +# Check whether --with-dmalloc was given. +if test "${with_dmalloc+set}" = set; then + withval=$with_dmalloc; if test "$withval" = yes; then + { $as_echo "$as_me:$LINENO: result: yes" >&5 +$as_echo "yes" >&6; } + +cat >>confdefs.h <<\_ACEOF +#define WITH_DMALLOC 1 +_ACEOF + + LIBS="$LIBS -ldmalloc" + LDFLAGS="$LDFLAGS -g" +else + { $as_echo "$as_me:$LINENO: result: no" >&5 +$as_echo "no" >&6; } +fi +else + { $as_echo "$as_me:$LINENO: result: no" >&5 +$as_echo "no" >&6; } +fi + + + +# Check whether --enable-pam_rpasswd was given. +if test "${enable_pam_rpasswd+set}" = set; then + enableval=$enable_pam_rpasswd; +fi + + if test "$enable_pam_rpasswd" = "yes"; then + build_PAM_RPASSWD_TRUE= + build_PAM_RPASSWD_FALSE='#' +else + build_PAM_RPASSWD_TRUE='#' + build_PAM_RPASSWD_FALSE= +fi + + +# Check whether --enable-selinux was given. +if test "${enable_selinux+set}" = set; then + enableval=$enable_selinux; +fi + +# Check whether --enable-static-selinux was given. +if test "${enable_static_selinux+set}" = set; then + enableval=$enable_static_selinux; +fi + +if test "$enable_selinux" \!= "no" -a "$enable_static_selinux" = "yes" ; then + { $as_echo "$as_me:$LINENO: checking for is_selinux_enabled in -lselinux" >&5 +$as_echo_n "checking for is_selinux_enabled in -lselinux... " >&6; } +if test "${ac_cv_lib_selinux_is_selinux_enabled+set}" = set; then + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lselinux $LIBS" +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char is_selinux_enabled (); +int +main () +{ +return is_selinux_enabled (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + $as_test_x conftest$ac_exeext + }; then + ac_cv_lib_selinux_is_selinux_enabled=yes +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_cv_lib_selinux_is_selinux_enabled=no +fi + +rm -rf conftest.dSYM +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:$LINENO: result: $ac_cv_lib_selinux_is_selinux_enabled" >&5 +$as_echo "$ac_cv_lib_selinux_is_selinux_enabled" >&6; } +if test "x$ac_cv_lib_selinux_is_selinux_enabled" = x""yes; then + +cat >>confdefs.h <<\_ACEOF +#define WITH_SELINUX 1 +_ACEOF + + SELINUX_LIB="-Wl,-Bstatic -lselinux -Wl,-dy" +else + SELINUX_LIB="" +fi + +elif test "$enable_selinux" \!= "no" ; then + { $as_echo "$as_me:$LINENO: checking for is_selinux_enabled in -lselinux" >&5 +$as_echo_n "checking for is_selinux_enabled in -lselinux... " >&6; } +if test "${ac_cv_lib_selinux_is_selinux_enabled+set}" = set; then + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lselinux $LIBS" +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char is_selinux_enabled (); +int +main () +{ +return is_selinux_enabled (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + $as_test_x conftest$ac_exeext + }; then + ac_cv_lib_selinux_is_selinux_enabled=yes +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_cv_lib_selinux_is_selinux_enabled=no +fi + +rm -rf conftest.dSYM +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:$LINENO: result: $ac_cv_lib_selinux_is_selinux_enabled" >&5 +$as_echo "$ac_cv_lib_selinux_is_selinux_enabled" >&6; } +if test "x$ac_cv_lib_selinux_is_selinux_enabled" = x""yes; then + +cat >>confdefs.h <<\_ACEOF +#define WITH_SELINUX 1 +_ACEOF + + SELINUX_LIB="-lselinux" +else + SELINUX_LIB="" +fi + +else + SELINUX_LIB="" +fi + + +# Check whether --enable-slp was given. +if test "${enable_slp+set}" = set; then + enableval=$enable_slp; +fi + + + +for ac_header in slp.h +do +as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` +if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then + { $as_echo "$as_me:$LINENO: checking for $ac_header" >&5 +$as_echo_n "checking for $ac_header... " >&6; } +if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then + $as_echo_n "(cached) " >&6 +fi +ac_res=`eval 'as_val=${'$as_ac_Header'} + $as_echo "$as_val"'` + { $as_echo "$as_me:$LINENO: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } +else + # Is the header compilable? +{ $as_echo "$as_me:$LINENO: checking $ac_header usability" >&5 +$as_echo_n "checking $ac_header usability... " >&6; } +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default +#include <$ac_header> +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_header_compiler=yes +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_header_compiler=no +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +{ $as_echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 +$as_echo "$ac_header_compiler" >&6; } + +# Is the header present? +{ $as_echo "$as_me:$LINENO: checking $ac_header presence" >&5 +$as_echo_n "checking $ac_header presence... " >&6; } +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include <$ac_header> +_ACEOF +if { (ac_try="$ac_cpp conftest.$ac_ext" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } >/dev/null && { + test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || + test ! -s conftest.err + }; then + ac_header_preproc=yes +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_header_preproc=no +fi + +rm -f conftest.err conftest.$ac_ext +{ $as_echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 +$as_echo "$ac_header_preproc" >&6; } + +# So? What about this header? +case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in + yes:no: ) + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 +$as_echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 +$as_echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} + ac_header_preproc=yes + ;; + no:yes:* ) + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 +$as_echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 +$as_echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 +$as_echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 +$as_echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 +$as_echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 +$as_echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} + + ;; +esac +{ $as_echo "$as_me:$LINENO: checking for $ac_header" >&5 +$as_echo_n "checking for $ac_header... " >&6; } +if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then + $as_echo_n "(cached) " >&6 +else + eval "$as_ac_Header=\$ac_header_preproc" +fi +ac_res=`eval 'as_val=${'$as_ac_Header'} + $as_echo "$as_val"'` + { $as_echo "$as_me:$LINENO: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } + +fi +as_val=`eval 'as_val=${'$as_ac_Header'} + $as_echo "$as_val"'` + if test "x$as_val" = x""yes; then + cat >>confdefs.h <<_ACEOF +#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 +_ACEOF + +fi + +done + + +SLP_LIBS="" +if test "$enable_slp" \!= "no" +then + { $as_echo "$as_me:$LINENO: checking for SLPReg in -lslp" >&5 +$as_echo_n "checking for SLPReg in -lslp... " >&6; } +if test "${ac_cv_lib_slp_SLPReg+set}" = set; then + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lslp $LIBS" +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char SLPReg (); +int +main () +{ +return SLPReg (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + $as_test_x conftest$ac_exeext + }; then + ac_cv_lib_slp_SLPReg=yes +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_cv_lib_slp_SLPReg=no +fi + +rm -rf conftest.dSYM +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:$LINENO: result: $ac_cv_lib_slp_SLPReg" >&5 +$as_echo "$ac_cv_lib_slp_SLPReg" >&6; } +if test "x$ac_cv_lib_slp_SLPReg" = x""yes; then + SLP_LIBS="-lslp" +else + SLP_LIBS="" +fi + + if test -n "$SLP_LIBS" -a x$ac_cv_header_slp_h != xno + then + +cat >>confdefs.h <<\_ACEOF +#define USE_SLP 1 +_ACEOF + + fi +fi + + +LAUS_LIBS="" +# Check whether --enable-laus-plugin was given. +if test "${enable_laus_plugin+set}" = set; then + enableval=$enable_laus_plugin; +fi + +if test "$enable_laus_plugin" \!= "no" +then + if test "${ac_cv_header_laus_h+set}" = set; then + { $as_echo "$as_me:$LINENO: checking for laus.h" >&5 +$as_echo_n "checking for laus.h... " >&6; } +if test "${ac_cv_header_laus_h+set}" = set; then + $as_echo_n "(cached) " >&6 +fi +{ $as_echo "$as_me:$LINENO: result: $ac_cv_header_laus_h" >&5 +$as_echo "$ac_cv_header_laus_h" >&6; } +else + # Is the header compilable? +{ $as_echo "$as_me:$LINENO: checking laus.h usability" >&5 +$as_echo_n "checking laus.h usability... " >&6; } +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default +#include +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_header_compiler=yes +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_header_compiler=no +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +{ $as_echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 +$as_echo "$ac_header_compiler" >&6; } + +# Is the header present? +{ $as_echo "$as_me:$LINENO: checking laus.h presence" >&5 +$as_echo_n "checking laus.h presence... " >&6; } +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include +_ACEOF +if { (ac_try="$ac_cpp conftest.$ac_ext" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } >/dev/null && { + test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || + test ! -s conftest.err + }; then + ac_header_preproc=yes +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_header_preproc=no +fi + +rm -f conftest.err conftest.$ac_ext +{ $as_echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 +$as_echo "$ac_header_preproc" >&6; } + +# So? What about this header? +case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in + yes:no: ) + { $as_echo "$as_me:$LINENO: WARNING: laus.h: accepted by the compiler, rejected by the preprocessor!" >&5 +$as_echo "$as_me: WARNING: laus.h: accepted by the compiler, rejected by the preprocessor!" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: laus.h: proceeding with the compiler's result" >&5 +$as_echo "$as_me: WARNING: laus.h: proceeding with the compiler's result" >&2;} + ac_header_preproc=yes + ;; + no:yes:* ) + { $as_echo "$as_me:$LINENO: WARNING: laus.h: present but cannot be compiled" >&5 +$as_echo "$as_me: WARNING: laus.h: present but cannot be compiled" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: laus.h: check for missing prerequisite headers?" >&5 +$as_echo "$as_me: WARNING: laus.h: check for missing prerequisite headers?" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: laus.h: see the Autoconf documentation" >&5 +$as_echo "$as_me: WARNING: laus.h: see the Autoconf documentation" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: laus.h: section \"Present But Cannot Be Compiled\"" >&5 +$as_echo "$as_me: WARNING: laus.h: section \"Present But Cannot Be Compiled\"" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: laus.h: proceeding with the preprocessor's result" >&5 +$as_echo "$as_me: WARNING: laus.h: proceeding with the preprocessor's result" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: laus.h: in the future, the compiler will take precedence" >&5 +$as_echo "$as_me: WARNING: laus.h: in the future, the compiler will take precedence" >&2;} + + ;; +esac +{ $as_echo "$as_me:$LINENO: checking for laus.h" >&5 +$as_echo_n "checking for laus.h... " >&6; } +if test "${ac_cv_header_laus_h+set}" = set; then + $as_echo_n "(cached) " >&6 +else + ac_cv_header_laus_h=$ac_header_preproc +fi +{ $as_echo "$as_me:$LINENO: result: $ac_cv_header_laus_h" >&5 +$as_echo "$ac_cv_header_laus_h" >&6; } + +fi +if test "x$ac_cv_header_laus_h" = x""yes; then + laus_header="yes" +else + laus_header="no" +fi + + + if test "$laus_header" = "yes"; then + { $as_echo "$as_me:$LINENO: checking for laus_open in -llaus" >&5 +$as_echo_n "checking for laus_open in -llaus... " >&6; } +if test "${ac_cv_lib_laus_laus_open+set}" = set; then + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-llaus $LIBS" +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char laus_open (); +int +main () +{ +return laus_open (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + $as_test_x conftest$ac_exeext + }; then + ac_cv_lib_laus_laus_open=yes +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_cv_lib_laus_laus_open=no +fi + +rm -rf conftest.dSYM +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:$LINENO: result: $ac_cv_lib_laus_laus_open" >&5 +$as_echo "$ac_cv_lib_laus_laus_open" >&6; } +if test "x$ac_cv_lib_laus_laus_open" = x""yes; then + +cat >>confdefs.h <<\_ACEOF +#define HAVE_LIBLAUS 1 +_ACEOF + LAUS_LIBS="-llaus" +fi + + fi +fi + + if test -n "$LAUS_LIBS"; then + build_LAUS_PLUGIN_TRUE= + build_LAUS_PLUGIN_FALSE='#' +else + build_LAUS_PLUGIN_TRUE='#' + build_LAUS_PLUGIN_FALSE= +fi + + +AUDIT_LIBS="" +# Check whether --enable-audit-plugin was given. +if test "${enable_audit_plugin+set}" = set; then + enableval=$enable_audit_plugin; +fi + +if test "$enable_audit_plugin" \!= "no" +then + if test "${ac_cv_header_libaudit_h+set}" = set; then + { $as_echo "$as_me:$LINENO: checking for libaudit.h" >&5 +$as_echo_n "checking for libaudit.h... " >&6; } +if test "${ac_cv_header_libaudit_h+set}" = set; then + $as_echo_n "(cached) " >&6 +fi +{ $as_echo "$as_me:$LINENO: result: $ac_cv_header_libaudit_h" >&5 +$as_echo "$ac_cv_header_libaudit_h" >&6; } +else + # Is the header compilable? +{ $as_echo "$as_me:$LINENO: checking libaudit.h usability" >&5 +$as_echo_n "checking libaudit.h usability... " >&6; } +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default +#include +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_header_compiler=yes +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_header_compiler=no +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +{ $as_echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 +$as_echo "$ac_header_compiler" >&6; } + +# Is the header present? +{ $as_echo "$as_me:$LINENO: checking libaudit.h presence" >&5 +$as_echo_n "checking libaudit.h presence... " >&6; } +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include +_ACEOF +if { (ac_try="$ac_cpp conftest.$ac_ext" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } >/dev/null && { + test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || + test ! -s conftest.err + }; then + ac_header_preproc=yes +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_header_preproc=no +fi + +rm -f conftest.err conftest.$ac_ext +{ $as_echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 +$as_echo "$ac_header_preproc" >&6; } + +# So? What about this header? +case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in + yes:no: ) + { $as_echo "$as_me:$LINENO: WARNING: libaudit.h: accepted by the compiler, rejected by the preprocessor!" >&5 +$as_echo "$as_me: WARNING: libaudit.h: accepted by the compiler, rejected by the preprocessor!" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: libaudit.h: proceeding with the compiler's result" >&5 +$as_echo "$as_me: WARNING: libaudit.h: proceeding with the compiler's result" >&2;} + ac_header_preproc=yes + ;; + no:yes:* ) + { $as_echo "$as_me:$LINENO: WARNING: libaudit.h: present but cannot be compiled" >&5 +$as_echo "$as_me: WARNING: libaudit.h: present but cannot be compiled" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: libaudit.h: check for missing prerequisite headers?" >&5 +$as_echo "$as_me: WARNING: libaudit.h: check for missing prerequisite headers?" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: libaudit.h: see the Autoconf documentation" >&5 +$as_echo "$as_me: WARNING: libaudit.h: see the Autoconf documentation" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: libaudit.h: section \"Present But Cannot Be Compiled\"" >&5 +$as_echo "$as_me: WARNING: libaudit.h: section \"Present But Cannot Be Compiled\"" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: libaudit.h: proceeding with the preprocessor's result" >&5 +$as_echo "$as_me: WARNING: libaudit.h: proceeding with the preprocessor's result" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: libaudit.h: in the future, the compiler will take precedence" >&5 +$as_echo "$as_me: WARNING: libaudit.h: in the future, the compiler will take precedence" >&2;} + + ;; +esac +{ $as_echo "$as_me:$LINENO: checking for libaudit.h" >&5 +$as_echo_n "checking for libaudit.h... " >&6; } +if test "${ac_cv_header_libaudit_h+set}" = set; then + $as_echo_n "(cached) " >&6 +else + ac_cv_header_libaudit_h=$ac_header_preproc +fi +{ $as_echo "$as_me:$LINENO: result: $ac_cv_header_libaudit_h" >&5 +$as_echo "$ac_cv_header_libaudit_h" >&6; } + +fi +if test "x$ac_cv_header_libaudit_h" = x""yes; then + audit_header="yes" +else + audit_header="no" +fi + + + if test "$audit_header" = "yes"; then + { $as_echo "$as_me:$LINENO: checking for audit_open in -laudit" >&5 +$as_echo_n "checking for audit_open in -laudit... " >&6; } +if test "${ac_cv_lib_audit_audit_open+set}" = set; then + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-laudit $LIBS" +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char audit_open (); +int +main () +{ +return audit_open (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + $as_test_x conftest$ac_exeext + }; then + ac_cv_lib_audit_audit_open=yes +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_cv_lib_audit_audit_open=no +fi + +rm -rf conftest.dSYM +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:$LINENO: result: $ac_cv_lib_audit_audit_open" >&5 +$as_echo "$ac_cv_lib_audit_audit_open" >&6; } +if test "x$ac_cv_lib_audit_audit_open" = x""yes; then + +cat >>confdefs.h <<\_ACEOF +#define HAVE_LIBAUDIT 1 +_ACEOF + AUDIT_LIBS="-laudit" +fi + + fi +fi + + if test -n "$AUDIT_LIBS"; then + build_AUDIT_PLUGIN_TRUE= + build_AUDIT_PLUGIN_FALSE='#' +else + build_AUDIT_PLUGIN_TRUE='#' + build_AUDIT_PLUGIN_FALSE= +fi + + +BACKUP_LIBS=$LIBS +{ $as_echo "$as_me:$LINENO: checking for dlopen in -ldl" >&5 +$as_echo_n "checking for dlopen in -ldl... " >&6; } +if test "${ac_cv_lib_dl_dlopen+set}" = set; then + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ldl $LIBS" +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char dlopen (); +int +main () +{ +return dlopen (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + $as_test_x conftest$ac_exeext + }; then + ac_cv_lib_dl_dlopen=yes +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_cv_lib_dl_dlopen=no +fi + +rm -rf conftest.dSYM +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:$LINENO: result: $ac_cv_lib_dl_dlopen" >&5 +$as_echo "$ac_cv_lib_dl_dlopen" >&6; } +if test "x$ac_cv_lib_dl_dlopen" = x""yes; then + DL_LIBS="-ldl" +else + DL_LIBS="" +fi + + +LIBS=$BACKUP_LIBS + +BACKUP_LIBS=$LIBS +{ $as_echo "$as_me:$LINENO: checking for pam_start in -lpam" >&5 +$as_echo_n "checking for pam_start in -lpam... " >&6; } +if test "${ac_cv_lib_pam_pam_start+set}" = set; then + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lpam $LIBS" +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char pam_start (); +int +main () +{ +return pam_start (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + $as_test_x conftest$ac_exeext + }; then + ac_cv_lib_pam_pam_start=yes +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_cv_lib_pam_pam_start=no +fi + +rm -rf conftest.dSYM +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:$LINENO: result: $ac_cv_lib_pam_pam_start" >&5 +$as_echo "$ac_cv_lib_pam_pam_start" >&6; } +if test "x$ac_cv_lib_pam_pam_start" = x""yes; then + PAM_LIBS="-lpam" +else + PAM_LIBS="" +fi + +{ $as_echo "$as_me:$LINENO: checking for main in -lpam_misc" >&5 +$as_echo_n "checking for main in -lpam_misc... " >&6; } +if test "${ac_cv_lib_pam_misc_main+set}" = set; then + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lpam_misc $PAM_LIBS $LIBS" +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + + +int +main () +{ +return main (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + $as_test_x conftest$ac_exeext + }; then + ac_cv_lib_pam_misc_main=yes +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_cv_lib_pam_misc_main=no +fi + +rm -rf conftest.dSYM +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:$LINENO: result: $ac_cv_lib_pam_misc_main" >&5 +$as_echo "$ac_cv_lib_pam_misc_main" >&6; } +if test "x$ac_cv_lib_pam_misc_main" = x""yes; then + PAM_LIBS="-lpam_misc $PAM_LIBS" +else + PAM_LIBS="$PAM_LIBS" +fi + +if test -z "$PAM_LIBS"; then + echo PAM libraries are required for compiling this package! + exit 1 +fi + +LIBS=$BACKUP_LIBS +{ $as_echo "$as_me:$LINENO: checking for yp_get_default_domain in -lnsl" >&5 +$as_echo_n "checking for yp_get_default_domain in -lnsl... " >&6; } +if test "${ac_cv_lib_nsl_yp_get_default_domain+set}" = set; then + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lnsl $LIBS" +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char yp_get_default_domain (); +int +main () +{ +return yp_get_default_domain (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + $as_test_x conftest$ac_exeext + }; then + ac_cv_lib_nsl_yp_get_default_domain=yes +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_cv_lib_nsl_yp_get_default_domain=no +fi + +rm -rf conftest.dSYM +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:$LINENO: result: $ac_cv_lib_nsl_yp_get_default_domain" >&5 +$as_echo "$ac_cv_lib_nsl_yp_get_default_domain" >&6; } +if test "x$ac_cv_lib_nsl_yp_get_default_domain" = x""yes; then + NSL_LIB="-lnsl" +else + NSL_LIB="" +fi + + +BACKUP_LIBS=$LIBS +{ $as_echo "$as_me:$LINENO: checking for library containing crypt" >&5 +$as_echo_n "checking for library containing crypt... " >&6; } +if test "${ac_cv_search_crypt+set}" = set; then + $as_echo_n "(cached) " >&6 +else + ac_func_search_save_LIBS=$LIBS +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char crypt (); +int +main () +{ +return crypt (); + ; + return 0; +} +_ACEOF +for ac_lib in '' xcrypt crypt; do + if test -z "$ac_lib"; then + ac_res="none required" + else + ac_res=-l$ac_lib + LIBS="-l$ac_lib $ac_func_search_save_LIBS" + fi + rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + $as_test_x conftest$ac_exeext + }; then + ac_cv_search_crypt=$ac_res +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + +fi + +rm -rf conftest.dSYM +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext + if test "${ac_cv_search_crypt+set}" = set; then + break +fi +done +if test "${ac_cv_search_crypt+set}" = set; then + : +else + ac_cv_search_crypt=no +fi +rm conftest.$ac_ext +LIBS=$ac_func_search_save_LIBS +fi +{ $as_echo "$as_me:$LINENO: result: $ac_cv_search_crypt" >&5 +$as_echo "$ac_cv_search_crypt" >&6; } +ac_res=$ac_cv_search_crypt +if test "$ac_res" != no; then + test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" + CRYPT_LIB="-l$ac_lib" +else + CRYPT_LIB="" +fi + +LIBS=$BACKUP_LIBS + + + +for ac_header in xcrypt.h crypt.h +do +as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` +if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then + { $as_echo "$as_me:$LINENO: checking for $ac_header" >&5 +$as_echo_n "checking for $ac_header... " >&6; } +if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then + $as_echo_n "(cached) " >&6 +fi +ac_res=`eval 'as_val=${'$as_ac_Header'} + $as_echo "$as_val"'` + { $as_echo "$as_me:$LINENO: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } +else + # Is the header compilable? +{ $as_echo "$as_me:$LINENO: checking $ac_header usability" >&5 +$as_echo_n "checking $ac_header usability... " >&6; } +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default +#include <$ac_header> +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_header_compiler=yes +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_header_compiler=no +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +{ $as_echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 +$as_echo "$ac_header_compiler" >&6; } + +# Is the header present? +{ $as_echo "$as_me:$LINENO: checking $ac_header presence" >&5 +$as_echo_n "checking $ac_header presence... " >&6; } +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include <$ac_header> +_ACEOF +if { (ac_try="$ac_cpp conftest.$ac_ext" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } >/dev/null && { + test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || + test ! -s conftest.err + }; then + ac_header_preproc=yes +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_header_preproc=no +fi + +rm -f conftest.err conftest.$ac_ext +{ $as_echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 +$as_echo "$ac_header_preproc" >&6; } + +# So? What about this header? +case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in + yes:no: ) + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 +$as_echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 +$as_echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} + ac_header_preproc=yes + ;; + no:yes:* ) + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 +$as_echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 +$as_echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 +$as_echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 +$as_echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 +$as_echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 +$as_echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} + + ;; +esac +{ $as_echo "$as_me:$LINENO: checking for $ac_header" >&5 +$as_echo_n "checking for $ac_header... " >&6; } +if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then + $as_echo_n "(cached) " >&6 +else + eval "$as_ac_Header=\$ac_header_preproc" +fi +ac_res=`eval 'as_val=${'$as_ac_Header'} + $as_echo "$as_val"'` + { $as_echo "$as_me:$LINENO: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } + +fi +as_val=`eval 'as_val=${'$as_ac_Header'} + $as_echo "$as_val"'` + if test "x$as_val" = x""yes; then + cat >>confdefs.h <<_ACEOF +#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 +_ACEOF + break +fi + +done + +BACKUP_LIBS=$LIBS +LIBS="$LIBS $CRYPT_LIB" + + + +for ac_func in crypt crypt_r xcrypt_gensalt_r +do +as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` +{ $as_echo "$as_me:$LINENO: checking for $ac_func" >&5 +$as_echo_n "checking for $ac_func... " >&6; } +if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then + $as_echo_n "(cached) " >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +/* Define $ac_func to an innocuous variant, in case declares $ac_func. + For example, HP-UX 11i declares gettimeofday. */ +#define $ac_func innocuous_$ac_func + +/* System header to define __stub macros and hopefully few prototypes, + which can conflict with char $ac_func (); below. + Prefer to if __STDC__ is defined, since + exists even on freestanding compilers. */ + +#ifdef __STDC__ +# include +#else +# include +#endif + +#undef $ac_func + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char $ac_func (); +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined __stub_$ac_func || defined __stub___$ac_func +choke me +#endif + +int +main () +{ +return $ac_func (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + $as_test_x conftest$ac_exeext + }; then + eval "$as_ac_var=yes" +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + eval "$as_ac_var=no" +fi + +rm -rf conftest.dSYM +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext +fi +ac_res=`eval 'as_val=${'$as_ac_var'} + $as_echo "$as_val"'` + { $as_echo "$as_me:$LINENO: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } +as_val=`eval 'as_val=${'$as_ac_var'} + $as_echo "$as_val"'` + if test "x$as_val" = x""yes; then + cat >>confdefs.h <<_ACEOF +#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 +_ACEOF + +fi +done + +LIBS=$BACKUP_LIBS + + + +for ac_header in sys/xattr.h attr/xattr.h +do +as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` +if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then + { $as_echo "$as_me:$LINENO: checking for $ac_header" >&5 +$as_echo_n "checking for $ac_header... " >&6; } +if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then + $as_echo_n "(cached) " >&6 +fi +ac_res=`eval 'as_val=${'$as_ac_Header'} + $as_echo "$as_val"'` + { $as_echo "$as_me:$LINENO: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } +else + # Is the header compilable? +{ $as_echo "$as_me:$LINENO: checking $ac_header usability" >&5 +$as_echo_n "checking $ac_header usability... " >&6; } +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default +#include <$ac_header> +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_header_compiler=yes +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_header_compiler=no +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +{ $as_echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 +$as_echo "$ac_header_compiler" >&6; } + +# Is the header present? +{ $as_echo "$as_me:$LINENO: checking $ac_header presence" >&5 +$as_echo_n "checking $ac_header presence... " >&6; } +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include <$ac_header> +_ACEOF +if { (ac_try="$ac_cpp conftest.$ac_ext" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } >/dev/null && { + test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || + test ! -s conftest.err + }; then + ac_header_preproc=yes +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_header_preproc=no +fi + +rm -f conftest.err conftest.$ac_ext +{ $as_echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 +$as_echo "$ac_header_preproc" >&6; } + +# So? What about this header? +case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in + yes:no: ) + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 +$as_echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 +$as_echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} + ac_header_preproc=yes + ;; + no:yes:* ) + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 +$as_echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 +$as_echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 +$as_echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 +$as_echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 +$as_echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 +$as_echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} + + ;; +esac +{ $as_echo "$as_me:$LINENO: checking for $ac_header" >&5 +$as_echo_n "checking for $ac_header... " >&6; } +if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then + $as_echo_n "(cached) " >&6 +else + eval "$as_ac_Header=\$ac_header_preproc" +fi +ac_res=`eval 'as_val=${'$as_ac_Header'} + $as_echo "$as_val"'` + { $as_echo "$as_me:$LINENO: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } + +fi +as_val=`eval 'as_val=${'$as_ac_Header'} + $as_echo "$as_val"'` + if test "x$as_val" = x""yes; then + cat >>confdefs.h <<_ACEOF +#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 +_ACEOF + break +fi + +done + +if test x$ac_cv_header_attr_xattr_h = xyes +then + { $as_echo "$as_me:$LINENO: checking for main in -lattr" >&5 +$as_echo_n "checking for main in -lattr... " >&6; } +if test "${ac_cv_lib_attr_main+set}" = set; then + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lattr $LIBS" +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + + +int +main () +{ +return main (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + $as_test_x conftest$ac_exeext + }; then + ac_cv_lib_attr_main=yes +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_cv_lib_attr_main=no +fi + +rm -rf conftest.dSYM +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:$LINENO: result: $ac_cv_lib_attr_main" >&5 +$as_echo "$ac_cv_lib_attr_main" >&6; } +if test "x$ac_cv_lib_attr_main" = x""yes; then + ATTR_LIB="-lattr" +else + ATTR_LIB="" +fi + +else + ATTR_LIB="" +fi + +BACKUP_LIBS=$LIBS +LIBS="$LIBS $ATTR_LIB" + + + +for ac_func in llistxattr lgetxattr lsetxattr +do +as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` +{ $as_echo "$as_me:$LINENO: checking for $ac_func" >&5 +$as_echo_n "checking for $ac_func... " >&6; } +if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then + $as_echo_n "(cached) " >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +/* Define $ac_func to an innocuous variant, in case declares $ac_func. + For example, HP-UX 11i declares gettimeofday. */ +#define $ac_func innocuous_$ac_func + +/* System header to define __stub macros and hopefully few prototypes, + which can conflict with char $ac_func (); below. + Prefer to if __STDC__ is defined, since + exists even on freestanding compilers. */ + +#ifdef __STDC__ +# include +#else +# include +#endif + +#undef $ac_func + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char $ac_func (); +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined __stub_$ac_func || defined __stub___$ac_func +choke me +#endif + +int +main () +{ +return $ac_func (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + $as_test_x conftest$ac_exeext + }; then + eval "$as_ac_var=yes" +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + eval "$as_ac_var=no" +fi + +rm -rf conftest.dSYM +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext +fi +ac_res=`eval 'as_val=${'$as_ac_var'} + $as_echo "$as_val"'` + { $as_echo "$as_me:$LINENO: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } +as_val=`eval 'as_val=${'$as_ac_var'} + $as_echo "$as_val"'` + if test "x$as_val" = x""yes; then + cat >>confdefs.h <<_ACEOF +#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 +_ACEOF + +fi +done + +LIBS=$BACKUP_LIBS + + am_getline_needs_run_time_check=no + { $as_echo "$as_me:$LINENO: checking for getline" >&5 +$as_echo_n "checking for getline... " >&6; } +if test "${ac_cv_func_getline+set}" = set; then + $as_echo_n "(cached) " >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +/* Define getline to an innocuous variant, in case declares getline. + For example, HP-UX 11i declares gettimeofday. */ +#define getline innocuous_getline + +/* System header to define __stub macros and hopefully few prototypes, + which can conflict with char getline (); below. + Prefer to if __STDC__ is defined, since + exists even on freestanding compilers. */ + +#ifdef __STDC__ +# include +#else +# include +#endif + +#undef getline + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char getline (); +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined __stub_getline || defined __stub___getline +choke me +#endif + +int +main () +{ +return getline (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + $as_test_x conftest$ac_exeext + }; then + ac_cv_func_getline=yes +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_cv_func_getline=no +fi + +rm -rf conftest.dSYM +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext +fi +{ $as_echo "$as_me:$LINENO: result: $ac_cv_func_getline" >&5 +$as_echo "$ac_cv_func_getline" >&6; } +if test "x$ac_cv_func_getline" = x""yes; then + am_getline_needs_run_time_check=yes +else + am_cv_func_working_getline=no +fi + + if test $am_getline_needs_run_time_check = yes; then + +for ac_header in string.h +do +as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` +if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then + { $as_echo "$as_me:$LINENO: checking for $ac_header" >&5 +$as_echo_n "checking for $ac_header... " >&6; } +if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then + $as_echo_n "(cached) " >&6 +fi +ac_res=`eval 'as_val=${'$as_ac_Header'} + $as_echo "$as_val"'` + { $as_echo "$as_me:$LINENO: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } +else + # Is the header compilable? +{ $as_echo "$as_me:$LINENO: checking $ac_header usability" >&5 +$as_echo_n "checking $ac_header usability... " >&6; } +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default +#include <$ac_header> +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_header_compiler=yes +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_header_compiler=no +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +{ $as_echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 +$as_echo "$ac_header_compiler" >&6; } + +# Is the header present? +{ $as_echo "$as_me:$LINENO: checking $ac_header presence" >&5 +$as_echo_n "checking $ac_header presence... " >&6; } +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include <$ac_header> +_ACEOF +if { (ac_try="$ac_cpp conftest.$ac_ext" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } >/dev/null && { + test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || + test ! -s conftest.err + }; then + ac_header_preproc=yes +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_header_preproc=no +fi + +rm -f conftest.err conftest.$ac_ext +{ $as_echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 +$as_echo "$ac_header_preproc" >&6; } + +# So? What about this header? +case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in + yes:no: ) + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 +$as_echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 +$as_echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} + ac_header_preproc=yes + ;; + no:yes:* ) + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 +$as_echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 +$as_echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 +$as_echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 +$as_echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 +$as_echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 +$as_echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} + + ;; +esac +{ $as_echo "$as_me:$LINENO: checking for $ac_header" >&5 +$as_echo_n "checking for $ac_header... " >&6; } +if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then + $as_echo_n "(cached) " >&6 +else + eval "$as_ac_Header=\$ac_header_preproc" +fi +ac_res=`eval 'as_val=${'$as_ac_Header'} + $as_echo "$as_val"'` + { $as_echo "$as_me:$LINENO: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } + +fi +as_val=`eval 'as_val=${'$as_ac_Header'} + $as_echo "$as_val"'` + if test "x$as_val" = x""yes; then + cat >>confdefs.h <<_ACEOF +#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 +_ACEOF + +fi + +done + + { $as_echo "$as_me:$LINENO: checking for working getline function" >&5 +$as_echo_n "checking for working getline function... " >&6; } +if test "${am_cv_func_working_getline+set}" = set; then + $as_echo_n "(cached) " >&6 +else + echo fooN |tr -d '\012'|tr N '\012' > conftestdata + if test "$cross_compiling" = yes; then + am_cv_func_working_getline=no +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +# include +# include +# if HAVE_STRING_H +# include +# endif + int main () + { /* Based on a test program from Karl Heuer. */ + char *line = NULL; + size_t siz = 0; + int len; + FILE *in = fopen ("./conftestdata", "r"); + if (!in) + return 1; + len = getline (&line, &siz, in); + exit ((len == 4 && line && strcmp (line, "foo\n") == 0) ? 0 : 1); + } + +_ACEOF +rm -f conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_link") 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { ac_try='./conftest$ac_exeext' + { (case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + am_cv_func_working_getline=yes +else + $as_echo "$as_me: program exited with status $ac_status" >&5 +$as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +( exit $ac_status ) +am_cv_func_working_getline=no +fi +rm -rf conftest.dSYM +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext +fi + + +fi +{ $as_echo "$as_me:$LINENO: result: $am_cv_func_working_getline" >&5 +$as_echo "$am_cv_func_working_getline" >&6; } + fi + + if test $am_cv_func_working_getline = no; then + case " $LIBOBJS " in + *" getline.$ac_objext "* ) ;; + *) LIBOBJS="$LIBOBJS getline.$ac_objext" + ;; +esac + + fi + +if test $am_cv_func_working_getline != yes; then + +for ac_func in getdelim +do +as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` +{ $as_echo "$as_me:$LINENO: checking for $ac_func" >&5 +$as_echo_n "checking for $ac_func... " >&6; } +if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then + $as_echo_n "(cached) " >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +/* Define $ac_func to an innocuous variant, in case declares $ac_func. + For example, HP-UX 11i declares gettimeofday. */ +#define $ac_func innocuous_$ac_func + +/* System header to define __stub macros and hopefully few prototypes, + which can conflict with char $ac_func (); below. + Prefer to if __STDC__ is defined, since + exists even on freestanding compilers. */ + +#ifdef __STDC__ +# include +#else +# include +#endif + +#undef $ac_func + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char $ac_func (); +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined __stub_$ac_func || defined __stub___$ac_func +choke me +#endif + +int +main () +{ +return $ac_func (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + $as_test_x conftest$ac_exeext + }; then + eval "$as_ac_var=yes" +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + eval "$as_ac_var=no" +fi + +rm -rf conftest.dSYM +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext +fi +ac_res=`eval 'as_val=${'$as_ac_var'} + $as_echo "$as_val"'` + { $as_echo "$as_me:$LINENO: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } +as_val=`eval 'as_val=${'$as_ac_var'} + $as_echo "$as_val"'` + if test "x$as_val" = x""yes; then + cat >>confdefs.h <<_ACEOF +#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 +_ACEOF + +fi +done + +else + +for ac_func in getline +do +as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` +{ $as_echo "$as_me:$LINENO: checking for $ac_func" >&5 +$as_echo_n "checking for $ac_func... " >&6; } +if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then + $as_echo_n "(cached) " >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +/* Define $ac_func to an innocuous variant, in case declares $ac_func. + For example, HP-UX 11i declares gettimeofday. */ +#define $ac_func innocuous_$ac_func + +/* System header to define __stub macros and hopefully few prototypes, + which can conflict with char $ac_func (); below. + Prefer to if __STDC__ is defined, since + exists even on freestanding compilers. */ + +#ifdef __STDC__ +# include +#else +# include +#endif + +#undef $ac_func + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char $ac_func (); +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined __stub_$ac_func || defined __stub___$ac_func +choke me +#endif + +int +main () +{ +return $ac_func (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + $as_test_x conftest$ac_exeext + }; then + eval "$as_ac_var=yes" +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + eval "$as_ac_var=no" +fi + +rm -rf conftest.dSYM +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext +fi +ac_res=`eval 'as_val=${'$as_ac_var'} + $as_echo "$as_val"'` + { $as_echo "$as_me:$LINENO: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } +as_val=`eval 'as_val=${'$as_ac_var'} + $as_echo "$as_val"'` + if test "x$as_val" = x""yes; then + cat >>confdefs.h <<_ACEOF +#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 +_ACEOF + +fi +done + +fi + +# Check if we should build with GnuSSL support. +TLS_LIBS="" +# Check whether --enable-ssl was given. +if test "${enable_ssl+set}" = set; then + enableval=$enable_ssl; +fi + +if test "$enable_gnutls" \!= "no" ; then + { $as_echo "$as_me:$LINENO: checking for gnutls_init in -lgnutls" >&5 +$as_echo_n "checking for gnutls_init in -lgnutls... " >&6; } +if test "${ac_cv_lib_gnutls_gnutls_init+set}" = set; then + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lgnutls $LIBS" +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char gnutls_init (); +int +main () +{ +return gnutls_init (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + $as_test_x conftest$ac_exeext + }; then + ac_cv_lib_gnutls_gnutls_init=yes +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_cv_lib_gnutls_gnutls_init=no +fi + +rm -rf conftest.dSYM +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:$LINENO: result: $ac_cv_lib_gnutls_gnutls_init" >&5 +$as_echo "$ac_cv_lib_gnutls_gnutls_init" >&6; } +if test "x$ac_cv_lib_gnutls_gnutls_init" = x""yes; then + TLS_LIBS="-lgnutls" +else + TLS_LIBS="" +fi + +fi + +if test -z "$TLS_LIBS" ; then + # Check if we should build with OpenSSL support. + SSL_LIBS="" + # Check whether --enable-ssl was given. +if test "${enable_ssl+set}" = set; then + enableval=$enable_ssl; +fi + + if test "$enable_ssl" \!= "no"; then + { $as_echo "$as_me:$LINENO: checking for SSL_connect in -lssl" >&5 +$as_echo_n "checking for SSL_connect in -lssl... " >&6; } +if test "${ac_cv_lib_ssl_SSL_connect+set}" = set; then + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lssl $LIBS" +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char SSL_connect (); +int +main () +{ +return SSL_connect (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + $as_test_x conftest$ac_exeext + }; then + ac_cv_lib_ssl_SSL_connect=yes +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_cv_lib_ssl_SSL_connect=no +fi + +rm -rf conftest.dSYM +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:$LINENO: result: $ac_cv_lib_ssl_SSL_connect" >&5 +$as_echo "$ac_cv_lib_ssl_SSL_connect" >&6; } +if test "x$ac_cv_lib_ssl_SSL_connect" = x""yes; then + SSL_LIBS="-lssl -lcrypto" +else + { { $as_echo "$as_me:$LINENO: error: OpenSSL or GnuTLS are required" >&5 +$as_echo "$as_me: error: OpenSSL or GnuTLS are required" >&2;} + { (exit 1); exit 1; }; } +fi + + + fi + TLS_LIBS=$SSL_LIBS +else + +cat >>confdefs.h <<\_ACEOF +#define USE_GNUTLS 1 +_ACEOF + + BACKUP_LIBS=$LIBS + LIBS="$LIBS $TLS_LIBS" + + +for ac_func in gnutls_certificate_verify_peers2 gnutls_pk_algorithm_get_name +do +as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` +{ $as_echo "$as_me:$LINENO: checking for $ac_func" >&5 +$as_echo_n "checking for $ac_func... " >&6; } +if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then + $as_echo_n "(cached) " >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +/* Define $ac_func to an innocuous variant, in case declares $ac_func. + For example, HP-UX 11i declares gettimeofday. */ +#define $ac_func innocuous_$ac_func + +/* System header to define __stub macros and hopefully few prototypes, + which can conflict with char $ac_func (); below. + Prefer to if __STDC__ is defined, since + exists even on freestanding compilers. */ + +#ifdef __STDC__ +# include +#else +# include +#endif + +#undef $ac_func + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char $ac_func (); +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined __stub_$ac_func || defined __stub___$ac_func +choke me +#endif + +int +main () +{ +return $ac_func (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + $as_test_x conftest$ac_exeext + }; then + eval "$as_ac_var=yes" +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + eval "$as_ac_var=no" +fi + +rm -rf conftest.dSYM +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext +fi +ac_res=`eval 'as_val=${'$as_ac_var'} + $as_echo "$as_val"'` + { $as_echo "$as_me:$LINENO: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } +as_val=`eval 'as_val=${'$as_ac_var'} + $as_echo "$as_val"'` + if test "x$as_val" = x""yes; then + cat >>confdefs.h <<_ACEOF +#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 +_ACEOF + +fi +done + + LIBS="$BACKUP_LIBS" +fi + + + +# Check whether --enable-ldap was given. +if test "${enable_ldap+set}" = set; then + enableval=$enable_ldap; +fi + + +# Check whether --with-ldap-lib was given. +if test "${with_ldap_lib+set}" = set; then + withval=$with_ldap_lib; +fi + + +# Check whether --with-ldap-dir was given. +if test "${with_ldap_dir+set}" = set; then + withval=$with_ldap_dir; +fi + + +# Check whether --with-ldap-conf-file was given. +if test "${with_ldap_conf_file+set}" = set; then + withval=$with_ldap_conf_file; +cat >>confdefs.h <<_ACEOF +#define LDAP_PATH_CONF "$with_ldap_conf_file" +_ACEOF + +else + cat >>confdefs.h <<_ACEOF +#define LDAP_PATH_CONF "/etc/ldap.conf" +_ACEOF + +fi + + +# Check whether --with-ldap-secret-file was given. +if test "${with_ldap_secret_file+set}" = set; then + withval=$with_ldap_secret_file; +cat >>confdefs.h <<_ACEOF +#define LDAP_PATH_ROOTPASSWD "$with_ldap_secret_file" +_ACEOF + +else + cat >>confdefs.h <<_ACEOF +#define LDAP_PATH_ROOTPASSWD "/etc/ldap.secret" +_ACEOF + +fi + + +if test "$enable_ldap" \!= "no"; then + +cat >>confdefs.h <<\_ACEOF +#define USE_LDAP 1 +_ACEOF + + + +for ac_header in lber.h +do +as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` +if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then + { $as_echo "$as_me:$LINENO: checking for $ac_header" >&5 +$as_echo_n "checking for $ac_header... " >&6; } +if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then + $as_echo_n "(cached) " >&6 +fi +ac_res=`eval 'as_val=${'$as_ac_Header'} + $as_echo "$as_val"'` + { $as_echo "$as_me:$LINENO: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } +else + # Is the header compilable? +{ $as_echo "$as_me:$LINENO: checking $ac_header usability" >&5 +$as_echo_n "checking $ac_header usability... " >&6; } +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default +#include <$ac_header> +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_header_compiler=yes +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_header_compiler=no +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +{ $as_echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 +$as_echo "$ac_header_compiler" >&6; } + +# Is the header present? +{ $as_echo "$as_me:$LINENO: checking $ac_header presence" >&5 +$as_echo_n "checking $ac_header presence... " >&6; } +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include <$ac_header> +_ACEOF +if { (ac_try="$ac_cpp conftest.$ac_ext" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } >/dev/null && { + test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || + test ! -s conftest.err + }; then + ac_header_preproc=yes +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_header_preproc=no +fi + +rm -f conftest.err conftest.$ac_ext +{ $as_echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 +$as_echo "$ac_header_preproc" >&6; } + +# So? What about this header? +case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in + yes:no: ) + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 +$as_echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 +$as_echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} + ac_header_preproc=yes + ;; + no:yes:* ) + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 +$as_echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 +$as_echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 +$as_echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 +$as_echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 +$as_echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 +$as_echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} + + ;; +esac +{ $as_echo "$as_me:$LINENO: checking for $ac_header" >&5 +$as_echo_n "checking for $ac_header... " >&6; } +if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then + $as_echo_n "(cached) " >&6 +else + eval "$as_ac_Header=\$ac_header_preproc" +fi +ac_res=`eval 'as_val=${'$as_ac_Header'} + $as_echo "$as_val"'` + { $as_echo "$as_me:$LINENO: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } + +fi +as_val=`eval 'as_val=${'$as_ac_Header'} + $as_echo "$as_val"'` + if test "x$as_val" = x""yes; then + cat >>confdefs.h <<_ACEOF +#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 +_ACEOF + +fi + +done + + +for ac_header in ldap.h +do +as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` +if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then + { $as_echo "$as_me:$LINENO: checking for $ac_header" >&5 +$as_echo_n "checking for $ac_header... " >&6; } +if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then + $as_echo_n "(cached) " >&6 +fi +ac_res=`eval 'as_val=${'$as_ac_Header'} + $as_echo "$as_val"'` + { $as_echo "$as_me:$LINENO: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } +else + # Is the header compilable? +{ $as_echo "$as_me:$LINENO: checking $ac_header usability" >&5 +$as_echo_n "checking $ac_header usability... " >&6; } +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default +#include <$ac_header> +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_header_compiler=yes +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_header_compiler=no +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +{ $as_echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 +$as_echo "$ac_header_compiler" >&6; } + +# Is the header present? +{ $as_echo "$as_me:$LINENO: checking $ac_header presence" >&5 +$as_echo_n "checking $ac_header presence... " >&6; } +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include <$ac_header> +_ACEOF +if { (ac_try="$ac_cpp conftest.$ac_ext" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } >/dev/null && { + test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || + test ! -s conftest.err + }; then + ac_header_preproc=yes +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_header_preproc=no +fi + +rm -f conftest.err conftest.$ac_ext +{ $as_echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 +$as_echo "$ac_header_preproc" >&6; } + +# So? What about this header? +case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in + yes:no: ) + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 +$as_echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 +$as_echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} + ac_header_preproc=yes + ;; + no:yes:* ) + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 +$as_echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 +$as_echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 +$as_echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 +$as_echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 +$as_echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 +$as_echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} + + ;; +esac +{ $as_echo "$as_me:$LINENO: checking for $ac_header" >&5 +$as_echo_n "checking for $ac_header... " >&6; } +if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then + $as_echo_n "(cached) " >&6 +else + eval "$as_ac_Header=\$ac_header_preproc" +fi +ac_res=`eval 'as_val=${'$as_ac_Header'} + $as_echo "$as_val"'` + { $as_echo "$as_me:$LINENO: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } + +fi +as_val=`eval 'as_val=${'$as_ac_Header'} + $as_echo "$as_val"'` + if test "x$as_val" = x""yes; then + cat >>confdefs.h <<_ACEOF +#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 +_ACEOF + +else + { { $as_echo "$as_me:$LINENO: error: could not locate " >&5 +$as_echo "$as_me: error: could not locate " >&2;} + { (exit 1); exit 1; }; } +fi + +done + + +for ac_header in ldap_ssl.h +do +as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` +if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then + { $as_echo "$as_me:$LINENO: checking for $ac_header" >&5 +$as_echo_n "checking for $ac_header... " >&6; } +if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then + $as_echo_n "(cached) " >&6 +fi +ac_res=`eval 'as_val=${'$as_ac_Header'} + $as_echo "$as_val"'` + { $as_echo "$as_me:$LINENO: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } +else + # Is the header compilable? +{ $as_echo "$as_me:$LINENO: checking $ac_header usability" >&5 +$as_echo_n "checking $ac_header usability... " >&6; } +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default +#include <$ac_header> +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_header_compiler=yes +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_header_compiler=no +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +{ $as_echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 +$as_echo "$ac_header_compiler" >&6; } + +# Is the header present? +{ $as_echo "$as_me:$LINENO: checking $ac_header presence" >&5 +$as_echo_n "checking $ac_header presence... " >&6; } +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include <$ac_header> +_ACEOF +if { (ac_try="$ac_cpp conftest.$ac_ext" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } >/dev/null && { + test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || + test ! -s conftest.err + }; then + ac_header_preproc=yes +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_header_preproc=no +fi + +rm -f conftest.err conftest.$ac_ext +{ $as_echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 +$as_echo "$ac_header_preproc" >&6; } + +# So? What about this header? +case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in + yes:no: ) + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 +$as_echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 +$as_echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} + ac_header_preproc=yes + ;; + no:yes:* ) + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 +$as_echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 +$as_echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 +$as_echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 +$as_echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 +$as_echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 +$as_echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} + + ;; +esac +{ $as_echo "$as_me:$LINENO: checking for $ac_header" >&5 +$as_echo_n "checking for $ac_header... " >&6; } +if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then + $as_echo_n "(cached) " >&6 +else + eval "$as_ac_Header=\$ac_header_preproc" +fi +ac_res=`eval 'as_val=${'$as_ac_Header'} + $as_echo "$as_val"'` + { $as_echo "$as_me:$LINENO: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } + +fi +as_val=`eval 'as_val=${'$as_ac_Header'} + $as_echo "$as_val"'` + if test "x$as_val" = x""yes; then + cat >>confdefs.h <<_ACEOF +#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 +_ACEOF + +fi + +done + + + if test -z "$with_ldap_lib"; then + with_ldap_lib=auto + fi + + if test -z "$found_ldap_lib" -a \( $with_ldap_lib = auto -o $with_ldap_lib = umich -o $with_ldap_lib = openldap \); then + { $as_echo "$as_me:$LINENO: checking for main in -llber" >&5 +$as_echo_n "checking for main in -llber... " >&6; } +if test "${ac_cv_lib_lber_main+set}" = set; then + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-llber $LIBS" +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + + +int +main () +{ +return main (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + $as_test_x conftest$ac_exeext + }; then + ac_cv_lib_lber_main=yes +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_cv_lib_lber_main=no +fi + +rm -rf conftest.dSYM +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:$LINENO: result: $ac_cv_lib_lber_main" >&5 +$as_echo "$ac_cv_lib_lber_main" >&6; } +if test "x$ac_cv_lib_lber_main" = x""yes; then + LDAP_LIBS="-llber" +fi + + { $as_echo "$as_me:$LINENO: checking for main in -lldap" >&5 +$as_echo_n "checking for main in -lldap... " >&6; } +if test "${ac_cv_lib_ldap_main+set}" = set; then + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lldap $LDAP_LIBS $LIBS" +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + + +int +main () +{ +return main (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + $as_test_x conftest$ac_exeext + }; then + ac_cv_lib_ldap_main=yes +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_cv_lib_ldap_main=no +fi + +rm -rf conftest.dSYM +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:$LINENO: result: $ac_cv_lib_ldap_main" >&5 +$as_echo "$ac_cv_lib_ldap_main" >&6; } +if test "x$ac_cv_lib_ldap_main" = x""yes; then + LDAP_LIBS="-lldap $LDAP_LIBS" found_ldap_lib=yes +fi + + fi + + if test -z "$found_ldap_lib" -a \( $with_ldap_lib = auto -o $with_ldap_lib = netscape5 \); then + { $as_echo "$as_me:$LINENO: checking for main in -lldap50" >&5 +$as_echo_n "checking for main in -lldap50... " >&6; } +if test "${ac_cv_lib_ldap50_main+set}" = set; then + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lldap50 -lpthread $LIBS" +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + + +int +main () +{ +return main (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + $as_test_x conftest$ac_exeext + }; then + ac_cv_lib_ldap50_main=yes +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_cv_lib_ldap50_main=no +fi + +rm -rf conftest.dSYM +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:$LINENO: result: $ac_cv_lib_ldap50_main" >&5 +$as_echo "$ac_cv_lib_ldap50_main" >&6; } +if test "x$ac_cv_lib_ldap50_main" = x""yes; then + LDAP_LIBS="-lldap50 -lssldap50 -lssl3 -lnss3 -lnspr4 -lprldap50 -lplc4 -lplds4" found_ldap_lib=yes need_pthread=true +fi + + fi + if test -z "$found_ldap_lib" -a \( $with_ldap_lib = auto -o $with_ldap_lib = netscape4 \); then + { $as_echo "$as_me:$LINENO: checking for main in -lldapssl41" >&5 +$as_echo_n "checking for main in -lldapssl41... " >&6; } +if test "${ac_cv_lib_ldapssl41_main+set}" = set; then + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lldapssl41 -lpthread $LIBS" +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + + +int +main () +{ +return main (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + $as_test_x conftest$ac_exeext + }; then + ac_cv_lib_ldapssl41_main=yes +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_cv_lib_ldapssl41_main=no +fi + +rm -rf conftest.dSYM +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:$LINENO: result: $ac_cv_lib_ldapssl41_main" >&5 +$as_echo "$ac_cv_lib_ldapssl41_main" >&6; } +if test "x$ac_cv_lib_ldapssl41_main" = x""yes; then + LDAP_LIBS="-lldapssl41 -lplc3 -lplds3 -lnspr3" found_ldap_lib=yes need_pthread=true +fi + + if test -z "$found_ldap_lib"; then + { $as_echo "$as_me:$LINENO: checking for main in -lldapssl40" >&5 +$as_echo_n "checking for main in -lldapssl40... " >&6; } +if test "${ac_cv_lib_ldapssl40_main+set}" = set; then + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lldapssl40 -lpthread $LIBS" +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + + +int +main () +{ +return main (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + $as_test_x conftest$ac_exeext + }; then + ac_cv_lib_ldapssl40_main=yes +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_cv_lib_ldapssl40_main=no +fi + +rm -rf conftest.dSYM +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:$LINENO: result: $ac_cv_lib_ldapssl40_main" >&5 +$as_echo "$ac_cv_lib_ldapssl40_main" >&6; } +if test "x$ac_cv_lib_ldapssl40_main" = x""yes; then + LDAP_LIBS="-lldapssl40" found_ldap_lib=yes need_pthread=true +fi + + fi + fi + if test -z "$found_ldap_lib" -a \( $with_ldap_lib = auto -o $with_ldap_lib = netscape3 \); then + { $as_echo "$as_me:$LINENO: checking for main in -lldapssl30" >&5 +$as_echo_n "checking for main in -lldapssl30... " >&6; } +if test "${ac_cv_lib_ldapssl30_main+set}" = set; then + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lldapssl30 -lpthread $LIBS" +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + + +int +main () +{ +return main (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + $as_test_x conftest$ac_exeext + }; then + ac_cv_lib_ldapssl30_main=yes +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_cv_lib_ldapssl30_main=no +fi + +rm -rf conftest.dSYM +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:$LINENO: result: $ac_cv_lib_ldapssl30_main" >&5 +$as_echo "$ac_cv_lib_ldapssl30_main" >&6; } +if test "x$ac_cv_lib_ldapssl30_main" = x""yes; then + LDAP_LIBS="-lldapssl30" found_ldap_lib=yes need_pthread=true +fi + + fi + if test -z "$found_ldap_lib"; then + { { $as_echo "$as_me:$LINENO: error: could not locate a valid LDAP library" >&5 +$as_echo "$as_me: error: could not locate a valid LDAP library" >&2;} + { (exit 1); exit 1; }; } + fi + + if test "$need_pthread" = "true"; then + +{ $as_echo "$as_me:$LINENO: checking for main in -lpthread" >&5 +$as_echo_n "checking for main in -lpthread... " >&6; } +if test "${ac_cv_lib_pthread_main+set}" = set; then + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lpthread $LIBS" +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + + +int +main () +{ +return main (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + $as_test_x conftest$ac_exeext + }; then + ac_cv_lib_pthread_main=yes +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_cv_lib_pthread_main=no +fi + +rm -rf conftest.dSYM +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:$LINENO: result: $ac_cv_lib_pthread_main" >&5 +$as_echo "$ac_cv_lib_pthread_main" >&6; } +if test "x$ac_cv_lib_pthread_main" = x""yes; then + cat >>confdefs.h <<_ACEOF +#define HAVE_LIBPTHREAD 1 +_ACEOF + + LIBS="-lpthread $LIBS" + +fi + + fi + + BACKUP_LIBS=$LIBS + LIBS="$LDAP_LIBS $LIBS" + + + + + + + + +for ac_func in ldap_init ldap_get_lderrno ldap_parse_result ldap_memfree ldap_controls_free ldap_set_option ldap_get_option +do +as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` +{ $as_echo "$as_me:$LINENO: checking for $ac_func" >&5 +$as_echo_n "checking for $ac_func... " >&6; } +if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then + $as_echo_n "(cached) " >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +/* Define $ac_func to an innocuous variant, in case declares $ac_func. + For example, HP-UX 11i declares gettimeofday. */ +#define $ac_func innocuous_$ac_func + +/* System header to define __stub macros and hopefully few prototypes, + which can conflict with char $ac_func (); below. + Prefer to if __STDC__ is defined, since + exists even on freestanding compilers. */ + +#ifdef __STDC__ +# include +#else +# include +#endif + +#undef $ac_func + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char $ac_func (); +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined __stub_$ac_func || defined __stub___$ac_func +choke me +#endif + +int +main () +{ +return $ac_func (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + $as_test_x conftest$ac_exeext + }; then + eval "$as_ac_var=yes" +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + eval "$as_ac_var=no" +fi + +rm -rf conftest.dSYM +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext +fi +ac_res=`eval 'as_val=${'$as_ac_var'} + $as_echo "$as_val"'` + { $as_echo "$as_me:$LINENO: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } +as_val=`eval 'as_val=${'$as_ac_var'} + $as_echo "$as_val"'` + if test "x$as_val" = x""yes; then + cat >>confdefs.h <<_ACEOF +#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 +_ACEOF + +fi +done + + if test "$enable_ssl" \!= "no"; then + + + +for ac_func in ldapssl_init ldap_start_tls_s ldap_pvt_tls_set_option +do +as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` +{ $as_echo "$as_me:$LINENO: checking for $ac_func" >&5 +$as_echo_n "checking for $ac_func... " >&6; } +if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then + $as_echo_n "(cached) " >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +/* Define $ac_func to an innocuous variant, in case declares $ac_func. + For example, HP-UX 11i declares gettimeofday. */ +#define $ac_func innocuous_$ac_func + +/* System header to define __stub macros and hopefully few prototypes, + which can conflict with char $ac_func (); below. + Prefer to if __STDC__ is defined, since + exists even on freestanding compilers. */ + +#ifdef __STDC__ +# include +#else +# include +#endif + +#undef $ac_func + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char $ac_func (); +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined __stub_$ac_func || defined __stub___$ac_func +choke me +#endif + +int +main () +{ +return $ac_func (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + $as_test_x conftest$ac_exeext + }; then + eval "$as_ac_var=yes" +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + eval "$as_ac_var=no" +fi + +rm -rf conftest.dSYM +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext +fi +ac_res=`eval 'as_val=${'$as_ac_var'} + $as_echo "$as_val"'` + { $as_echo "$as_me:$LINENO: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } +as_val=`eval 'as_val=${'$as_ac_var'} + $as_echo "$as_val"'` + if test "x$as_val" = x""yes; then + cat >>confdefs.h <<_ACEOF +#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 +_ACEOF + +fi +done + + fi + +for ac_func in ldap_initialize +do +as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` +{ $as_echo "$as_me:$LINENO: checking for $ac_func" >&5 +$as_echo_n "checking for $ac_func... " >&6; } +if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then + $as_echo_n "(cached) " >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +/* Define $ac_func to an innocuous variant, in case declares $ac_func. + For example, HP-UX 11i declares gettimeofday. */ +#define $ac_func innocuous_$ac_func + +/* System header to define __stub macros and hopefully few prototypes, + which can conflict with char $ac_func (); below. + Prefer to if __STDC__ is defined, since + exists even on freestanding compilers. */ + +#ifdef __STDC__ +# include +#else +# include +#endif + +#undef $ac_func + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char $ac_func (); +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined __stub_$ac_func || defined __stub___$ac_func +choke me +#endif + +int +main () +{ +return $ac_func (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + $as_test_x conftest$ac_exeext + }; then + eval "$as_ac_var=yes" +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + eval "$as_ac_var=no" +fi + +rm -rf conftest.dSYM +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext +fi +ac_res=`eval 'as_val=${'$as_ac_var'} + $as_echo "$as_val"'` + { $as_echo "$as_me:$LINENO: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } +as_val=`eval 'as_val=${'$as_ac_var'} + $as_echo "$as_val"'` + if test "x$as_val" = x""yes; then + cat >>confdefs.h <<_ACEOF +#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 +_ACEOF + +fi +done + + + +for ac_func in ldap_set_rebind_proc +do +as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` +{ $as_echo "$as_me:$LINENO: checking for $ac_func" >&5 +$as_echo_n "checking for $ac_func... " >&6; } +if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then + $as_echo_n "(cached) " >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +/* Define $ac_func to an innocuous variant, in case declares $ac_func. + For example, HP-UX 11i declares gettimeofday. */ +#define $ac_func innocuous_$ac_func + +/* System header to define __stub macros and hopefully few prototypes, + which can conflict with char $ac_func (); below. + Prefer to if __STDC__ is defined, since + exists even on freestanding compilers. */ + +#ifdef __STDC__ +# include +#else +# include +#endif + +#undef $ac_func + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char $ac_func (); +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined __stub_$ac_func || defined __stub___$ac_func +choke me +#endif + +int +main () +{ +return $ac_func (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + $as_test_x conftest$ac_exeext + }; then + eval "$as_ac_var=yes" +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + eval "$as_ac_var=no" +fi + +rm -rf conftest.dSYM +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext +fi +ac_res=`eval 'as_val=${'$as_ac_var'} + $as_echo "$as_val"'` + { $as_echo "$as_me:$LINENO: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } +as_val=`eval 'as_val=${'$as_ac_var'} + $as_echo "$as_val"'` + if test "x$as_val" = x""yes; then + cat >>confdefs.h <<_ACEOF +#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 +_ACEOF + +fi +done + + { $as_echo "$as_me:$LINENO: checking whether ldap_set_rebind_proc takes 3 arguments" >&5 +$as_echo_n "checking whether ldap_set_rebind_proc takes 3 arguments... " >&6; } +if test "${pam_ldap_cv_ldap_set_rebind_proc+set}" = set; then + $as_echo_n "(cached) " >&6 +else + + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +#include +#include +int +main () +{ +ldap_set_rebind_proc(0, 0, 0); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + pam_ldap_cv_ldap_set_rebind_proc=3 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + pam_ldap_cv_ldap_set_rebind_proc=2 +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +{ $as_echo "$as_me:$LINENO: result: $pam_ldap_cv_ldap_set_rebind_proc" >&5 +$as_echo "$pam_ldap_cv_ldap_set_rebind_proc" >&6; } + +cat >>confdefs.h <<_ACEOF +#define LDAP_SET_REBIND_PROC_ARGS $pam_ldap_cv_ldap_set_rebind_proc +_ACEOF + + + LIBS=$BACKUP_LIBS +else + { $as_echo "$as_me:$LINENO: checking for dlopen in -ldl" >&5 +$as_echo_n "checking for dlopen in -ldl... " >&6; } +if test "${ac_cv_lib_dl_dlopen+set}" = set; then + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ldl $LIBS" +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char dlopen (); +int +main () +{ +return dlopen (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + $as_test_x conftest$ac_exeext + }; then + ac_cv_lib_dl_dlopen=yes +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_cv_lib_dl_dlopen=no +fi + +rm -rf conftest.dSYM +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:$LINENO: result: $ac_cv_lib_dl_dlopen" >&5 +$as_echo "$ac_cv_lib_dl_dlopen" >&6; } +if test "x$ac_cv_lib_dl_dlopen" = x""yes; then + LDAP_LIBS="-ldl" +else + LDAP_LIBS="" +fi + + +fi + + +for ac_header in libnscd.h +do +as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` +if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then + { $as_echo "$as_me:$LINENO: checking for $ac_header" >&5 +$as_echo_n "checking for $ac_header... " >&6; } +if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then + $as_echo_n "(cached) " >&6 +fi +ac_res=`eval 'as_val=${'$as_ac_Header'} + $as_echo "$as_val"'` + { $as_echo "$as_me:$LINENO: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } +else + # Is the header compilable? +{ $as_echo "$as_me:$LINENO: checking $ac_header usability" >&5 +$as_echo_n "checking $ac_header usability... " >&6; } +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default +#include <$ac_header> +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_header_compiler=yes +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_header_compiler=no +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +{ $as_echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 +$as_echo "$ac_header_compiler" >&6; } + +# Is the header present? +{ $as_echo "$as_me:$LINENO: checking $ac_header presence" >&5 +$as_echo_n "checking $ac_header presence... " >&6; } +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include <$ac_header> +_ACEOF +if { (ac_try="$ac_cpp conftest.$ac_ext" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } >/dev/null && { + test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || + test ! -s conftest.err + }; then + ac_header_preproc=yes +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_header_preproc=no +fi + +rm -f conftest.err conftest.$ac_ext +{ $as_echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 +$as_echo "$ac_header_preproc" >&6; } + +# So? What about this header? +case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in + yes:no: ) + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 +$as_echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 +$as_echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} + ac_header_preproc=yes + ;; + no:yes:* ) + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 +$as_echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 +$as_echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 +$as_echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 +$as_echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 +$as_echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 +$as_echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} + + ;; +esac +{ $as_echo "$as_me:$LINENO: checking for $ac_header" >&5 +$as_echo_n "checking for $ac_header... " >&6; } +if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then + $as_echo_n "(cached) " >&6 +else + eval "$as_ac_Header=\$ac_header_preproc" +fi +ac_res=`eval 'as_val=${'$as_ac_Header'} + $as_echo "$as_val"'` + { $as_echo "$as_me:$LINENO: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } + +fi +as_val=`eval 'as_val=${'$as_ac_Header'} + $as_echo "$as_val"'` + if test "x$as_val" = x""yes; then + cat >>confdefs.h <<_ACEOF +#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 +_ACEOF + +fi + +done + +{ $as_echo "$as_me:$LINENO: checking for nscd_flush_cache in -lnscd" >&5 +$as_echo_n "checking for nscd_flush_cache in -lnscd... " >&6; } +if test "${ac_cv_lib_nscd_nscd_flush_cache+set}" = set; then + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lnscd $LIBS" +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char nscd_flush_cache (); +int +main () +{ +return nscd_flush_cache (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + $as_test_x conftest$ac_exeext + }; then + ac_cv_lib_nscd_nscd_flush_cache=yes +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_cv_lib_nscd_nscd_flush_cache=no +fi + +rm -rf conftest.dSYM +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:$LINENO: result: $ac_cv_lib_nscd_nscd_flush_cache" >&5 +$as_echo "$ac_cv_lib_nscd_nscd_flush_cache" >&6; } +if test "x$ac_cv_lib_nscd_nscd_flush_cache" = x""yes; then + NSCD_LIB="-lnscd" +else + NSCD_LIB="" +fi + + +BACKUP_LIBS=$LIBS +LIBS="$LIBS $NSCD_LIB" + +for ac_func in nscd_flush_cache +do +as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` +{ $as_echo "$as_me:$LINENO: checking for $ac_func" >&5 +$as_echo_n "checking for $ac_func... " >&6; } +if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then + $as_echo_n "(cached) " >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +/* Define $ac_func to an innocuous variant, in case declares $ac_func. + For example, HP-UX 11i declares gettimeofday. */ +#define $ac_func innocuous_$ac_func + +/* System header to define __stub macros and hopefully few prototypes, + which can conflict with char $ac_func (); below. + Prefer to if __STDC__ is defined, since + exists even on freestanding compilers. */ + +#ifdef __STDC__ +# include +#else +# include +#endif + +#undef $ac_func + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char $ac_func (); +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined __stub_$ac_func || defined __stub___$ac_func +choke me +#endif + +int +main () +{ +return $ac_func (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + $as_test_x conftest$ac_exeext + }; then + eval "$as_ac_var=yes" +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + eval "$as_ac_var=no" +fi + +rm -rf conftest.dSYM +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext +fi +ac_res=`eval 'as_val=${'$as_ac_var'} + $as_echo "$as_val"'` + { $as_echo "$as_me:$LINENO: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } +as_val=`eval 'as_val=${'$as_ac_var'} + $as_echo "$as_val"'` + if test "x$as_val" = x""yes; then + cat >>confdefs.h <<_ACEOF +#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 +_ACEOF + +fi +done + +LIBS=$BACKUP_LIBS + + + + { $as_echo "$as_me:$LINENO: checking whether NLS is requested" >&5 +$as_echo_n "checking whether NLS is requested... " >&6; } + # Check whether --enable-nls was given. +if test "${enable_nls+set}" = set; then + enableval=$enable_nls; USE_NLS=$enableval +else + USE_NLS=yes +fi + + { $as_echo "$as_me:$LINENO: result: $USE_NLS" >&5 +$as_echo "$USE_NLS" >&6; } + + + + + + +# Prepare PATH_SEPARATOR. +# The user is always right. +if test "${PATH_SEPARATOR+set}" != set; then + echo "#! /bin/sh" >conf$$.sh + echo "exit 0" >>conf$$.sh + chmod +x conf$$.sh + if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then + PATH_SEPARATOR=';' + else + PATH_SEPARATOR=: + fi + rm -f conf$$.sh +fi + +# Find out how to test for executable files. Don't use a zero-byte file, +# as systems may use methods other than mode bits to determine executability. +cat >conf$$.file <<_ASEOF +#! /bin/sh +exit 0 +_ASEOF +chmod +x conf$$.file +if test -x conf$$.file >/dev/null 2>&1; then + ac_executable_p="test -x" +else + ac_executable_p="test -f" +fi +rm -f conf$$.file + +# Extract the first word of "msgfmt", so it can be a program name with args. +set dummy msgfmt; ac_word=$2 +{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_path_MSGFMT+set}" = set; then + $as_echo_n "(cached) " >&6 +else + case "$MSGFMT" in + [\\/]* | ?:[\\/]*) + ac_cv_path_MSGFMT="$MSGFMT" # Let the user override the test with a path. + ;; + *) + ac_save_IFS="$IFS"; IFS=$PATH_SEPARATOR + for ac_dir in $PATH; do + IFS="$ac_save_IFS" + test -z "$ac_dir" && ac_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if $ac_executable_p "$ac_dir/$ac_word$ac_exec_ext"; then + echo "$as_me: trying $ac_dir/$ac_word..." >&5 + if $ac_dir/$ac_word --statistics /dev/null >&5 2>&1 && + (if $ac_dir/$ac_word --statistics /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi); then + ac_cv_path_MSGFMT="$ac_dir/$ac_word$ac_exec_ext" + break 2 + fi + fi + done + done + IFS="$ac_save_IFS" + test -z "$ac_cv_path_MSGFMT" && ac_cv_path_MSGFMT=":" + ;; +esac +fi +MSGFMT="$ac_cv_path_MSGFMT" +if test "$MSGFMT" != ":"; then + { $as_echo "$as_me:$LINENO: result: $MSGFMT" >&5 +$as_echo "$MSGFMT" >&6; } +else + { $as_echo "$as_me:$LINENO: result: no" >&5 +$as_echo "no" >&6; } +fi + + # Extract the first word of "gmsgfmt", so it can be a program name with args. +set dummy gmsgfmt; ac_word=$2 +{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_path_GMSGFMT+set}" = set; then + $as_echo_n "(cached) " >&6 +else + case $GMSGFMT in + [\\/]* | ?:[\\/]*) + ac_cv_path_GMSGFMT="$GMSGFMT" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_GMSGFMT="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done +IFS=$as_save_IFS + + test -z "$ac_cv_path_GMSGFMT" && ac_cv_path_GMSGFMT="$MSGFMT" + ;; +esac +fi +GMSGFMT=$ac_cv_path_GMSGFMT +if test -n "$GMSGFMT"; then + { $as_echo "$as_me:$LINENO: result: $GMSGFMT" >&5 +$as_echo "$GMSGFMT" >&6; } +else + { $as_echo "$as_me:$LINENO: result: no" >&5 +$as_echo "no" >&6; } +fi + + + + case `$MSGFMT --version | sed 1q | sed -e 's,^[^0-9]*,,'` in + '' | 0.[0-9] | 0.[0-9].* | 0.1[0-4] | 0.1[0-4].*) MSGFMT_015=: ;; + *) MSGFMT_015=$MSGFMT ;; + esac + + case `$GMSGFMT --version | sed 1q | sed -e 's,^[^0-9]*,,'` in + '' | 0.[0-9] | 0.[0-9].* | 0.1[0-4] | 0.1[0-4].*) GMSGFMT_015=: ;; + *) GMSGFMT_015=$GMSGFMT ;; + esac + + + +# Prepare PATH_SEPARATOR. +# The user is always right. +if test "${PATH_SEPARATOR+set}" != set; then + echo "#! /bin/sh" >conf$$.sh + echo "exit 0" >>conf$$.sh + chmod +x conf$$.sh + if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then + PATH_SEPARATOR=';' + else + PATH_SEPARATOR=: + fi + rm -f conf$$.sh +fi + +# Find out how to test for executable files. Don't use a zero-byte file, +# as systems may use methods other than mode bits to determine executability. +cat >conf$$.file <<_ASEOF +#! /bin/sh +exit 0 +_ASEOF +chmod +x conf$$.file +if test -x conf$$.file >/dev/null 2>&1; then + ac_executable_p="test -x" +else + ac_executable_p="test -f" +fi +rm -f conf$$.file + +# Extract the first word of "xgettext", so it can be a program name with args. +set dummy xgettext; ac_word=$2 +{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_path_XGETTEXT+set}" = set; then + $as_echo_n "(cached) " >&6 +else + case "$XGETTEXT" in + [\\/]* | ?:[\\/]*) + ac_cv_path_XGETTEXT="$XGETTEXT" # Let the user override the test with a path. + ;; + *) + ac_save_IFS="$IFS"; IFS=$PATH_SEPARATOR + for ac_dir in $PATH; do + IFS="$ac_save_IFS" + test -z "$ac_dir" && ac_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if $ac_executable_p "$ac_dir/$ac_word$ac_exec_ext"; then + echo "$as_me: trying $ac_dir/$ac_word..." >&5 + if $ac_dir/$ac_word --omit-header --copyright-holder= --msgid-bugs-address= /dev/null >&5 2>&1 && + (if $ac_dir/$ac_word --omit-header --copyright-holder= --msgid-bugs-address= /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi); then + ac_cv_path_XGETTEXT="$ac_dir/$ac_word$ac_exec_ext" + break 2 + fi + fi + done + done + IFS="$ac_save_IFS" + test -z "$ac_cv_path_XGETTEXT" && ac_cv_path_XGETTEXT=":" + ;; +esac +fi +XGETTEXT="$ac_cv_path_XGETTEXT" +if test "$XGETTEXT" != ":"; then + { $as_echo "$as_me:$LINENO: result: $XGETTEXT" >&5 +$as_echo "$XGETTEXT" >&6; } +else + { $as_echo "$as_me:$LINENO: result: no" >&5 +$as_echo "no" >&6; } +fi + + rm -f messages.po + + case `$XGETTEXT --version | sed 1q | sed -e 's,^[^0-9]*,,'` in + '' | 0.[0-9] | 0.[0-9].* | 0.1[0-4] | 0.1[0-4].*) XGETTEXT_015=: ;; + *) XGETTEXT_015=$XGETTEXT ;; + esac + + + +# Prepare PATH_SEPARATOR. +# The user is always right. +if test "${PATH_SEPARATOR+set}" != set; then + echo "#! /bin/sh" >conf$$.sh + echo "exit 0" >>conf$$.sh + chmod +x conf$$.sh + if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then + PATH_SEPARATOR=';' + else + PATH_SEPARATOR=: + fi + rm -f conf$$.sh +fi + +# Find out how to test for executable files. Don't use a zero-byte file, +# as systems may use methods other than mode bits to determine executability. +cat >conf$$.file <<_ASEOF +#! /bin/sh +exit 0 +_ASEOF +chmod +x conf$$.file +if test -x conf$$.file >/dev/null 2>&1; then + ac_executable_p="test -x" +else + ac_executable_p="test -f" +fi +rm -f conf$$.file + +# Extract the first word of "msgmerge", so it can be a program name with args. +set dummy msgmerge; ac_word=$2 +{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_path_MSGMERGE+set}" = set; then + $as_echo_n "(cached) " >&6 +else + case "$MSGMERGE" in + [\\/]* | ?:[\\/]*) + ac_cv_path_MSGMERGE="$MSGMERGE" # Let the user override the test with a path. + ;; + *) + ac_save_IFS="$IFS"; IFS=$PATH_SEPARATOR + for ac_dir in $PATH; do + IFS="$ac_save_IFS" + test -z "$ac_dir" && ac_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if $ac_executable_p "$ac_dir/$ac_word$ac_exec_ext"; then + echo "$as_me: trying $ac_dir/$ac_word..." >&5 + if $ac_dir/$ac_word --update -q /dev/null /dev/null >&5 2>&1; then + ac_cv_path_MSGMERGE="$ac_dir/$ac_word$ac_exec_ext" + break 2 + fi + fi + done + done + IFS="$ac_save_IFS" + test -z "$ac_cv_path_MSGMERGE" && ac_cv_path_MSGMERGE=":" + ;; +esac +fi +MSGMERGE="$ac_cv_path_MSGMERGE" +if test "$MSGMERGE" != ":"; then + { $as_echo "$as_me:$LINENO: result: $MSGMERGE" >&5 +$as_echo "$MSGMERGE" >&6; } +else + { $as_echo "$as_me:$LINENO: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$localedir" || localedir='${datadir}/locale' + + + ac_config_commands="$ac_config_commands po-directories" + + + + if test "X$prefix" = "XNONE"; then + acl_final_prefix="$ac_default_prefix" + else + acl_final_prefix="$prefix" + fi + if test "X$exec_prefix" = "XNONE"; then + acl_final_exec_prefix='${prefix}' + else + acl_final_exec_prefix="$exec_prefix" + fi + acl_save_prefix="$prefix" + prefix="$acl_final_prefix" + eval acl_final_exec_prefix=\"$acl_final_exec_prefix\" + prefix="$acl_save_prefix" + + +# Check whether --with-gnu-ld was given. +if test "${with_gnu_ld+set}" = set; then + withval=$with_gnu_ld; test "$withval" = no || with_gnu_ld=yes +else + with_gnu_ld=no +fi + +# Prepare PATH_SEPARATOR. +# The user is always right. +if test "${PATH_SEPARATOR+set}" != set; then + echo "#! /bin/sh" >conf$$.sh + echo "exit 0" >>conf$$.sh + chmod +x conf$$.sh + if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then + PATH_SEPARATOR=';' + else + PATH_SEPARATOR=: + fi + rm -f conf$$.sh +fi +ac_prog=ld +if test "$GCC" = yes; then + # Check if gcc -print-prog-name=ld gives a path. + { $as_echo "$as_me:$LINENO: checking for ld used by GCC" >&5 +$as_echo_n "checking for ld used by GCC... " >&6; } + case $host in + *-*-mingw*) + # gcc leaves a trailing carriage return which upsets mingw + ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; + *) + ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; + esac + case $ac_prog in + # Accept absolute paths. + [\\/]* | [A-Za-z]:[\\/]*) + re_direlt='/[^/][^/]*/\.\./' + # Canonicalize the path of ld + ac_prog=`echo $ac_prog| sed 's%\\\\%/%g'` + while echo $ac_prog | grep "$re_direlt" > /dev/null 2>&1; do + ac_prog=`echo $ac_prog| sed "s%$re_direlt%/%"` + done + test -z "$LD" && LD="$ac_prog" + ;; + "") + # If it fails, then pretend we aren't using GCC. + ac_prog=ld + ;; + *) + # If it is relative, then search for the first ld in PATH. + with_gnu_ld=unknown + ;; + esac +elif test "$with_gnu_ld" = yes; then + { $as_echo "$as_me:$LINENO: checking for GNU ld" >&5 +$as_echo_n "checking for GNU ld... " >&6; } +else + { $as_echo "$as_me:$LINENO: checking for non-GNU ld" >&5 +$as_echo_n "checking for non-GNU ld... " >&6; } +fi +if test "${acl_cv_path_LD+set}" = set; then + $as_echo_n "(cached) " >&6 +else + if test -z "$LD"; then + IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}${PATH_SEPARATOR-:}" + for ac_dir in $PATH; do + test -z "$ac_dir" && ac_dir=. + if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then + acl_cv_path_LD="$ac_dir/$ac_prog" + # Check to see if the program is GNU ld. I'd rather use --version, + # but apparently some GNU ld's only accept -v. + # Break only if it was the GNU/non-GNU ld that we prefer. + case `"$acl_cv_path_LD" -v 2>&1 < /dev/null` in + *GNU* | *'with BFD'*) + test "$with_gnu_ld" != no && break ;; + *) + test "$with_gnu_ld" != yes && break ;; + esac + fi + done + IFS="$ac_save_ifs" +else + acl_cv_path_LD="$LD" # Let the user override the test with a path. +fi +fi + +LD="$acl_cv_path_LD" +if test -n "$LD"; then + { $as_echo "$as_me:$LINENO: result: $LD" >&5 +$as_echo "$LD" >&6; } +else + { $as_echo "$as_me:$LINENO: result: no" >&5 +$as_echo "no" >&6; } +fi +test -z "$LD" && { { $as_echo "$as_me:$LINENO: error: no acceptable ld found in \$PATH" >&5 +$as_echo "$as_me: error: no acceptable ld found in \$PATH" >&2;} + { (exit 1); exit 1; }; } +{ $as_echo "$as_me:$LINENO: checking if the linker ($LD) is GNU ld" >&5 +$as_echo_n "checking if the linker ($LD) is GNU ld... " >&6; } +if test "${acl_cv_prog_gnu_ld+set}" = set; then + $as_echo_n "(cached) " >&6 +else + # I'd rather use --version here, but apparently some GNU ld's only accept -v. +case `$LD -v 2>&1 &5 +$as_echo "$acl_cv_prog_gnu_ld" >&6; } +with_gnu_ld=$acl_cv_prog_gnu_ld + + + + + { $as_echo "$as_me:$LINENO: checking for shared library run path origin" >&5 +$as_echo_n "checking for shared library run path origin... " >&6; } +if test "${acl_cv_rpath+set}" = set; then + $as_echo_n "(cached) " >&6 +else + + CC="$CC" GCC="$GCC" LDFLAGS="$LDFLAGS" LD="$LD" with_gnu_ld="$with_gnu_ld" \ + ${CONFIG_SHELL-/bin/sh} "$ac_aux_dir/config.rpath" "$host" > conftest.sh + . ./conftest.sh + rm -f ./conftest.sh + acl_cv_rpath=done + +fi +{ $as_echo "$as_me:$LINENO: result: $acl_cv_rpath" >&5 +$as_echo "$acl_cv_rpath" >&6; } + wl="$acl_cv_wl" + libext="$acl_cv_libext" + shlibext="$acl_cv_shlibext" + hardcode_libdir_flag_spec="$acl_cv_hardcode_libdir_flag_spec" + hardcode_libdir_separator="$acl_cv_hardcode_libdir_separator" + hardcode_direct="$acl_cv_hardcode_direct" + hardcode_minus_L="$acl_cv_hardcode_minus_L" + # Check whether --enable-rpath was given. +if test "${enable_rpath+set}" = set; then + enableval=$enable_rpath; : +else + enable_rpath=yes +fi + + + + acl_libdirstem=lib + searchpath=`(LC_ALL=C $CC -print-search-dirs) 2>/dev/null | sed -n -e 's,^libraries: ,,p' | sed -e 's,^=,,'` + if test -n "$searchpath"; then + acl_save_IFS="${IFS= }"; IFS=":" + for searchdir in $searchpath; do + if test -d "$searchdir"; then + case "$searchdir" in + */lib64/ | */lib64 ) acl_libdirstem=lib64 ;; + *) searchdir=`cd "$searchdir" && pwd` + case "$searchdir" in + */lib64 ) acl_libdirstem=lib64 ;; + esac ;; + esac + fi + done + IFS="$acl_save_IFS" + fi + + + + + + + + + use_additional=yes + + acl_save_prefix="$prefix" + prefix="$acl_final_prefix" + acl_save_exec_prefix="$exec_prefix" + exec_prefix="$acl_final_exec_prefix" + + eval additional_includedir=\"$includedir\" + eval additional_libdir=\"$libdir\" + + exec_prefix="$acl_save_exec_prefix" + prefix="$acl_save_prefix" + + +# Check whether --with-libiconv-prefix was given. +if test "${with_libiconv_prefix+set}" = set; then + withval=$with_libiconv_prefix; + if test "X$withval" = "Xno"; then + use_additional=no + else + if test "X$withval" = "X"; then + + acl_save_prefix="$prefix" + prefix="$acl_final_prefix" + acl_save_exec_prefix="$exec_prefix" + exec_prefix="$acl_final_exec_prefix" + + eval additional_includedir=\"$includedir\" + eval additional_libdir=\"$libdir\" + + exec_prefix="$acl_save_exec_prefix" + prefix="$acl_save_prefix" + + else + additional_includedir="$withval/include" + additional_libdir="$withval/$acl_libdirstem" + fi + fi + +fi + + LIBICONV= + LTLIBICONV= + INCICONV= + rpathdirs= + ltrpathdirs= + names_already_handled= + names_next_round='iconv ' + while test -n "$names_next_round"; do + names_this_round="$names_next_round" + names_next_round= + for name in $names_this_round; do + already_handled= + for n in $names_already_handled; do + if test "$n" = "$name"; then + already_handled=yes + break + fi + done + if test -z "$already_handled"; then + names_already_handled="$names_already_handled $name" + uppername=`echo "$name" | sed -e 'y|abcdefghijklmnopqrstuvwxyz./-|ABCDEFGHIJKLMNOPQRSTUVWXYZ___|'` + eval value=\"\$HAVE_LIB$uppername\" + if test -n "$value"; then + if test "$value" = yes; then + eval value=\"\$LIB$uppername\" + test -z "$value" || LIBICONV="${LIBICONV}${LIBICONV:+ }$value" + eval value=\"\$LTLIB$uppername\" + test -z "$value" || LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }$value" + else + : + fi + else + found_dir= + found_la= + found_so= + found_a= + if test $use_additional = yes; then + if test -n "$shlibext" && test -f "$additional_libdir/lib$name.$shlibext"; then + found_dir="$additional_libdir" + found_so="$additional_libdir/lib$name.$shlibext" + if test -f "$additional_libdir/lib$name.la"; then + found_la="$additional_libdir/lib$name.la" + fi + else + if test -f "$additional_libdir/lib$name.$libext"; then + found_dir="$additional_libdir" + found_a="$additional_libdir/lib$name.$libext" + if test -f "$additional_libdir/lib$name.la"; then + found_la="$additional_libdir/lib$name.la" + fi + fi + fi + fi + if test "X$found_dir" = "X"; then + for x in $LDFLAGS $LTLIBICONV; do + + acl_save_prefix="$prefix" + prefix="$acl_final_prefix" + acl_save_exec_prefix="$exec_prefix" + exec_prefix="$acl_final_exec_prefix" + eval x=\"$x\" + exec_prefix="$acl_save_exec_prefix" + prefix="$acl_save_prefix" + + case "$x" in + -L*) + dir=`echo "X$x" | sed -e 's/^X-L//'` + if test -n "$shlibext" && test -f "$dir/lib$name.$shlibext"; then + found_dir="$dir" + found_so="$dir/lib$name.$shlibext" + if test -f "$dir/lib$name.la"; then + found_la="$dir/lib$name.la" + fi + else + if test -f "$dir/lib$name.$libext"; then + found_dir="$dir" + found_a="$dir/lib$name.$libext" + if test -f "$dir/lib$name.la"; then + found_la="$dir/lib$name.la" + fi + fi + fi + ;; + esac + if test "X$found_dir" != "X"; then + break + fi + done + fi + if test "X$found_dir" != "X"; then + LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }-L$found_dir -l$name" + if test "X$found_so" != "X"; then + if test "$enable_rpath" = no || test "X$found_dir" = "X/usr/$acl_libdirstem"; then + LIBICONV="${LIBICONV}${LIBICONV:+ }$found_so" + else + haveit= + for x in $ltrpathdirs; do + if test "X$x" = "X$found_dir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + ltrpathdirs="$ltrpathdirs $found_dir" + fi + if test "$hardcode_direct" = yes; then + LIBICONV="${LIBICONV}${LIBICONV:+ }$found_so" + else + if test -n "$hardcode_libdir_flag_spec" && test "$hardcode_minus_L" = no; then + LIBICONV="${LIBICONV}${LIBICONV:+ }$found_so" + haveit= + for x in $rpathdirs; do + if test "X$x" = "X$found_dir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + rpathdirs="$rpathdirs $found_dir" + fi + else + haveit= + for x in $LDFLAGS $LIBICONV; do + + acl_save_prefix="$prefix" + prefix="$acl_final_prefix" + acl_save_exec_prefix="$exec_prefix" + exec_prefix="$acl_final_exec_prefix" + eval x=\"$x\" + exec_prefix="$acl_save_exec_prefix" + prefix="$acl_save_prefix" + + if test "X$x" = "X-L$found_dir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + LIBICONV="${LIBICONV}${LIBICONV:+ }-L$found_dir" + fi + if test "$hardcode_minus_L" != no; then + LIBICONV="${LIBICONV}${LIBICONV:+ }$found_so" + else + LIBICONV="${LIBICONV}${LIBICONV:+ }-l$name" + fi + fi + fi + fi + else + if test "X$found_a" != "X"; then + LIBICONV="${LIBICONV}${LIBICONV:+ }$found_a" + else + LIBICONV="${LIBICONV}${LIBICONV:+ }-L$found_dir -l$name" + fi + fi + additional_includedir= + case "$found_dir" in + */$acl_libdirstem | */$acl_libdirstem/) + basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem/"'*$,,'` + additional_includedir="$basedir/include" + ;; + esac + if test "X$additional_includedir" != "X"; then + if test "X$additional_includedir" != "X/usr/include"; then + haveit= + if test "X$additional_includedir" = "X/usr/local/include"; then + if test -n "$GCC"; then + case $host_os in + linux* | gnu* | k*bsd*-gnu) haveit=yes;; + esac + fi + fi + if test -z "$haveit"; then + for x in $CPPFLAGS $INCICONV; do + + acl_save_prefix="$prefix" + prefix="$acl_final_prefix" + acl_save_exec_prefix="$exec_prefix" + exec_prefix="$acl_final_exec_prefix" + eval x=\"$x\" + exec_prefix="$acl_save_exec_prefix" + prefix="$acl_save_prefix" + + if test "X$x" = "X-I$additional_includedir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + if test -d "$additional_includedir"; then + INCICONV="${INCICONV}${INCICONV:+ }-I$additional_includedir" + fi + fi + fi + fi + fi + if test -n "$found_la"; then + save_libdir="$libdir" + case "$found_la" in + */* | *\\*) . "$found_la" ;; + *) . "./$found_la" ;; + esac + libdir="$save_libdir" + for dep in $dependency_libs; do + case "$dep" in + -L*) + additional_libdir=`echo "X$dep" | sed -e 's/^X-L//'` + if test "X$additional_libdir" != "X/usr/$acl_libdirstem"; then + haveit= + if test "X$additional_libdir" = "X/usr/local/$acl_libdirstem"; then + if test -n "$GCC"; then + case $host_os in + linux* | gnu* | k*bsd*-gnu) haveit=yes;; + esac + fi + fi + if test -z "$haveit"; then + haveit= + for x in $LDFLAGS $LIBICONV; do + + acl_save_prefix="$prefix" + prefix="$acl_final_prefix" + acl_save_exec_prefix="$exec_prefix" + exec_prefix="$acl_final_exec_prefix" + eval x=\"$x\" + exec_prefix="$acl_save_exec_prefix" + prefix="$acl_save_prefix" + + if test "X$x" = "X-L$additional_libdir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + if test -d "$additional_libdir"; then + LIBICONV="${LIBICONV}${LIBICONV:+ }-L$additional_libdir" + fi + fi + haveit= + for x in $LDFLAGS $LTLIBICONV; do + + acl_save_prefix="$prefix" + prefix="$acl_final_prefix" + acl_save_exec_prefix="$exec_prefix" + exec_prefix="$acl_final_exec_prefix" + eval x=\"$x\" + exec_prefix="$acl_save_exec_prefix" + prefix="$acl_save_prefix" + + if test "X$x" = "X-L$additional_libdir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + if test -d "$additional_libdir"; then + LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }-L$additional_libdir" + fi + fi + fi + fi + ;; + -R*) + dir=`echo "X$dep" | sed -e 's/^X-R//'` + if test "$enable_rpath" != no; then + haveit= + for x in $rpathdirs; do + if test "X$x" = "X$dir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + rpathdirs="$rpathdirs $dir" + fi + haveit= + for x in $ltrpathdirs; do + if test "X$x" = "X$dir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + ltrpathdirs="$ltrpathdirs $dir" + fi + fi + ;; + -l*) + names_next_round="$names_next_round "`echo "X$dep" | sed -e 's/^X-l//'` + ;; + *.la) + names_next_round="$names_next_round "`echo "X$dep" | sed -e 's,^X.*/,,' -e 's,^lib,,' -e 's,\.la$,,'` + ;; + *) + LIBICONV="${LIBICONV}${LIBICONV:+ }$dep" + LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }$dep" + ;; + esac + done + fi + else + LIBICONV="${LIBICONV}${LIBICONV:+ }-l$name" + LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }-l$name" + fi + fi + fi + done + done + if test "X$rpathdirs" != "X"; then + if test -n "$hardcode_libdir_separator"; then + alldirs= + for found_dir in $rpathdirs; do + alldirs="${alldirs}${alldirs:+$hardcode_libdir_separator}$found_dir" + done + acl_save_libdir="$libdir" + libdir="$alldirs" + eval flag=\"$hardcode_libdir_flag_spec\" + libdir="$acl_save_libdir" + LIBICONV="${LIBICONV}${LIBICONV:+ }$flag" + else + for found_dir in $rpathdirs; do + acl_save_libdir="$libdir" + libdir="$found_dir" + eval flag=\"$hardcode_libdir_flag_spec\" + libdir="$acl_save_libdir" + LIBICONV="${LIBICONV}${LIBICONV:+ }$flag" + done + fi + fi + if test "X$ltrpathdirs" != "X"; then + for found_dir in $ltrpathdirs; do + LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }-R$found_dir" + done + fi + + + + + + + + + + + + + + + + + + + { $as_echo "$as_me:$LINENO: checking for CFPreferencesCopyAppValue" >&5 +$as_echo_n "checking for CFPreferencesCopyAppValue... " >&6; } +if test "${gt_cv_func_CFPreferencesCopyAppValue+set}" = set; then + $as_echo_n "(cached) " >&6 +else + gt_save_LIBS="$LIBS" + LIBS="$LIBS -Wl,-framework -Wl,CoreFoundation" + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include +int +main () +{ +CFPreferencesCopyAppValue(NULL, NULL) + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + $as_test_x conftest$ac_exeext + }; then + gt_cv_func_CFPreferencesCopyAppValue=yes +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + gt_cv_func_CFPreferencesCopyAppValue=no +fi + +rm -rf conftest.dSYM +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext + LIBS="$gt_save_LIBS" +fi +{ $as_echo "$as_me:$LINENO: result: $gt_cv_func_CFPreferencesCopyAppValue" >&5 +$as_echo "$gt_cv_func_CFPreferencesCopyAppValue" >&6; } + if test $gt_cv_func_CFPreferencesCopyAppValue = yes; then + +cat >>confdefs.h <<\_ACEOF +#define HAVE_CFPREFERENCESCOPYAPPVALUE 1 +_ACEOF + + fi + { $as_echo "$as_me:$LINENO: checking for CFLocaleCopyCurrent" >&5 +$as_echo_n "checking for CFLocaleCopyCurrent... " >&6; } +if test "${gt_cv_func_CFLocaleCopyCurrent+set}" = set; then + $as_echo_n "(cached) " >&6 +else + gt_save_LIBS="$LIBS" + LIBS="$LIBS -Wl,-framework -Wl,CoreFoundation" + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include +int +main () +{ +CFLocaleCopyCurrent(); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + $as_test_x conftest$ac_exeext + }; then + gt_cv_func_CFLocaleCopyCurrent=yes +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + gt_cv_func_CFLocaleCopyCurrent=no +fi + +rm -rf conftest.dSYM +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext + LIBS="$gt_save_LIBS" +fi +{ $as_echo "$as_me:$LINENO: result: $gt_cv_func_CFLocaleCopyCurrent" >&5 +$as_echo "$gt_cv_func_CFLocaleCopyCurrent" >&6; } + if test $gt_cv_func_CFLocaleCopyCurrent = yes; then + +cat >>confdefs.h <<\_ACEOF +#define HAVE_CFLOCALECOPYCURRENT 1 +_ACEOF + + fi + INTL_MACOSX_LIBS= + if test $gt_cv_func_CFPreferencesCopyAppValue = yes || test $gt_cv_func_CFLocaleCopyCurrent = yes; then + INTL_MACOSX_LIBS="-Wl,-framework -Wl,CoreFoundation" + fi + + + + + + + LIBINTL= + LTLIBINTL= + POSUB= + + if test "$USE_NLS" = "yes"; then + gt_use_preinstalled_gnugettext=no + + + + + + + { $as_echo "$as_me:$LINENO: checking for GNU gettext in libc" >&5 +$as_echo_n "checking for GNU gettext in libc... " >&6; } +if test "${gt_cv_func_gnugettext1_libc+set}" = set; then + $as_echo_n "(cached) " >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include +extern int _nl_msg_cat_cntr; +extern int *_nl_domain_bindings; +int +main () +{ +bindtextdomain ("", ""); +return * gettext ("") + _nl_msg_cat_cntr + *_nl_domain_bindings + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + $as_test_x conftest$ac_exeext + }; then + gt_cv_func_gnugettext1_libc=yes +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + gt_cv_func_gnugettext1_libc=no +fi + +rm -rf conftest.dSYM +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext +fi +{ $as_echo "$as_me:$LINENO: result: $gt_cv_func_gnugettext1_libc" >&5 +$as_echo "$gt_cv_func_gnugettext1_libc" >&6; } + + if test "$gt_cv_func_gnugettext1_libc" != "yes"; then + + + + + + am_save_CPPFLAGS="$CPPFLAGS" + + for element in $INCICONV; do + haveit= + for x in $CPPFLAGS; do + + acl_save_prefix="$prefix" + prefix="$acl_final_prefix" + acl_save_exec_prefix="$exec_prefix" + exec_prefix="$acl_final_exec_prefix" + eval x=\"$x\" + exec_prefix="$acl_save_exec_prefix" + prefix="$acl_save_prefix" + + if test "X$x" = "X$element"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + CPPFLAGS="${CPPFLAGS}${CPPFLAGS:+ }$element" + fi + done + + + { $as_echo "$as_me:$LINENO: checking for iconv" >&5 +$as_echo_n "checking for iconv... " >&6; } +if test "${am_cv_func_iconv+set}" = set; then + $as_echo_n "(cached) " >&6 +else + + am_cv_func_iconv="no, consider installing GNU libiconv" + am_cv_lib_iconv=no + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include +#include +int +main () +{ +iconv_t cd = iconv_open("",""); + iconv(cd,NULL,NULL,NULL,NULL); + iconv_close(cd); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + $as_test_x conftest$ac_exeext + }; then + am_cv_func_iconv=yes +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + +fi + +rm -rf conftest.dSYM +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext + if test "$am_cv_func_iconv" != yes; then + am_save_LIBS="$LIBS" + LIBS="$LIBS $LIBICONV" + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include +#include +int +main () +{ +iconv_t cd = iconv_open("",""); + iconv(cd,NULL,NULL,NULL,NULL); + iconv_close(cd); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + $as_test_x conftest$ac_exeext + }; then + am_cv_lib_iconv=yes + am_cv_func_iconv=yes +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + +fi + +rm -rf conftest.dSYM +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext + LIBS="$am_save_LIBS" + fi + +fi +{ $as_echo "$as_me:$LINENO: result: $am_cv_func_iconv" >&5 +$as_echo "$am_cv_func_iconv" >&6; } + if test "$am_cv_func_iconv" = yes; then + +cat >>confdefs.h <<\_ACEOF +#define HAVE_ICONV 1 +_ACEOF + + fi + if test "$am_cv_lib_iconv" = yes; then + { $as_echo "$as_me:$LINENO: checking how to link with libiconv" >&5 +$as_echo_n "checking how to link with libiconv... " >&6; } + { $as_echo "$as_me:$LINENO: result: $LIBICONV" >&5 +$as_echo "$LIBICONV" >&6; } + else + CPPFLAGS="$am_save_CPPFLAGS" + LIBICONV= + LTLIBICONV= + fi + + + + + + + + use_additional=yes + + acl_save_prefix="$prefix" + prefix="$acl_final_prefix" + acl_save_exec_prefix="$exec_prefix" + exec_prefix="$acl_final_exec_prefix" + + eval additional_includedir=\"$includedir\" + eval additional_libdir=\"$libdir\" + + exec_prefix="$acl_save_exec_prefix" + prefix="$acl_save_prefix" + + +# Check whether --with-libintl-prefix was given. +if test "${with_libintl_prefix+set}" = set; then + withval=$with_libintl_prefix; + if test "X$withval" = "Xno"; then + use_additional=no + else + if test "X$withval" = "X"; then + + acl_save_prefix="$prefix" + prefix="$acl_final_prefix" + acl_save_exec_prefix="$exec_prefix" + exec_prefix="$acl_final_exec_prefix" + + eval additional_includedir=\"$includedir\" + eval additional_libdir=\"$libdir\" + + exec_prefix="$acl_save_exec_prefix" + prefix="$acl_save_prefix" + + else + additional_includedir="$withval/include" + additional_libdir="$withval/$acl_libdirstem" + fi + fi + +fi + + LIBINTL= + LTLIBINTL= + INCINTL= + rpathdirs= + ltrpathdirs= + names_already_handled= + names_next_round='intl ' + while test -n "$names_next_round"; do + names_this_round="$names_next_round" + names_next_round= + for name in $names_this_round; do + already_handled= + for n in $names_already_handled; do + if test "$n" = "$name"; then + already_handled=yes + break + fi + done + if test -z "$already_handled"; then + names_already_handled="$names_already_handled $name" + uppername=`echo "$name" | sed -e 'y|abcdefghijklmnopqrstuvwxyz./-|ABCDEFGHIJKLMNOPQRSTUVWXYZ___|'` + eval value=\"\$HAVE_LIB$uppername\" + if test -n "$value"; then + if test "$value" = yes; then + eval value=\"\$LIB$uppername\" + test -z "$value" || LIBINTL="${LIBINTL}${LIBINTL:+ }$value" + eval value=\"\$LTLIB$uppername\" + test -z "$value" || LTLIBINTL="${LTLIBINTL}${LTLIBINTL:+ }$value" + else + : + fi + else + found_dir= + found_la= + found_so= + found_a= + if test $use_additional = yes; then + if test -n "$shlibext" && test -f "$additional_libdir/lib$name.$shlibext"; then + found_dir="$additional_libdir" + found_so="$additional_libdir/lib$name.$shlibext" + if test -f "$additional_libdir/lib$name.la"; then + found_la="$additional_libdir/lib$name.la" + fi + else + if test -f "$additional_libdir/lib$name.$libext"; then + found_dir="$additional_libdir" + found_a="$additional_libdir/lib$name.$libext" + if test -f "$additional_libdir/lib$name.la"; then + found_la="$additional_libdir/lib$name.la" + fi + fi + fi + fi + if test "X$found_dir" = "X"; then + for x in $LDFLAGS $LTLIBINTL; do + + acl_save_prefix="$prefix" + prefix="$acl_final_prefix" + acl_save_exec_prefix="$exec_prefix" + exec_prefix="$acl_final_exec_prefix" + eval x=\"$x\" + exec_prefix="$acl_save_exec_prefix" + prefix="$acl_save_prefix" + + case "$x" in + -L*) + dir=`echo "X$x" | sed -e 's/^X-L//'` + if test -n "$shlibext" && test -f "$dir/lib$name.$shlibext"; then + found_dir="$dir" + found_so="$dir/lib$name.$shlibext" + if test -f "$dir/lib$name.la"; then + found_la="$dir/lib$name.la" + fi + else + if test -f "$dir/lib$name.$libext"; then + found_dir="$dir" + found_a="$dir/lib$name.$libext" + if test -f "$dir/lib$name.la"; then + found_la="$dir/lib$name.la" + fi + fi + fi + ;; + esac + if test "X$found_dir" != "X"; then + break + fi + done + fi + if test "X$found_dir" != "X"; then + LTLIBINTL="${LTLIBINTL}${LTLIBINTL:+ }-L$found_dir -l$name" + if test "X$found_so" != "X"; then + if test "$enable_rpath" = no || test "X$found_dir" = "X/usr/$acl_libdirstem"; then + LIBINTL="${LIBINTL}${LIBINTL:+ }$found_so" + else + haveit= + for x in $ltrpathdirs; do + if test "X$x" = "X$found_dir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + ltrpathdirs="$ltrpathdirs $found_dir" + fi + if test "$hardcode_direct" = yes; then + LIBINTL="${LIBINTL}${LIBINTL:+ }$found_so" + else + if test -n "$hardcode_libdir_flag_spec" && test "$hardcode_minus_L" = no; then + LIBINTL="${LIBINTL}${LIBINTL:+ }$found_so" + haveit= + for x in $rpathdirs; do + if test "X$x" = "X$found_dir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + rpathdirs="$rpathdirs $found_dir" + fi + else + haveit= + for x in $LDFLAGS $LIBINTL; do + + acl_save_prefix="$prefix" + prefix="$acl_final_prefix" + acl_save_exec_prefix="$exec_prefix" + exec_prefix="$acl_final_exec_prefix" + eval x=\"$x\" + exec_prefix="$acl_save_exec_prefix" + prefix="$acl_save_prefix" + + if test "X$x" = "X-L$found_dir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + LIBINTL="${LIBINTL}${LIBINTL:+ }-L$found_dir" + fi + if test "$hardcode_minus_L" != no; then + LIBINTL="${LIBINTL}${LIBINTL:+ }$found_so" + else + LIBINTL="${LIBINTL}${LIBINTL:+ }-l$name" + fi + fi + fi + fi + else + if test "X$found_a" != "X"; then + LIBINTL="${LIBINTL}${LIBINTL:+ }$found_a" + else + LIBINTL="${LIBINTL}${LIBINTL:+ }-L$found_dir -l$name" + fi + fi + additional_includedir= + case "$found_dir" in + */$acl_libdirstem | */$acl_libdirstem/) + basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem/"'*$,,'` + additional_includedir="$basedir/include" + ;; + esac + if test "X$additional_includedir" != "X"; then + if test "X$additional_includedir" != "X/usr/include"; then + haveit= + if test "X$additional_includedir" = "X/usr/local/include"; then + if test -n "$GCC"; then + case $host_os in + linux* | gnu* | k*bsd*-gnu) haveit=yes;; + esac + fi + fi + if test -z "$haveit"; then + for x in $CPPFLAGS $INCINTL; do + + acl_save_prefix="$prefix" + prefix="$acl_final_prefix" + acl_save_exec_prefix="$exec_prefix" + exec_prefix="$acl_final_exec_prefix" + eval x=\"$x\" + exec_prefix="$acl_save_exec_prefix" + prefix="$acl_save_prefix" + + if test "X$x" = "X-I$additional_includedir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + if test -d "$additional_includedir"; then + INCINTL="${INCINTL}${INCINTL:+ }-I$additional_includedir" + fi + fi + fi + fi + fi + if test -n "$found_la"; then + save_libdir="$libdir" + case "$found_la" in + */* | *\\*) . "$found_la" ;; + *) . "./$found_la" ;; + esac + libdir="$save_libdir" + for dep in $dependency_libs; do + case "$dep" in + -L*) + additional_libdir=`echo "X$dep" | sed -e 's/^X-L//'` + if test "X$additional_libdir" != "X/usr/$acl_libdirstem"; then + haveit= + if test "X$additional_libdir" = "X/usr/local/$acl_libdirstem"; then + if test -n "$GCC"; then + case $host_os in + linux* | gnu* | k*bsd*-gnu) haveit=yes;; + esac + fi + fi + if test -z "$haveit"; then + haveit= + for x in $LDFLAGS $LIBINTL; do + + acl_save_prefix="$prefix" + prefix="$acl_final_prefix" + acl_save_exec_prefix="$exec_prefix" + exec_prefix="$acl_final_exec_prefix" + eval x=\"$x\" + exec_prefix="$acl_save_exec_prefix" + prefix="$acl_save_prefix" + + if test "X$x" = "X-L$additional_libdir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + if test -d "$additional_libdir"; then + LIBINTL="${LIBINTL}${LIBINTL:+ }-L$additional_libdir" + fi + fi + haveit= + for x in $LDFLAGS $LTLIBINTL; do + + acl_save_prefix="$prefix" + prefix="$acl_final_prefix" + acl_save_exec_prefix="$exec_prefix" + exec_prefix="$acl_final_exec_prefix" + eval x=\"$x\" + exec_prefix="$acl_save_exec_prefix" + prefix="$acl_save_prefix" + + if test "X$x" = "X-L$additional_libdir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + if test -d "$additional_libdir"; then + LTLIBINTL="${LTLIBINTL}${LTLIBINTL:+ }-L$additional_libdir" + fi + fi + fi + fi + ;; + -R*) + dir=`echo "X$dep" | sed -e 's/^X-R//'` + if test "$enable_rpath" != no; then + haveit= + for x in $rpathdirs; do + if test "X$x" = "X$dir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + rpathdirs="$rpathdirs $dir" + fi + haveit= + for x in $ltrpathdirs; do + if test "X$x" = "X$dir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + ltrpathdirs="$ltrpathdirs $dir" + fi + fi + ;; + -l*) + names_next_round="$names_next_round "`echo "X$dep" | sed -e 's/^X-l//'` + ;; + *.la) + names_next_round="$names_next_round "`echo "X$dep" | sed -e 's,^X.*/,,' -e 's,^lib,,' -e 's,\.la$,,'` + ;; + *) + LIBINTL="${LIBINTL}${LIBINTL:+ }$dep" + LTLIBINTL="${LTLIBINTL}${LTLIBINTL:+ }$dep" + ;; + esac + done + fi + else + LIBINTL="${LIBINTL}${LIBINTL:+ }-l$name" + LTLIBINTL="${LTLIBINTL}${LTLIBINTL:+ }-l$name" + fi + fi + fi + done + done + if test "X$rpathdirs" != "X"; then + if test -n "$hardcode_libdir_separator"; then + alldirs= + for found_dir in $rpathdirs; do + alldirs="${alldirs}${alldirs:+$hardcode_libdir_separator}$found_dir" + done + acl_save_libdir="$libdir" + libdir="$alldirs" + eval flag=\"$hardcode_libdir_flag_spec\" + libdir="$acl_save_libdir" + LIBINTL="${LIBINTL}${LIBINTL:+ }$flag" + else + for found_dir in $rpathdirs; do + acl_save_libdir="$libdir" + libdir="$found_dir" + eval flag=\"$hardcode_libdir_flag_spec\" + libdir="$acl_save_libdir" + LIBINTL="${LIBINTL}${LIBINTL:+ }$flag" + done + fi + fi + if test "X$ltrpathdirs" != "X"; then + for found_dir in $ltrpathdirs; do + LTLIBINTL="${LTLIBINTL}${LTLIBINTL:+ }-R$found_dir" + done + fi + + { $as_echo "$as_me:$LINENO: checking for GNU gettext in libintl" >&5 +$as_echo_n "checking for GNU gettext in libintl... " >&6; } +if test "${gt_cv_func_gnugettext1_libintl+set}" = set; then + $as_echo_n "(cached) " >&6 +else + gt_save_CPPFLAGS="$CPPFLAGS" + CPPFLAGS="$CPPFLAGS $INCINTL" + gt_save_LIBS="$LIBS" + LIBS="$LIBS $LIBINTL" + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include +extern int _nl_msg_cat_cntr; +extern +#ifdef __cplusplus +"C" +#endif +const char *_nl_expand_alias (const char *); +int +main () +{ +bindtextdomain ("", ""); +return * gettext ("") + _nl_msg_cat_cntr + *_nl_expand_alias ("") + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + $as_test_x conftest$ac_exeext + }; then + gt_cv_func_gnugettext1_libintl=yes +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + gt_cv_func_gnugettext1_libintl=no +fi + +rm -rf conftest.dSYM +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext + if test "$gt_cv_func_gnugettext1_libintl" != yes && test -n "$LIBICONV"; then + LIBS="$LIBS $LIBICONV" + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include +extern int _nl_msg_cat_cntr; +extern +#ifdef __cplusplus +"C" +#endif +const char *_nl_expand_alias (const char *); +int +main () +{ +bindtextdomain ("", ""); +return * gettext ("") + _nl_msg_cat_cntr + *_nl_expand_alias ("") + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + $as_test_x conftest$ac_exeext + }; then + LIBINTL="$LIBINTL $LIBICONV" + LTLIBINTL="$LTLIBINTL $LTLIBICONV" + gt_cv_func_gnugettext1_libintl=yes + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + +fi + +rm -rf conftest.dSYM +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext + fi + CPPFLAGS="$gt_save_CPPFLAGS" + LIBS="$gt_save_LIBS" +fi +{ $as_echo "$as_me:$LINENO: result: $gt_cv_func_gnugettext1_libintl" >&5 +$as_echo "$gt_cv_func_gnugettext1_libintl" >&6; } + fi + + if test "$gt_cv_func_gnugettext1_libc" = "yes" \ + || { test "$gt_cv_func_gnugettext1_libintl" = "yes" \ + && test "$PACKAGE" != gettext-runtime \ + && test "$PACKAGE" != gettext-tools; }; then + gt_use_preinstalled_gnugettext=yes + else + LIBINTL= + LTLIBINTL= + INCINTL= + fi + + + + if test -n "$INTL_MACOSX_LIBS"; then + if test "$gt_use_preinstalled_gnugettext" = "yes" \ + || test "$nls_cv_use_gnu_gettext" = "yes"; then + LIBINTL="$LIBINTL $INTL_MACOSX_LIBS" + LTLIBINTL="$LTLIBINTL $INTL_MACOSX_LIBS" + fi + fi + + if test "$gt_use_preinstalled_gnugettext" = "yes" \ + || test "$nls_cv_use_gnu_gettext" = "yes"; then + +cat >>confdefs.h <<\_ACEOF +#define ENABLE_NLS 1 +_ACEOF + + else + USE_NLS=no + fi + fi + + { $as_echo "$as_me:$LINENO: checking whether to use NLS" >&5 +$as_echo_n "checking whether to use NLS... " >&6; } + { $as_echo "$as_me:$LINENO: result: $USE_NLS" >&5 +$as_echo "$USE_NLS" >&6; } + if test "$USE_NLS" = "yes"; then + { $as_echo "$as_me:$LINENO: checking where the gettext function comes from" >&5 +$as_echo_n "checking where the gettext function comes from... " >&6; } + if test "$gt_use_preinstalled_gnugettext" = "yes"; then + if test "$gt_cv_func_gnugettext1_libintl" = "yes"; then + gt_source="external libintl" + else + gt_source="libc" + fi + else + gt_source="included intl directory" + fi + { $as_echo "$as_me:$LINENO: result: $gt_source" >&5 +$as_echo "$gt_source" >&6; } + fi + + if test "$USE_NLS" = "yes"; then + + if test "$gt_use_preinstalled_gnugettext" = "yes"; then + if test "$gt_cv_func_gnugettext1_libintl" = "yes"; then + { $as_echo "$as_me:$LINENO: checking how to link with libintl" >&5 +$as_echo_n "checking how to link with libintl... " >&6; } + { $as_echo "$as_me:$LINENO: result: $LIBINTL" >&5 +$as_echo "$LIBINTL" >&6; } + + for element in $INCINTL; do + haveit= + for x in $CPPFLAGS; do + + acl_save_prefix="$prefix" + prefix="$acl_final_prefix" + acl_save_exec_prefix="$exec_prefix" + exec_prefix="$acl_final_exec_prefix" + eval x=\"$x\" + exec_prefix="$acl_save_exec_prefix" + prefix="$acl_save_prefix" + + if test "X$x" = "X$element"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + CPPFLAGS="${CPPFLAGS}${CPPFLAGS:+ }$element" + fi + done + + fi + + +cat >>confdefs.h <<\_ACEOF +#define HAVE_GETTEXT 1 +_ACEOF + + +cat >>confdefs.h <<\_ACEOF +#define HAVE_DCGETTEXT 1 +_ACEOF + + fi + + POSUB=po + fi + + + + INTLLIBS="$LIBINTL" + + + + + + + + +for ac_header in dirent.h +do +as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` +if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then + { $as_echo "$as_me:$LINENO: checking for $ac_header" >&5 +$as_echo_n "checking for $ac_header... " >&6; } +if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then + $as_echo_n "(cached) " >&6 +fi +ac_res=`eval 'as_val=${'$as_ac_Header'} + $as_echo "$as_val"'` + { $as_echo "$as_me:$LINENO: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } +else + # Is the header compilable? +{ $as_echo "$as_me:$LINENO: checking $ac_header usability" >&5 +$as_echo_n "checking $ac_header usability... " >&6; } +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default +#include <$ac_header> +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_header_compiler=yes +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_header_compiler=no +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +{ $as_echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 +$as_echo "$ac_header_compiler" >&6; } + +# Is the header present? +{ $as_echo "$as_me:$LINENO: checking $ac_header presence" >&5 +$as_echo_n "checking $ac_header presence... " >&6; } +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include <$ac_header> +_ACEOF +if { (ac_try="$ac_cpp conftest.$ac_ext" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } >/dev/null && { + test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || + test ! -s conftest.err + }; then + ac_header_preproc=yes +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_header_preproc=no +fi + +rm -f conftest.err conftest.$ac_ext +{ $as_echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 +$as_echo "$ac_header_preproc" >&6; } + +# So? What about this header? +case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in + yes:no: ) + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 +$as_echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 +$as_echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} + ac_header_preproc=yes + ;; + no:yes:* ) + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 +$as_echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 +$as_echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 +$as_echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 +$as_echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 +$as_echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 +$as_echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} + + ;; +esac +{ $as_echo "$as_me:$LINENO: checking for $ac_header" >&5 +$as_echo_n "checking for $ac_header... " >&6; } +if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then + $as_echo_n "(cached) " >&6 +else + eval "$as_ac_Header=\$ac_header_preproc" +fi +ac_res=`eval 'as_val=${'$as_ac_Header'} + $as_echo "$as_val"'` + { $as_echo "$as_me:$LINENO: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } + +fi +as_val=`eval 'as_val=${'$as_ac_Header'} + $as_echo "$as_val"'` + if test "x$as_val" = x""yes; then + cat >>confdefs.h <<_ACEOF +#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 +_ACEOF + +fi + +done + + + + +for ac_func in getusershell strftime +do +as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` +{ $as_echo "$as_me:$LINENO: checking for $ac_func" >&5 +$as_echo_n "checking for $ac_func... " >&6; } +if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then + $as_echo_n "(cached) " >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +/* Define $ac_func to an innocuous variant, in case declares $ac_func. + For example, HP-UX 11i declares gettimeofday. */ +#define $ac_func innocuous_$ac_func + +/* System header to define __stub macros and hopefully few prototypes, + which can conflict with char $ac_func (); below. + Prefer to if __STDC__ is defined, since + exists even on freestanding compilers. */ + +#ifdef __STDC__ +# include +#else +# include +#endif + +#undef $ac_func + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char $ac_func (); +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined __stub_$ac_func || defined __stub___$ac_func +choke me +#endif + +int +main () +{ +return $ac_func (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + $as_test_x conftest$ac_exeext + }; then + eval "$as_ac_var=yes" +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + eval "$as_ac_var=no" +fi + +rm -rf conftest.dSYM +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext +fi +ac_res=`eval 'as_val=${'$as_ac_var'} + $as_echo "$as_val"'` + { $as_echo "$as_me:$LINENO: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } +as_val=`eval 'as_val=${'$as_ac_var'} + $as_echo "$as_val"'` + if test "x$as_val" = x""yes; then + cat >>confdefs.h <<_ACEOF +#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 +_ACEOF + +fi +done + + + +cat >>confdefs.h <<\_ACEOF +#define UNIX /**/ +_ACEOF + + + +for ac_header in bioapi.h bioapi_util.h +do +as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` +if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then + { $as_echo "$as_me:$LINENO: checking for $ac_header" >&5 +$as_echo_n "checking for $ac_header... " >&6; } +if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then + $as_echo_n "(cached) " >&6 +fi +ac_res=`eval 'as_val=${'$as_ac_Header'} + $as_echo "$as_val"'` + { $as_echo "$as_me:$LINENO: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } +else + # Is the header compilable? +{ $as_echo "$as_me:$LINENO: checking $ac_header usability" >&5 +$as_echo_n "checking $ac_header usability... " >&6; } +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default +#include <$ac_header> +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_header_compiler=yes +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_header_compiler=no +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +{ $as_echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 +$as_echo "$ac_header_compiler" >&6; } + +# Is the header present? +{ $as_echo "$as_me:$LINENO: checking $ac_header presence" >&5 +$as_echo_n "checking $ac_header presence... " >&6; } +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include <$ac_header> +_ACEOF +if { (ac_try="$ac_cpp conftest.$ac_ext" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } >/dev/null && { + test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || + test ! -s conftest.err + }; then + ac_header_preproc=yes +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_header_preproc=no +fi + +rm -f conftest.err conftest.$ac_ext +{ $as_echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 +$as_echo "$ac_header_preproc" >&6; } + +# So? What about this header? +case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in + yes:no: ) + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 +$as_echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 +$as_echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} + ac_header_preproc=yes + ;; + no:yes:* ) + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 +$as_echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 +$as_echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 +$as_echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 +$as_echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 +$as_echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 +$as_echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} + + ;; +esac +{ $as_echo "$as_me:$LINENO: checking for $ac_header" >&5 +$as_echo_n "checking for $ac_header... " >&6; } +if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then + $as_echo_n "(cached) " >&6 +else + eval "$as_ac_Header=\$ac_header_preproc" +fi +ac_res=`eval 'as_val=${'$as_ac_Header'} + $as_echo "$as_val"'` + { $as_echo "$as_me:$LINENO: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } + +fi +as_val=`eval 'as_val=${'$as_ac_Header'} + $as_echo "$as_val"'` + if test "x$as_val" = x""yes; then + cat >>confdefs.h <<_ACEOF +#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 +_ACEOF + +fi + +done + +{ $as_echo "$as_me:$LINENO: checking for BioAPI_Init in -lbioapi100" >&5 +$as_echo_n "checking for BioAPI_Init in -lbioapi100... " >&6; } +if test "${ac_cv_lib_bioapi100_BioAPI_Init+set}" = set; then + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lbioapi100 $LIBS" +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char BioAPI_Init (); +int +main () +{ +return BioAPI_Init (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + $as_test_x conftest$ac_exeext + }; then + ac_cv_lib_bioapi100_BioAPI_Init=yes +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_cv_lib_bioapi100_BioAPI_Init=no +fi + +rm -rf conftest.dSYM +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:$LINENO: result: $ac_cv_lib_bioapi100_BioAPI_Init" >&5 +$as_echo "$ac_cv_lib_bioapi100_BioAPI_Init" >&6; } +if test "x$ac_cv_lib_bioapi100_BioAPI_Init" = x""yes; then + BIOAPI_LIB="-lbioapi100" +else + BIOAPI_LIB="" +fi + + + +ac_config_files="$ac_config_files Makefile etc/Makefile lib/Makefile src/Makefile plugins/Makefile po/Makefile.in m4/Makefile" + +cat >confcache <<\_ACEOF +# This file is a shell script that caches the results of configure +# tests run on this system so they can be shared between configure +# scripts and configure runs, see configure's option --config-cache. +# It is not useful on other systems. If it contains results you don't +# want to keep, you may remove or edit it. +# +# config.status only pays attention to the cache file if you give it +# the --recheck option to rerun configure. +# +# `ac_cv_env_foo' variables (set or unset) will be overridden when +# loading this file, other *unset* `ac_cv_foo' will be assigned the +# following values. + +_ACEOF + +# The following way of writing the cache mishandles newlines in values, +# but we know of no workaround that is simple, portable, and efficient. +# So, we kill variables containing newlines. +# Ultrix sh set writes to stderr and can't be redirected directly, +# and sets the high bit in the cache file unless we assign to the vars. +( + for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do + eval ac_val=\$$ac_var + case $ac_val in #( + *${as_nl}*) + case $ac_var in #( + *_cv_*) { $as_echo "$as_me:$LINENO: WARNING: cache variable $ac_var contains a newline" >&5 +$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; + esac + case $ac_var in #( + _ | IFS | as_nl) ;; #( + BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( + *) $as_unset $ac_var ;; + esac ;; + esac + done + + (set) 2>&1 | + case $as_nl`(ac_space=' '; set) 2>&1` in #( + *${as_nl}ac_space=\ *) + # `set' does not quote correctly, so add quotes (double-quote + # substitution turns \\\\ into \\, and sed turns \\ into \). + sed -n \ + "s/'/'\\\\''/g; + s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" + ;; #( + *) + # `set' quotes correctly as required by POSIX, so do not add quotes. + sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" + ;; + esac | + sort +) | + sed ' + /^ac_cv_env_/b end + t clear + :clear + s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ + t end + s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ + :end' >>confcache +if diff "$cache_file" confcache >/dev/null 2>&1; then :; else + if test -w "$cache_file"; then + test "x$cache_file" != "x/dev/null" && + { $as_echo "$as_me:$LINENO: updating cache $cache_file" >&5 +$as_echo "$as_me: updating cache $cache_file" >&6;} + cat confcache >$cache_file + else + { $as_echo "$as_me:$LINENO: not updating unwritable cache $cache_file" >&5 +$as_echo "$as_me: not updating unwritable cache $cache_file" >&6;} + fi +fi +rm -f confcache + +test "x$prefix" = xNONE && prefix=$ac_default_prefix +# Let make expand exec_prefix. +test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' + +DEFS=-DHAVE_CONFIG_H + +ac_libobjs= +ac_ltlibobjs= +for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue + # 1. Remove the extension, and $U if already installed. + ac_script='s/\$U\././;s/\.o$//;s/\.obj$//' + ac_i=`$as_echo "$ac_i" | sed "$ac_script"` + # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR + # will be set to the directory where LIBOBJS objects are built. + ac_libobjs="$ac_libobjs \${LIBOBJDIR}$ac_i\$U.$ac_objext" + ac_ltlibobjs="$ac_ltlibobjs \${LIBOBJDIR}$ac_i"'$U.lo' +done +LIBOBJS=$ac_libobjs + +LTLIBOBJS=$ac_ltlibobjs + + +if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then + { { $as_echo "$as_me:$LINENO: error: conditional \"AMDEP\" was never defined. +Usually this means the macro was only invoked conditionally." >&5 +$as_echo "$as_me: error: conditional \"AMDEP\" was never defined. +Usually this means the macro was only invoked conditionally." >&2;} + { (exit 1); exit 1; }; } +fi +if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then + { { $as_echo "$as_me:$LINENO: error: conditional \"am__fastdepCC\" was never defined. +Usually this means the macro was only invoked conditionally." >&5 +$as_echo "$as_me: error: conditional \"am__fastdepCC\" was never defined. +Usually this means the macro was only invoked conditionally." >&2;} + { (exit 1); exit 1; }; } +fi +if test -z "${build_PAM_RPASSWD_TRUE}" && test -z "${build_PAM_RPASSWD_FALSE}"; then + { { $as_echo "$as_me:$LINENO: error: conditional \"build_PAM_RPASSWD\" was never defined. +Usually this means the macro was only invoked conditionally." >&5 +$as_echo "$as_me: error: conditional \"build_PAM_RPASSWD\" was never defined. +Usually this means the macro was only invoked conditionally." >&2;} + { (exit 1); exit 1; }; } +fi +if test -z "${build_LAUS_PLUGIN_TRUE}" && test -z "${build_LAUS_PLUGIN_FALSE}"; then + { { $as_echo "$as_me:$LINENO: error: conditional \"build_LAUS_PLUGIN\" was never defined. +Usually this means the macro was only invoked conditionally." >&5 +$as_echo "$as_me: error: conditional \"build_LAUS_PLUGIN\" was never defined. +Usually this means the macro was only invoked conditionally." >&2;} + { (exit 1); exit 1; }; } +fi +if test -z "${build_AUDIT_PLUGIN_TRUE}" && test -z "${build_AUDIT_PLUGIN_FALSE}"; then + { { $as_echo "$as_me:$LINENO: error: conditional \"build_AUDIT_PLUGIN\" was never defined. +Usually this means the macro was only invoked conditionally." >&5 +$as_echo "$as_me: error: conditional \"build_AUDIT_PLUGIN\" was never defined. +Usually this means the macro was only invoked conditionally." >&2;} + { (exit 1); exit 1; }; } +fi + +: ${CONFIG_STATUS=./config.status} +ac_write_fail=0 +ac_clean_files_save=$ac_clean_files +ac_clean_files="$ac_clean_files $CONFIG_STATUS" +{ $as_echo "$as_me:$LINENO: creating $CONFIG_STATUS" >&5 +$as_echo "$as_me: creating $CONFIG_STATUS" >&6;} +cat >$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +#! $SHELL +# Generated by $as_me. +# Run this file to recreate the current configuration. +# Compiler output produced by configure, useful for debugging +# configure, is in config.log if it exists. + +debug=false +ac_cs_recheck=false +ac_cs_silent=false +SHELL=\${CONFIG_SHELL-$SHELL} +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +## --------------------- ## +## M4sh Initialization. ## +## --------------------- ## + +# Be more Bourne compatible +DUALCASE=1; export DUALCASE # for MKS sh +if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then + emulate sh + NULLCMD=: + # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which + # is contrary to our usage. Disable this feature. + alias -g '${1+"$@"}'='"$@"' + setopt NO_GLOB_SUBST +else + case `(set -o) 2>/dev/null` in + *posix*) set -o posix ;; +esac + +fi + + + + +# PATH needs CR +# Avoid depending upon Character Ranges. +as_cr_letters='abcdefghijklmnopqrstuvwxyz' +as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' +as_cr_Letters=$as_cr_letters$as_cr_LETTERS +as_cr_digits='0123456789' +as_cr_alnum=$as_cr_Letters$as_cr_digits + +as_nl=' +' +export as_nl +# Printing a long string crashes Solaris 7 /usr/bin/printf. +as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo +if (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='printf %s\n' + as_echo_n='printf %s' +else + if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then + as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' + as_echo_n='/usr/ucb/echo -n' + else + as_echo_body='eval expr "X$1" : "X\\(.*\\)"' + as_echo_n_body='eval + arg=$1; + case $arg in + *"$as_nl"*) + expr "X$arg" : "X\\(.*\\)$as_nl"; + arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; + esac; + expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" + ' + export as_echo_n_body + as_echo_n='sh -c $as_echo_n_body as_echo' + fi + export as_echo_body + as_echo='sh -c $as_echo_body as_echo' +fi + +# The user is always right. +if test "${PATH_SEPARATOR+set}" != set; then + PATH_SEPARATOR=: + (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { + (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || + PATH_SEPARATOR=';' + } +fi + +# Support unset when possible. +if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then + as_unset=unset +else + as_unset=false +fi + + +# IFS +# We need space, tab and new line, in precisely that order. Quoting is +# there to prevent editors from complaining about space-tab. +# (If _AS_PATH_WALK were called with IFS unset, it would disable word +# splitting by setting IFS to empty value.) +IFS=" "" $as_nl" + +# Find who we are. Look in the path if we contain no directory separator. +case $0 in + *[\\/]* ) as_myself=$0 ;; + *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break +done +IFS=$as_save_IFS + + ;; +esac +# We did not find ourselves, most probably we were run as `sh COMMAND' +# in which case we are not to be found in the path. +if test "x$as_myself" = x; then + as_myself=$0 +fi +if test ! -f "$as_myself"; then + $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 + { (exit 1); exit 1; } +fi + +# Work around bugs in pre-3.0 UWIN ksh. +for as_var in ENV MAIL MAILPATH +do ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var +done +PS1='$ ' +PS2='> ' +PS4='+ ' + +# NLS nuisances. +LC_ALL=C +export LC_ALL +LANGUAGE=C +export LANGUAGE + +# Required to use basename. +if expr a : '\(a\)' >/dev/null 2>&1 && + test "X`expr 00001 : '.*\(...\)'`" = X001; then + as_expr=expr +else + as_expr=false +fi + +if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then + as_basename=basename +else + as_basename=false +fi + + +# Name of the executable. +as_me=`$as_basename -- "$0" || +$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ + X"$0" : 'X\(//\)$' \| \ + X"$0" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X/"$0" | + sed '/^.*\/\([^/][^/]*\)\/*$/{ + s//\1/ + q + } + /^X\/\(\/\/\)$/{ + s//\1/ + q + } + /^X\/\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + +# CDPATH. +$as_unset CDPATH + + + + as_lineno_1=$LINENO + as_lineno_2=$LINENO + test "x$as_lineno_1" != "x$as_lineno_2" && + test "x`expr $as_lineno_1 + 1`" = "x$as_lineno_2" || { + + # Create $as_me.lineno as a copy of $as_myself, but with $LINENO + # uniformly replaced by the line number. The first 'sed' inserts a + # line-number line after each line using $LINENO; the second 'sed' + # does the real work. The second script uses 'N' to pair each + # line-number line with the line containing $LINENO, and appends + # trailing '-' during substitution so that $LINENO is not a special + # case at line end. + # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the + # scripts with optimization help from Paolo Bonzini. Blame Lee + # E. McMahon (1931-1989) for sed's syntax. :-) + sed -n ' + p + /[$]LINENO/= + ' <$as_myself | + sed ' + s/[$]LINENO.*/&-/ + t lineno + b + :lineno + N + :loop + s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ + t loop + s/-\n.*// + ' >$as_me.lineno && + chmod +x "$as_me.lineno" || + { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2 + { (exit 1); exit 1; }; } + + # Don't try to exec as it changes $[0], causing all sort of problems + # (the dirname of $[0] is not the place where we might find the + # original and so on. Autoconf is especially sensitive to this). + . "./$as_me.lineno" + # Exit status is that of the last command. + exit +} + + +if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then + as_dirname=dirname +else + as_dirname=false +fi + +ECHO_C= ECHO_N= ECHO_T= +case `echo -n x` in +-n*) + case `echo 'x\c'` in + *c*) ECHO_T=' ';; # ECHO_T is single tab character. + *) ECHO_C='\c';; + esac;; +*) + ECHO_N='-n';; +esac +if expr a : '\(a\)' >/dev/null 2>&1 && + test "X`expr 00001 : '.*\(...\)'`" = X001; then + as_expr=expr +else + as_expr=false +fi + +rm -f conf$$ conf$$.exe conf$$.file +if test -d conf$$.dir; then + rm -f conf$$.dir/conf$$.file +else + rm -f conf$$.dir + mkdir conf$$.dir 2>/dev/null +fi +if (echo >conf$$.file) 2>/dev/null; then + if ln -s conf$$.file conf$$ 2>/dev/null; then + as_ln_s='ln -s' + # ... but there are two gotchas: + # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. + # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. + # In both cases, we have to default to `cp -p'. + ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || + as_ln_s='cp -p' + elif ln conf$$.file conf$$ 2>/dev/null; then + as_ln_s=ln + else + as_ln_s='cp -p' + fi +else + as_ln_s='cp -p' +fi +rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file +rmdir conf$$.dir 2>/dev/null + +if mkdir -p . 2>/dev/null; then + as_mkdir_p=: +else + test -d ./-p && rmdir ./-p + as_mkdir_p=false +fi + +if test -x / >/dev/null 2>&1; then + as_test_x='test -x' +else + if ls -dL / >/dev/null 2>&1; then + as_ls_L_option=L + else + as_ls_L_option= + fi + as_test_x=' + eval sh -c '\'' + if test -d "$1"; then + test -d "$1/."; + else + case $1 in + -*)set "./$1";; + esac; + case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in + ???[sx]*):;;*)false;;esac;fi + '\'' sh + ' +fi +as_executable_p=$as_test_x + +# Sed expression to map a string onto a valid CPP name. +as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" + +# Sed expression to map a string onto a valid variable name. +as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" + + +exec 6>&1 + +# Save the log message, to keep $[0] and so on meaningful, and to +# report actual input values of CONFIG_FILES etc. instead of their +# values after options handling. +ac_log=" +This file was extended by $as_me, which was +generated by GNU Autoconf 2.63. Invocation command line was + + CONFIG_FILES = $CONFIG_FILES + CONFIG_HEADERS = $CONFIG_HEADERS + CONFIG_LINKS = $CONFIG_LINKS + CONFIG_COMMANDS = $CONFIG_COMMANDS + $ $0 $@ + +on `(hostname || uname -n) 2>/dev/null | sed 1q` +" + +_ACEOF + +case $ac_config_files in *" +"*) set x $ac_config_files; shift; ac_config_files=$*;; +esac + +case $ac_config_headers in *" +"*) set x $ac_config_headers; shift; ac_config_headers=$*;; +esac + + +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +# Files that config.status was made for. +config_files="$ac_config_files" +config_headers="$ac_config_headers" +config_commands="$ac_config_commands" + +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +ac_cs_usage="\ +\`$as_me' instantiates files from templates according to the +current configuration. + +Usage: $0 [OPTION]... [FILE]... + + -h, --help print this help, then exit + -V, --version print version number and configuration settings, then exit + -q, --quiet, --silent + do not print progress messages + -d, --debug don't remove temporary files + --recheck update $as_me by reconfiguring in the same conditions + --file=FILE[:TEMPLATE] + instantiate the configuration file FILE + --header=FILE[:TEMPLATE] + instantiate the configuration header FILE + +Configuration files: +$config_files + +Configuration headers: +$config_headers + +Configuration commands: +$config_commands + +Report bugs to ." + +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +ac_cs_version="\\ +config.status +configured by $0, generated by GNU Autoconf 2.63, + with options \\"`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`\\" + +Copyright (C) 2008 Free Software Foundation, Inc. +This config.status script is free software; the Free Software Foundation +gives unlimited permission to copy, distribute and modify it." + +ac_pwd='$ac_pwd' +srcdir='$srcdir' +INSTALL='$INSTALL' +MKDIR_P='$MKDIR_P' +AWK='$AWK' +test -n "\$AWK" || AWK=awk +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +# The default lists apply if the user does not specify any file. +ac_need_defaults=: +while test $# != 0 +do + case $1 in + --*=*) + ac_option=`expr "X$1" : 'X\([^=]*\)='` + ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'` + ac_shift=: + ;; + *) + ac_option=$1 + ac_optarg=$2 + ac_shift=shift + ;; + esac + + case $ac_option in + # Handling of the options. + -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) + ac_cs_recheck=: ;; + --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) + $as_echo "$ac_cs_version"; exit ;; + --debug | --debu | --deb | --de | --d | -d ) + debug=: ;; + --file | --fil | --fi | --f ) + $ac_shift + case $ac_optarg in + *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; + esac + CONFIG_FILES="$CONFIG_FILES '$ac_optarg'" + ac_need_defaults=false;; + --header | --heade | --head | --hea ) + $ac_shift + case $ac_optarg in + *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; + esac + CONFIG_HEADERS="$CONFIG_HEADERS '$ac_optarg'" + ac_need_defaults=false;; + --he | --h) + # Conflict between --help and --header + { $as_echo "$as_me: error: ambiguous option: $1 +Try \`$0 --help' for more information." >&2 + { (exit 1); exit 1; }; };; + --help | --hel | -h ) + $as_echo "$ac_cs_usage"; exit ;; + -q | -quiet | --quiet | --quie | --qui | --qu | --q \ + | -silent | --silent | --silen | --sile | --sil | --si | --s) + ac_cs_silent=: ;; + + # This is an error. + -*) { $as_echo "$as_me: error: unrecognized option: $1 +Try \`$0 --help' for more information." >&2 + { (exit 1); exit 1; }; } ;; + + *) ac_config_targets="$ac_config_targets $1" + ac_need_defaults=false ;; + + esac + shift +done + +ac_configure_extra_args= + +if $ac_cs_silent; then + exec 6>/dev/null + ac_configure_extra_args="$ac_configure_extra_args --silent" +fi + +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +if \$ac_cs_recheck; then + set X '$SHELL' '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion + shift + \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6 + CONFIG_SHELL='$SHELL' + export CONFIG_SHELL + exec "\$@" +fi + +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +exec 5>>config.log +{ + echo + sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX +## Running $as_me. ## +_ASBOX + $as_echo "$ac_log" +} >&5 + +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +# +# INIT-COMMANDS +# +AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir" + + +# The HP-UX ksh and POSIX shell print the target directory to stdout +# if CDPATH is set. +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH + +sed_quote_subst='$sed_quote_subst' +double_quote_subst='$double_quote_subst' +delay_variable_subst='$delay_variable_subst' +macro_version='`$ECHO "X$macro_version" | $Xsed -e "$delay_single_quote_subst"`' +macro_revision='`$ECHO "X$macro_revision" | $Xsed -e "$delay_single_quote_subst"`' +enable_shared='`$ECHO "X$enable_shared" | $Xsed -e "$delay_single_quote_subst"`' +enable_static='`$ECHO "X$enable_static" | $Xsed -e "$delay_single_quote_subst"`' +pic_mode='`$ECHO "X$pic_mode" | $Xsed -e "$delay_single_quote_subst"`' +enable_fast_install='`$ECHO "X$enable_fast_install" | $Xsed -e "$delay_single_quote_subst"`' +host_alias='`$ECHO "X$host_alias" | $Xsed -e "$delay_single_quote_subst"`' +host='`$ECHO "X$host" | $Xsed -e "$delay_single_quote_subst"`' +host_os='`$ECHO "X$host_os" | $Xsed -e "$delay_single_quote_subst"`' +build_alias='`$ECHO "X$build_alias" | $Xsed -e "$delay_single_quote_subst"`' +build='`$ECHO "X$build" | $Xsed -e "$delay_single_quote_subst"`' +build_os='`$ECHO "X$build_os" | $Xsed -e "$delay_single_quote_subst"`' +SED='`$ECHO "X$SED" | $Xsed -e "$delay_single_quote_subst"`' +Xsed='`$ECHO "X$Xsed" | $Xsed -e "$delay_single_quote_subst"`' +GREP='`$ECHO "X$GREP" | $Xsed -e "$delay_single_quote_subst"`' +EGREP='`$ECHO "X$EGREP" | $Xsed -e "$delay_single_quote_subst"`' +FGREP='`$ECHO "X$FGREP" | $Xsed -e "$delay_single_quote_subst"`' +LD='`$ECHO "X$LD" | $Xsed -e "$delay_single_quote_subst"`' +NM='`$ECHO "X$NM" | $Xsed -e "$delay_single_quote_subst"`' +LN_S='`$ECHO "X$LN_S" | $Xsed -e "$delay_single_quote_subst"`' +max_cmd_len='`$ECHO "X$max_cmd_len" | $Xsed -e "$delay_single_quote_subst"`' +ac_objext='`$ECHO "X$ac_objext" | $Xsed -e "$delay_single_quote_subst"`' +exeext='`$ECHO "X$exeext" | $Xsed -e "$delay_single_quote_subst"`' +lt_unset='`$ECHO "X$lt_unset" | $Xsed -e "$delay_single_quote_subst"`' +lt_SP2NL='`$ECHO "X$lt_SP2NL" | $Xsed -e "$delay_single_quote_subst"`' +lt_NL2SP='`$ECHO "X$lt_NL2SP" | $Xsed -e "$delay_single_quote_subst"`' +reload_flag='`$ECHO "X$reload_flag" | $Xsed -e "$delay_single_quote_subst"`' +reload_cmds='`$ECHO "X$reload_cmds" | $Xsed -e "$delay_single_quote_subst"`' +OBJDUMP='`$ECHO "X$OBJDUMP" | $Xsed -e "$delay_single_quote_subst"`' +deplibs_check_method='`$ECHO "X$deplibs_check_method" | $Xsed -e "$delay_single_quote_subst"`' +file_magic_cmd='`$ECHO "X$file_magic_cmd" | $Xsed -e "$delay_single_quote_subst"`' +AR='`$ECHO "X$AR" | $Xsed -e "$delay_single_quote_subst"`' +AR_FLAGS='`$ECHO "X$AR_FLAGS" | $Xsed -e "$delay_single_quote_subst"`' +STRIP='`$ECHO "X$STRIP" | $Xsed -e "$delay_single_quote_subst"`' +RANLIB='`$ECHO "X$RANLIB" | $Xsed -e "$delay_single_quote_subst"`' +old_postinstall_cmds='`$ECHO "X$old_postinstall_cmds" | $Xsed -e "$delay_single_quote_subst"`' +old_postuninstall_cmds='`$ECHO "X$old_postuninstall_cmds" | $Xsed -e "$delay_single_quote_subst"`' +old_archive_cmds='`$ECHO "X$old_archive_cmds" | $Xsed -e "$delay_single_quote_subst"`' +CC='`$ECHO "X$CC" | $Xsed -e "$delay_single_quote_subst"`' +CFLAGS='`$ECHO "X$CFLAGS" | $Xsed -e "$delay_single_quote_subst"`' +compiler='`$ECHO "X$compiler" | $Xsed -e "$delay_single_quote_subst"`' +GCC='`$ECHO "X$GCC" | $Xsed -e "$delay_single_quote_subst"`' +lt_cv_sys_global_symbol_pipe='`$ECHO "X$lt_cv_sys_global_symbol_pipe" | $Xsed -e "$delay_single_quote_subst"`' +lt_cv_sys_global_symbol_to_cdecl='`$ECHO "X$lt_cv_sys_global_symbol_to_cdecl" | $Xsed -e "$delay_single_quote_subst"`' +lt_cv_sys_global_symbol_to_c_name_address='`$ECHO "X$lt_cv_sys_global_symbol_to_c_name_address" | $Xsed -e "$delay_single_quote_subst"`' +lt_cv_sys_global_symbol_to_c_name_address_lib_prefix='`$ECHO "X$lt_cv_sys_global_symbol_to_c_name_address_lib_prefix" | $Xsed -e "$delay_single_quote_subst"`' +objdir='`$ECHO "X$objdir" | $Xsed -e "$delay_single_quote_subst"`' +SHELL='`$ECHO "X$SHELL" | $Xsed -e "$delay_single_quote_subst"`' +ECHO='`$ECHO "X$ECHO" | $Xsed -e "$delay_single_quote_subst"`' +MAGIC_CMD='`$ECHO "X$MAGIC_CMD" | $Xsed -e "$delay_single_quote_subst"`' +lt_prog_compiler_no_builtin_flag='`$ECHO "X$lt_prog_compiler_no_builtin_flag" | $Xsed -e "$delay_single_quote_subst"`' +lt_prog_compiler_wl='`$ECHO "X$lt_prog_compiler_wl" | $Xsed -e "$delay_single_quote_subst"`' +lt_prog_compiler_pic='`$ECHO "X$lt_prog_compiler_pic" | $Xsed -e "$delay_single_quote_subst"`' +lt_prog_compiler_static='`$ECHO "X$lt_prog_compiler_static" | $Xsed -e "$delay_single_quote_subst"`' +lt_cv_prog_compiler_c_o='`$ECHO "X$lt_cv_prog_compiler_c_o" | $Xsed -e "$delay_single_quote_subst"`' +need_locks='`$ECHO "X$need_locks" | $Xsed -e "$delay_single_quote_subst"`' +DSYMUTIL='`$ECHO "X$DSYMUTIL" | $Xsed -e "$delay_single_quote_subst"`' +NMEDIT='`$ECHO "X$NMEDIT" | $Xsed -e "$delay_single_quote_subst"`' +LIPO='`$ECHO "X$LIPO" | $Xsed -e "$delay_single_quote_subst"`' +OTOOL='`$ECHO "X$OTOOL" | $Xsed -e "$delay_single_quote_subst"`' +OTOOL64='`$ECHO "X$OTOOL64" | $Xsed -e "$delay_single_quote_subst"`' +libext='`$ECHO "X$libext" | $Xsed -e "$delay_single_quote_subst"`' +shrext_cmds='`$ECHO "X$shrext_cmds" | $Xsed -e "$delay_single_quote_subst"`' +extract_expsyms_cmds='`$ECHO "X$extract_expsyms_cmds" | $Xsed -e "$delay_single_quote_subst"`' +archive_cmds_need_lc='`$ECHO "X$archive_cmds_need_lc" | $Xsed -e "$delay_single_quote_subst"`' +enable_shared_with_static_runtimes='`$ECHO "X$enable_shared_with_static_runtimes" | $Xsed -e "$delay_single_quote_subst"`' +export_dynamic_flag_spec='`$ECHO "X$export_dynamic_flag_spec" | $Xsed -e "$delay_single_quote_subst"`' +whole_archive_flag_spec='`$ECHO "X$whole_archive_flag_spec" | $Xsed -e "$delay_single_quote_subst"`' +compiler_needs_object='`$ECHO "X$compiler_needs_object" | $Xsed -e "$delay_single_quote_subst"`' +old_archive_from_new_cmds='`$ECHO "X$old_archive_from_new_cmds" | $Xsed -e "$delay_single_quote_subst"`' +old_archive_from_expsyms_cmds='`$ECHO "X$old_archive_from_expsyms_cmds" | $Xsed -e "$delay_single_quote_subst"`' +archive_cmds='`$ECHO "X$archive_cmds" | $Xsed -e "$delay_single_quote_subst"`' +archive_expsym_cmds='`$ECHO "X$archive_expsym_cmds" | $Xsed -e "$delay_single_quote_subst"`' +module_cmds='`$ECHO "X$module_cmds" | $Xsed -e "$delay_single_quote_subst"`' +module_expsym_cmds='`$ECHO "X$module_expsym_cmds" | $Xsed -e "$delay_single_quote_subst"`' +with_gnu_ld='`$ECHO "X$with_gnu_ld" | $Xsed -e "$delay_single_quote_subst"`' +allow_undefined_flag='`$ECHO "X$allow_undefined_flag" | $Xsed -e "$delay_single_quote_subst"`' +no_undefined_flag='`$ECHO "X$no_undefined_flag" | $Xsed -e "$delay_single_quote_subst"`' +hardcode_libdir_flag_spec='`$ECHO "X$hardcode_libdir_flag_spec" | $Xsed -e "$delay_single_quote_subst"`' +hardcode_libdir_flag_spec_ld='`$ECHO "X$hardcode_libdir_flag_spec_ld" | $Xsed -e "$delay_single_quote_subst"`' +hardcode_libdir_separator='`$ECHO "X$hardcode_libdir_separator" | $Xsed -e "$delay_single_quote_subst"`' +hardcode_direct='`$ECHO "X$hardcode_direct" | $Xsed -e "$delay_single_quote_subst"`' +hardcode_direct_absolute='`$ECHO "X$hardcode_direct_absolute" | $Xsed -e "$delay_single_quote_subst"`' +hardcode_minus_L='`$ECHO "X$hardcode_minus_L" | $Xsed -e "$delay_single_quote_subst"`' +hardcode_shlibpath_var='`$ECHO "X$hardcode_shlibpath_var" | $Xsed -e "$delay_single_quote_subst"`' +hardcode_automatic='`$ECHO "X$hardcode_automatic" | $Xsed -e "$delay_single_quote_subst"`' +inherit_rpath='`$ECHO "X$inherit_rpath" | $Xsed -e "$delay_single_quote_subst"`' +link_all_deplibs='`$ECHO "X$link_all_deplibs" | $Xsed -e "$delay_single_quote_subst"`' +fix_srcfile_path='`$ECHO "X$fix_srcfile_path" | $Xsed -e "$delay_single_quote_subst"`' +always_export_symbols='`$ECHO "X$always_export_symbols" | $Xsed -e "$delay_single_quote_subst"`' +export_symbols_cmds='`$ECHO "X$export_symbols_cmds" | $Xsed -e "$delay_single_quote_subst"`' +exclude_expsyms='`$ECHO "X$exclude_expsyms" | $Xsed -e "$delay_single_quote_subst"`' +include_expsyms='`$ECHO "X$include_expsyms" | $Xsed -e "$delay_single_quote_subst"`' +prelink_cmds='`$ECHO "X$prelink_cmds" | $Xsed -e "$delay_single_quote_subst"`' +file_list_spec='`$ECHO "X$file_list_spec" | $Xsed -e "$delay_single_quote_subst"`' +variables_saved_for_relink='`$ECHO "X$variables_saved_for_relink" | $Xsed -e "$delay_single_quote_subst"`' +need_lib_prefix='`$ECHO "X$need_lib_prefix" | $Xsed -e "$delay_single_quote_subst"`' +need_version='`$ECHO "X$need_version" | $Xsed -e "$delay_single_quote_subst"`' +version_type='`$ECHO "X$version_type" | $Xsed -e "$delay_single_quote_subst"`' +runpath_var='`$ECHO "X$runpath_var" | $Xsed -e "$delay_single_quote_subst"`' +shlibpath_var='`$ECHO "X$shlibpath_var" | $Xsed -e "$delay_single_quote_subst"`' +shlibpath_overrides_runpath='`$ECHO "X$shlibpath_overrides_runpath" | $Xsed -e "$delay_single_quote_subst"`' +libname_spec='`$ECHO "X$libname_spec" | $Xsed -e "$delay_single_quote_subst"`' +library_names_spec='`$ECHO "X$library_names_spec" | $Xsed -e "$delay_single_quote_subst"`' +soname_spec='`$ECHO "X$soname_spec" | $Xsed -e "$delay_single_quote_subst"`' +postinstall_cmds='`$ECHO "X$postinstall_cmds" | $Xsed -e "$delay_single_quote_subst"`' +postuninstall_cmds='`$ECHO "X$postuninstall_cmds" | $Xsed -e "$delay_single_quote_subst"`' +finish_cmds='`$ECHO "X$finish_cmds" | $Xsed -e "$delay_single_quote_subst"`' +finish_eval='`$ECHO "X$finish_eval" | $Xsed -e "$delay_single_quote_subst"`' +hardcode_into_libs='`$ECHO "X$hardcode_into_libs" | $Xsed -e "$delay_single_quote_subst"`' +sys_lib_search_path_spec='`$ECHO "X$sys_lib_search_path_spec" | $Xsed -e "$delay_single_quote_subst"`' +sys_lib_dlsearch_path_spec='`$ECHO "X$sys_lib_dlsearch_path_spec" | $Xsed -e "$delay_single_quote_subst"`' +hardcode_action='`$ECHO "X$hardcode_action" | $Xsed -e "$delay_single_quote_subst"`' +enable_dlopen='`$ECHO "X$enable_dlopen" | $Xsed -e "$delay_single_quote_subst"`' +enable_dlopen_self='`$ECHO "X$enable_dlopen_self" | $Xsed -e "$delay_single_quote_subst"`' +enable_dlopen_self_static='`$ECHO "X$enable_dlopen_self_static" | $Xsed -e "$delay_single_quote_subst"`' +old_striplib='`$ECHO "X$old_striplib" | $Xsed -e "$delay_single_quote_subst"`' +striplib='`$ECHO "X$striplib" | $Xsed -e "$delay_single_quote_subst"`' + +LTCC='$LTCC' +LTCFLAGS='$LTCFLAGS' +compiler='$compiler_DEFAULT' + +# Quote evaled strings. +for var in SED \ +GREP \ +EGREP \ +FGREP \ +LD \ +NM \ +LN_S \ +lt_SP2NL \ +lt_NL2SP \ +reload_flag \ +OBJDUMP \ +deplibs_check_method \ +file_magic_cmd \ +AR \ +AR_FLAGS \ +STRIP \ +RANLIB \ +CC \ +CFLAGS \ +compiler \ +lt_cv_sys_global_symbol_pipe \ +lt_cv_sys_global_symbol_to_cdecl \ +lt_cv_sys_global_symbol_to_c_name_address \ +lt_cv_sys_global_symbol_to_c_name_address_lib_prefix \ +SHELL \ +ECHO \ +lt_prog_compiler_no_builtin_flag \ +lt_prog_compiler_wl \ +lt_prog_compiler_pic \ +lt_prog_compiler_static \ +lt_cv_prog_compiler_c_o \ +need_locks \ +DSYMUTIL \ +NMEDIT \ +LIPO \ +OTOOL \ +OTOOL64 \ +shrext_cmds \ +export_dynamic_flag_spec \ +whole_archive_flag_spec \ +compiler_needs_object \ +with_gnu_ld \ +allow_undefined_flag \ +no_undefined_flag \ +hardcode_libdir_flag_spec \ +hardcode_libdir_flag_spec_ld \ +hardcode_libdir_separator \ +fix_srcfile_path \ +exclude_expsyms \ +include_expsyms \ +file_list_spec \ +variables_saved_for_relink \ +libname_spec \ +library_names_spec \ +soname_spec \ +finish_eval \ +old_striplib \ +striplib; do + case \`eval \\\\\$ECHO "X\\\\\$\$var"\` in + *[\\\\\\\`\\"\\\$]*) + eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"X\\\$\$var\\" | \\\$Xsed -e \\"\\\$sed_quote_subst\\"\\\`\\\\\\"" + ;; + *) + eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" + ;; + esac +done + +# Double-quote double-evaled strings. +for var in reload_cmds \ +old_postinstall_cmds \ +old_postuninstall_cmds \ +old_archive_cmds \ +extract_expsyms_cmds \ +old_archive_from_new_cmds \ +old_archive_from_expsyms_cmds \ +archive_cmds \ +archive_expsym_cmds \ +module_cmds \ +module_expsym_cmds \ +export_symbols_cmds \ +prelink_cmds \ +postinstall_cmds \ +postuninstall_cmds \ +finish_cmds \ +sys_lib_search_path_spec \ +sys_lib_dlsearch_path_spec; do + case \`eval \\\\\$ECHO "X\\\\\$\$var"\` in + *[\\\\\\\`\\"\\\$]*) + eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"X\\\$\$var\\" | \\\$Xsed -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\"" + ;; + *) + eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" + ;; + esac +done + +# Fix-up fallback echo if it was mangled by the above quoting rules. +case \$lt_ECHO in +*'\\\$0 --fallback-echo"') lt_ECHO=\`\$ECHO "X\$lt_ECHO" | \$Xsed -e 's/\\\\\\\\\\\\\\\$0 --fallback-echo"\$/\$0 --fallback-echo"/'\` + ;; +esac + +ac_aux_dir='$ac_aux_dir' +xsi_shell='$xsi_shell' +lt_shell_append='$lt_shell_append' + +# See if we are running on zsh, and set the options which allow our +# commands through without removal of \ escapes INIT. +if test -n "\${ZSH_VERSION+set}" ; then + setopt NO_GLOB_SUBST +fi + + + PACKAGE='$PACKAGE' + VERSION='$VERSION' + TIMESTAMP='$TIMESTAMP' + RM='$RM' + ofile='$ofile' + + + +# Capture the value of obsolete ALL_LINGUAS because we need it to compute + # POFILES, UPDATEPOFILES, DUMMYPOFILES, GMOFILES, CATALOGS. But hide it + # from automake < 1.5. + eval 'OBSOLETE_ALL_LINGUAS''="$ALL_LINGUAS"' + # Capture the value of LINGUAS because we need it to compute CATALOGS. + LINGUAS="${LINGUAS-%UNSET%}" + + +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 + +# Handling of arguments. +for ac_config_target in $ac_config_targets +do + case $ac_config_target in + "config.h") CONFIG_HEADERS="$CONFIG_HEADERS config.h" ;; + "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;; + "libtool") CONFIG_COMMANDS="$CONFIG_COMMANDS libtool" ;; + "po-directories") CONFIG_COMMANDS="$CONFIG_COMMANDS po-directories" ;; + "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; + "etc/Makefile") CONFIG_FILES="$CONFIG_FILES etc/Makefile" ;; + "lib/Makefile") CONFIG_FILES="$CONFIG_FILES lib/Makefile" ;; + "src/Makefile") CONFIG_FILES="$CONFIG_FILES src/Makefile" ;; + "plugins/Makefile") CONFIG_FILES="$CONFIG_FILES plugins/Makefile" ;; + "po/Makefile.in") CONFIG_FILES="$CONFIG_FILES po/Makefile.in" ;; + "m4/Makefile") CONFIG_FILES="$CONFIG_FILES m4/Makefile" ;; + + *) { { $as_echo "$as_me:$LINENO: error: invalid argument: $ac_config_target" >&5 +$as_echo "$as_me: error: invalid argument: $ac_config_target" >&2;} + { (exit 1); exit 1; }; };; + esac +done + + +# If the user did not use the arguments to specify the items to instantiate, +# then the envvar interface is used. Set only those that are not. +# We use the long form for the default assignment because of an extremely +# bizarre bug on SunOS 4.1.3. +if $ac_need_defaults; then + test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files + test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers + test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands +fi + +# Have a temporary directory for convenience. Make it in the build tree +# simply because there is no reason against having it here, and in addition, +# creating and moving files from /tmp can sometimes cause problems. +# Hook for its removal unless debugging. +# Note that there is a small window in which the directory will not be cleaned: +# after its creation but before its name has been assigned to `$tmp'. +$debug || +{ + tmp= + trap 'exit_status=$? + { test -z "$tmp" || test ! -d "$tmp" || rm -fr "$tmp"; } && exit $exit_status +' 0 + trap '{ (exit 1); exit 1; }' 1 2 13 15 +} +# Create a (secure) tmp directory for tmp files. + +{ + tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` && + test -n "$tmp" && test -d "$tmp" +} || +{ + tmp=./conf$$-$RANDOM + (umask 077 && mkdir "$tmp") +} || +{ + $as_echo "$as_me: cannot create a temporary directory in ." >&2 + { (exit 1); exit 1; } +} + +# Set up the scripts for CONFIG_FILES section. +# No need to generate them if there are no CONFIG_FILES. +# This happens for instance with `./config.status config.h'. +if test -n "$CONFIG_FILES"; then + + +ac_cr=' ' +ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' /dev/null` +if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then + ac_cs_awk_cr='\\r' +else + ac_cs_awk_cr=$ac_cr +fi + +echo 'BEGIN {' >"$tmp/subs1.awk" && +_ACEOF + + +{ + echo "cat >conf$$subs.awk <<_ACEOF" && + echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' && + echo "_ACEOF" +} >conf$$subs.sh || + { { $as_echo "$as_me:$LINENO: error: could not make $CONFIG_STATUS" >&5 +$as_echo "$as_me: error: could not make $CONFIG_STATUS" >&2;} + { (exit 1); exit 1; }; } +ac_delim_num=`echo "$ac_subst_vars" | grep -c '$'` +ac_delim='%!_!# ' +for ac_last_try in false false false false false :; do + . ./conf$$subs.sh || + { { $as_echo "$as_me:$LINENO: error: could not make $CONFIG_STATUS" >&5 +$as_echo "$as_me: error: could not make $CONFIG_STATUS" >&2;} + { (exit 1); exit 1; }; } + + ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X` + if test $ac_delim_n = $ac_delim_num; then + break + elif $ac_last_try; then + { { $as_echo "$as_me:$LINENO: error: could not make $CONFIG_STATUS" >&5 +$as_echo "$as_me: error: could not make $CONFIG_STATUS" >&2;} + { (exit 1); exit 1; }; } + else + ac_delim="$ac_delim!$ac_delim _$ac_delim!! " + fi +done +rm -f conf$$subs.sh + +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +cat >>"\$tmp/subs1.awk" <<\\_ACAWK && +_ACEOF +sed -n ' +h +s/^/S["/; s/!.*/"]=/ +p +g +s/^[^!]*!// +:repl +t repl +s/'"$ac_delim"'$// +t delim +:nl +h +s/\(.\{148\}\).*/\1/ +t more1 +s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/ +p +n +b repl +:more1 +s/["\\]/\\&/g; s/^/"/; s/$/"\\/ +p +g +s/.\{148\}// +t nl +:delim +h +s/\(.\{148\}\).*/\1/ +t more2 +s/["\\]/\\&/g; s/^/"/; s/$/"/ +p +b +:more2 +s/["\\]/\\&/g; s/^/"/; s/$/"\\/ +p +g +s/.\{148\}// +t delim +' >$CONFIG_STATUS || ac_write_fail=1 +rm -f conf$$subs.awk +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +_ACAWK +cat >>"\$tmp/subs1.awk" <<_ACAWK && + for (key in S) S_is_set[key] = 1 + FS = "" + +} +{ + line = $ 0 + nfields = split(line, field, "@") + substed = 0 + len = length(field[1]) + for (i = 2; i < nfields; i++) { + key = field[i] + keylen = length(key) + if (S_is_set[key]) { + value = S[key] + line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3) + len += length(value) + length(field[++i]) + substed = 1 + } else + len += 1 + keylen + } + + print line +} + +_ACAWK +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then + sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g" +else + cat +fi < "$tmp/subs1.awk" > "$tmp/subs.awk" \ + || { { $as_echo "$as_me:$LINENO: error: could not setup config files machinery" >&5 +$as_echo "$as_me: error: could not setup config files machinery" >&2;} + { (exit 1); exit 1; }; } +_ACEOF + +# VPATH may cause trouble with some makes, so we remove $(srcdir), +# ${srcdir} and @srcdir@ from VPATH if srcdir is ".", strip leading and +# trailing colons and then remove the whole line if VPATH becomes empty +# (actually we leave an empty line to preserve line numbers). +if test "x$srcdir" = x.; then + ac_vpsub='/^[ ]*VPATH[ ]*=/{ +s/:*\$(srcdir):*/:/ +s/:*\${srcdir}:*/:/ +s/:*@srcdir@:*/:/ +s/^\([^=]*=[ ]*\):*/\1/ +s/:*$// +s/^[^=]*=[ ]*$// +}' +fi + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +fi # test -n "$CONFIG_FILES" + +# Set up the scripts for CONFIG_HEADERS section. +# No need to generate them if there are no CONFIG_HEADERS. +# This happens for instance with `./config.status Makefile'. +if test -n "$CONFIG_HEADERS"; then +cat >"$tmp/defines.awk" <<\_ACAWK || +BEGIN { +_ACEOF + +# Transform confdefs.h into an awk script `defines.awk', embedded as +# here-document in config.status, that substitutes the proper values into +# config.h.in to produce config.h. + +# Create a delimiter string that does not exist in confdefs.h, to ease +# handling of long lines. +ac_delim='%!_!# ' +for ac_last_try in false false :; do + ac_t=`sed -n "/$ac_delim/p" confdefs.h` + if test -z "$ac_t"; then + break + elif $ac_last_try; then + { { $as_echo "$as_me:$LINENO: error: could not make $CONFIG_HEADERS" >&5 +$as_echo "$as_me: error: could not make $CONFIG_HEADERS" >&2;} + { (exit 1); exit 1; }; } + else + ac_delim="$ac_delim!$ac_delim _$ac_delim!! " + fi +done + +# For the awk script, D is an array of macro values keyed by name, +# likewise P contains macro parameters if any. Preserve backslash +# newline sequences. + +ac_word_re=[_$as_cr_Letters][_$as_cr_alnum]* +sed -n ' +s/.\{148\}/&'"$ac_delim"'/g +t rset +:rset +s/^[ ]*#[ ]*define[ ][ ]*/ / +t def +d +:def +s/\\$// +t bsnl +s/["\\]/\\&/g +s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ +D["\1"]=" \3"/p +s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2"/p +d +:bsnl +s/["\\]/\\&/g +s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ +D["\1"]=" \3\\\\\\n"\\/p +t cont +s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2\\\\\\n"\\/p +t cont +d +:cont +n +s/.\{148\}/&'"$ac_delim"'/g +t clear +:clear +s/\\$// +t bsnlc +s/["\\]/\\&/g; s/^/"/; s/$/"/p +d +:bsnlc +s/["\\]/\\&/g; s/^/"/; s/$/\\\\\\n"\\/p +b cont +' >$CONFIG_STATUS || ac_write_fail=1 + +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 + for (key in D) D_is_set[key] = 1 + FS = "" +} +/^[\t ]*#[\t ]*(define|undef)[\t ]+$ac_word_re([\t (]|\$)/ { + line = \$ 0 + split(line, arg, " ") + if (arg[1] == "#") { + defundef = arg[2] + mac1 = arg[3] + } else { + defundef = substr(arg[1], 2) + mac1 = arg[2] + } + split(mac1, mac2, "(") #) + macro = mac2[1] + prefix = substr(line, 1, index(line, defundef) - 1) + if (D_is_set[macro]) { + # Preserve the white space surrounding the "#". + print prefix "define", macro P[macro] D[macro] + next + } else { + # Replace #undef with comments. This is necessary, for example, + # in the case of _POSIX_SOURCE, which is predefined and required + # on some systems where configure will not decide to define it. + if (defundef == "undef") { + print "/*", prefix defundef, macro, "*/" + next + } + } +} +{ print } +_ACAWK +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 + { { $as_echo "$as_me:$LINENO: error: could not setup config headers machinery" >&5 +$as_echo "$as_me: error: could not setup config headers machinery" >&2;} + { (exit 1); exit 1; }; } +fi # test -n "$CONFIG_HEADERS" + + +eval set X " :F $CONFIG_FILES :H $CONFIG_HEADERS :C $CONFIG_COMMANDS" +shift +for ac_tag +do + case $ac_tag in + :[FHLC]) ac_mode=$ac_tag; continue;; + esac + case $ac_mode$ac_tag in + :[FHL]*:*);; + :L* | :C*:*) { { $as_echo "$as_me:$LINENO: error: invalid tag $ac_tag" >&5 +$as_echo "$as_me: error: invalid tag $ac_tag" >&2;} + { (exit 1); exit 1; }; };; + :[FH]-) ac_tag=-:-;; + :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; + esac + ac_save_IFS=$IFS + IFS=: + set x $ac_tag + IFS=$ac_save_IFS + shift + ac_file=$1 + shift + + case $ac_mode in + :L) ac_source=$1;; + :[FH]) + ac_file_inputs= + for ac_f + do + case $ac_f in + -) ac_f="$tmp/stdin";; + *) # Look for the file first in the build tree, then in the source tree + # (if the path is not absolute). The absolute path cannot be DOS-style, + # because $ac_f cannot contain `:'. + test -f "$ac_f" || + case $ac_f in + [\\/$]*) false;; + *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; + esac || + { { $as_echo "$as_me:$LINENO: error: cannot find input file: $ac_f" >&5 +$as_echo "$as_me: error: cannot find input file: $ac_f" >&2;} + { (exit 1); exit 1; }; };; + esac + case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac + ac_file_inputs="$ac_file_inputs '$ac_f'" + done + + # Let's still pretend it is `configure' which instantiates (i.e., don't + # use $as_me), people would be surprised to read: + # /* config.h. Generated by config.status. */ + configure_input='Generated from '` + $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g' + `' by configure.' + if test x"$ac_file" != x-; then + configure_input="$ac_file. $configure_input" + { $as_echo "$as_me:$LINENO: creating $ac_file" >&5 +$as_echo "$as_me: creating $ac_file" >&6;} + fi + # Neutralize special characters interpreted by sed in replacement strings. + case $configure_input in #( + *\&* | *\|* | *\\* ) + ac_sed_conf_input=`$as_echo "$configure_input" | + sed 's/[\\\\&|]/\\\\&/g'`;; #( + *) ac_sed_conf_input=$configure_input;; + esac + + case $ac_tag in + *:-:* | *:-) cat >"$tmp/stdin" \ + || { { $as_echo "$as_me:$LINENO: error: could not create $ac_file" >&5 +$as_echo "$as_me: error: could not create $ac_file" >&2;} + { (exit 1); exit 1; }; } ;; + esac + ;; + esac + + ac_dir=`$as_dirname -- "$ac_file" || +$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$ac_file" : 'X\(//\)[^/]' \| \ + X"$ac_file" : 'X\(//\)$' \| \ + X"$ac_file" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$ac_file" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + { as_dir="$ac_dir" + case $as_dir in #( + -*) as_dir=./$as_dir;; + esac + test -d "$as_dir" || { $as_mkdir_p && mkdir -p "$as_dir"; } || { + as_dirs= + while :; do + case $as_dir in #( + *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( + *) as_qdir=$as_dir;; + esac + as_dirs="'$as_qdir' $as_dirs" + as_dir=`$as_dirname -- "$as_dir" || +$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$as_dir" : 'X\(//\)[^/]' \| \ + X"$as_dir" : 'X\(//\)$' \| \ + X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$as_dir" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + test -d "$as_dir" && break + done + test -z "$as_dirs" || eval "mkdir $as_dirs" + } || test -d "$as_dir" || { { $as_echo "$as_me:$LINENO: error: cannot create directory $as_dir" >&5 +$as_echo "$as_me: error: cannot create directory $as_dir" >&2;} + { (exit 1); exit 1; }; }; } + ac_builddir=. + +case "$ac_dir" in +.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; +*) + ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` + # A ".." for each directory in $ac_dir_suffix. + ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` + case $ac_top_builddir_sub in + "") ac_top_builddir_sub=. ac_top_build_prefix= ;; + *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; + esac ;; +esac +ac_abs_top_builddir=$ac_pwd +ac_abs_builddir=$ac_pwd$ac_dir_suffix +# for backward compatibility: +ac_top_builddir=$ac_top_build_prefix + +case $srcdir in + .) # We are building in place. + ac_srcdir=. + ac_top_srcdir=$ac_top_builddir_sub + ac_abs_top_srcdir=$ac_pwd ;; + [\\/]* | ?:[\\/]* ) # Absolute name. + ac_srcdir=$srcdir$ac_dir_suffix; + ac_top_srcdir=$srcdir + ac_abs_top_srcdir=$srcdir ;; + *) # Relative name. + ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix + ac_top_srcdir=$ac_top_build_prefix$srcdir + ac_abs_top_srcdir=$ac_pwd/$srcdir ;; +esac +ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix + + + case $ac_mode in + :F) + # + # CONFIG_FILE + # + + case $INSTALL in + [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;; + *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;; + esac + ac_MKDIR_P=$MKDIR_P + case $MKDIR_P in + [\\/$]* | ?:[\\/]* ) ;; + */*) ac_MKDIR_P=$ac_top_build_prefix$MKDIR_P ;; + esac +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +# If the template does not know about datarootdir, expand it. +# FIXME: This hack should be removed a few years after 2.60. +ac_datarootdir_hack=; ac_datarootdir_seen= + +ac_sed_dataroot=' +/datarootdir/ { + p + q +} +/@datadir@/p +/@docdir@/p +/@infodir@/p +/@localedir@/p +/@mandir@/p +' +case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in +*datarootdir*) ac_datarootdir_seen=yes;; +*@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*) + { $as_echo "$as_me:$LINENO: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 +$as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 + ac_datarootdir_hack=' + s&@datadir@&$datadir&g + s&@docdir@&$docdir&g + s&@infodir@&$infodir&g + s&@localedir@&$localedir&g + s&@mandir@&$mandir&g + s&\\\${datarootdir}&$datarootdir&g' ;; +esac +_ACEOF + +# Neutralize VPATH when `$srcdir' = `.'. +# Shell code in configure.ac might set extrasub. +# FIXME: do we really want to maintain this feature? +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +ac_sed_extra="$ac_vpsub +$extrasub +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +:t +/@[a-zA-Z_][a-zA-Z_0-9]*@/!b +s|@configure_input@|$ac_sed_conf_input|;t t +s&@top_builddir@&$ac_top_builddir_sub&;t t +s&@top_build_prefix@&$ac_top_build_prefix&;t t +s&@srcdir@&$ac_srcdir&;t t +s&@abs_srcdir@&$ac_abs_srcdir&;t t +s&@top_srcdir@&$ac_top_srcdir&;t t +s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t +s&@builddir@&$ac_builddir&;t t +s&@abs_builddir@&$ac_abs_builddir&;t t +s&@abs_top_builddir@&$ac_abs_top_builddir&;t t +s&@INSTALL@&$ac_INSTALL&;t t +s&@MKDIR_P@&$ac_MKDIR_P&;t t +$ac_datarootdir_hack +" +eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$tmp/subs.awk" >$tmp/out \ + || { { $as_echo "$as_me:$LINENO: error: could not create $ac_file" >&5 +$as_echo "$as_me: error: could not create $ac_file" >&2;} + { (exit 1); exit 1; }; } + +test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && + { ac_out=`sed -n '/\${datarootdir}/p' "$tmp/out"`; test -n "$ac_out"; } && + { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' "$tmp/out"`; test -z "$ac_out"; } && + { $as_echo "$as_me:$LINENO: WARNING: $ac_file contains a reference to the variable \`datarootdir' +which seems to be undefined. Please make sure it is defined." >&5 +$as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' +which seems to be undefined. Please make sure it is defined." >&2;} + + rm -f "$tmp/stdin" + case $ac_file in + -) cat "$tmp/out" && rm -f "$tmp/out";; + *) rm -f "$ac_file" && mv "$tmp/out" "$ac_file";; + esac \ + || { { $as_echo "$as_me:$LINENO: error: could not create $ac_file" >&5 +$as_echo "$as_me: error: could not create $ac_file" >&2;} + { (exit 1); exit 1; }; } + ;; + :H) + # + # CONFIG_HEADER + # + if test x"$ac_file" != x-; then + { + $as_echo "/* $configure_input */" \ + && eval '$AWK -f "$tmp/defines.awk"' "$ac_file_inputs" + } >"$tmp/config.h" \ + || { { $as_echo "$as_me:$LINENO: error: could not create $ac_file" >&5 +$as_echo "$as_me: error: could not create $ac_file" >&2;} + { (exit 1); exit 1; }; } + if diff "$ac_file" "$tmp/config.h" >/dev/null 2>&1; then + { $as_echo "$as_me:$LINENO: $ac_file is unchanged" >&5 +$as_echo "$as_me: $ac_file is unchanged" >&6;} + else + rm -f "$ac_file" + mv "$tmp/config.h" "$ac_file" \ + || { { $as_echo "$as_me:$LINENO: error: could not create $ac_file" >&5 +$as_echo "$as_me: error: could not create $ac_file" >&2;} + { (exit 1); exit 1; }; } + fi + else + $as_echo "/* $configure_input */" \ + && eval '$AWK -f "$tmp/defines.awk"' "$ac_file_inputs" \ + || { { $as_echo "$as_me:$LINENO: error: could not create -" >&5 +$as_echo "$as_me: error: could not create -" >&2;} + { (exit 1); exit 1; }; } + fi +# Compute "$ac_file"'s index in $config_headers. +_am_arg="$ac_file" +_am_stamp_count=1 +for _am_header in $config_headers :; do + case $_am_header in + $_am_arg | $_am_arg:* ) + break ;; + * ) + _am_stamp_count=`expr $_am_stamp_count + 1` ;; + esac +done +echo "timestamp for $_am_arg" >`$as_dirname -- "$_am_arg" || +$as_expr X"$_am_arg" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$_am_arg" : 'X\(//\)[^/]' \| \ + X"$_am_arg" : 'X\(//\)$' \| \ + X"$_am_arg" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$_am_arg" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'`/stamp-h$_am_stamp_count + ;; + + :C) { $as_echo "$as_me:$LINENO: executing $ac_file commands" >&5 +$as_echo "$as_me: executing $ac_file commands" >&6;} + ;; + esac + + + case $ac_file$ac_mode in + "depfiles":C) test x"$AMDEP_TRUE" != x"" || for mf in $CONFIG_FILES; do + # Strip MF so we end up with the name of the file. + mf=`echo "$mf" | sed -e 's/:.*$//'` + # Check whether this is an Automake generated Makefile or not. + # We used to match only the files named `Makefile.in', but + # some people rename them; so instead we look at the file content. + # Grep'ing the first line is not enough: some people post-process + # each Makefile.in and add a new line on top of each file to say so. + # Grep'ing the whole file is not good either: AIX grep has a line + # limit of 2048, but all sed's we know have understand at least 4000. + if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then + dirpart=`$as_dirname -- "$mf" || +$as_expr X"$mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$mf" : 'X\(//\)[^/]' \| \ + X"$mf" : 'X\(//\)$' \| \ + X"$mf" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$mf" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + else + continue + fi + # Extract the definition of DEPDIR, am__include, and am__quote + # from the Makefile without running `make'. + DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` + test -z "$DEPDIR" && continue + am__include=`sed -n 's/^am__include = //p' < "$mf"` + test -z "am__include" && continue + am__quote=`sed -n 's/^am__quote = //p' < "$mf"` + # When using ansi2knr, U may be empty or an underscore; expand it + U=`sed -n 's/^U = //p' < "$mf"` + # Find all dependency output files, they are included files with + # $(DEPDIR) in their names. We invoke sed twice because it is the + # simplest approach to changing $(DEPDIR) to its actual value in the + # expansion. + for file in `sed -n " + s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ + sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do + # Make sure the directory exists. + test -f "$dirpart/$file" && continue + fdir=`$as_dirname -- "$file" || +$as_expr X"$file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$file" : 'X\(//\)[^/]' \| \ + X"$file" : 'X\(//\)$' \| \ + X"$file" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$file" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + { as_dir=$dirpart/$fdir + case $as_dir in #( + -*) as_dir=./$as_dir;; + esac + test -d "$as_dir" || { $as_mkdir_p && mkdir -p "$as_dir"; } || { + as_dirs= + while :; do + case $as_dir in #( + *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( + *) as_qdir=$as_dir;; + esac + as_dirs="'$as_qdir' $as_dirs" + as_dir=`$as_dirname -- "$as_dir" || +$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$as_dir" : 'X\(//\)[^/]' \| \ + X"$as_dir" : 'X\(//\)$' \| \ + X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$as_dir" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + test -d "$as_dir" && break + done + test -z "$as_dirs" || eval "mkdir $as_dirs" + } || test -d "$as_dir" || { { $as_echo "$as_me:$LINENO: error: cannot create directory $as_dir" >&5 +$as_echo "$as_me: error: cannot create directory $as_dir" >&2;} + { (exit 1); exit 1; }; }; } + # echo "creating $dirpart/$file" + echo '# dummy' > "$dirpart/$file" + done +done + ;; + "libtool":C) + + # See if we are running on zsh, and set the options which allow our + # commands through without removal of \ escapes. + if test -n "${ZSH_VERSION+set}" ; then + setopt NO_GLOB_SUBST + fi + + cfgfile="${ofile}T" + trap "$RM \"$cfgfile\"; exit 1" 1 2 15 + $RM "$cfgfile" + + cat <<_LT_EOF >> "$cfgfile" +#! $SHELL + +# `$ECHO "$ofile" | sed 's%^.*/%%'` - Provide generalized library-building support services. +# Generated automatically by $as_me ($PACKAGE$TIMESTAMP) $VERSION +# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: +# NOTE: Changes made to this file will be lost: look at ltmain.sh. +# +# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, +# 2006, 2007, 2008 Free Software Foundation, Inc. +# Written by Gordon Matzigkeit, 1996 +# +# This file is part of GNU Libtool. +# +# GNU Libtool 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. +# +# As a special exception to the GNU General Public License, +# if you distribute this file as part of a program or library that +# is built using GNU Libtool, you may include this file under the +# same distribution terms that you use for the rest of that program. +# +# GNU Libtool 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 GNU Libtool; see the file COPYING. If not, a copy +# can be downloaded from http://www.gnu.org/licenses/gpl.html, or +# obtained by writing to the Free Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + + +# The names of the tagged configurations supported by this script. +available_tags="" + +# ### BEGIN LIBTOOL CONFIG + +# Which release of libtool.m4 was used? +macro_version=$macro_version +macro_revision=$macro_revision + +# Whether or not to build shared libraries. +build_libtool_libs=$enable_shared + +# Whether or not to build static libraries. +build_old_libs=$enable_static + +# What type of objects to build. +pic_mode=$pic_mode + +# Whether or not to optimize for fast installation. +fast_install=$enable_fast_install + +# The host system. +host_alias=$host_alias +host=$host +host_os=$host_os + +# The build system. +build_alias=$build_alias +build=$build +build_os=$build_os + +# A sed program that does not truncate output. +SED=$lt_SED + +# Sed that helps us avoid accidentally triggering echo(1) options like -n. +Xsed="\$SED -e 1s/^X//" + +# A grep program that handles long lines. +GREP=$lt_GREP + +# An ERE matcher. +EGREP=$lt_EGREP + +# A literal string matcher. +FGREP=$lt_FGREP + +# A BSD- or MS-compatible name lister. +NM=$lt_NM + +# Whether we need soft or hard links. +LN_S=$lt_LN_S + +# What is the maximum length of a command? +max_cmd_len=$max_cmd_len + +# Object file suffix (normally "o"). +objext=$ac_objext + +# Executable file suffix (normally ""). +exeext=$exeext + +# whether the shell understands "unset". +lt_unset=$lt_unset + +# turn spaces into newlines. +SP2NL=$lt_lt_SP2NL + +# turn newlines into spaces. +NL2SP=$lt_lt_NL2SP + +# How to create reloadable object files. +reload_flag=$lt_reload_flag +reload_cmds=$lt_reload_cmds + +# An object symbol dumper. +OBJDUMP=$lt_OBJDUMP + +# Method to check whether dependent libraries are shared objects. +deplibs_check_method=$lt_deplibs_check_method + +# Command to use when deplibs_check_method == "file_magic". +file_magic_cmd=$lt_file_magic_cmd + +# The archiver. +AR=$lt_AR +AR_FLAGS=$lt_AR_FLAGS + +# A symbol stripping program. +STRIP=$lt_STRIP + +# Commands used to install an old-style archive. +RANLIB=$lt_RANLIB +old_postinstall_cmds=$lt_old_postinstall_cmds +old_postuninstall_cmds=$lt_old_postuninstall_cmds + +# A C compiler. +LTCC=$lt_CC + +# LTCC compiler flags. +LTCFLAGS=$lt_CFLAGS + +# Take the output of nm and produce a listing of raw symbols and C names. +global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe + +# Transform the output of nm in a proper C declaration. +global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl + +# Transform the output of nm in a C name address pair. +global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address + +# Transform the output of nm in a C name address pair when lib prefix is needed. +global_symbol_to_c_name_address_lib_prefix=$lt_lt_cv_sys_global_symbol_to_c_name_address_lib_prefix + +# The name of the directory that contains temporary libtool files. +objdir=$objdir + +# Shell to use when invoking shell scripts. +SHELL=$lt_SHELL + +# An echo program that does not interpret backslashes. +ECHO=$lt_ECHO + +# Used to examine libraries when file_magic_cmd begins with "file". +MAGIC_CMD=$MAGIC_CMD + +# Must we lock files when doing compilation? +need_locks=$lt_need_locks + +# Tool to manipulate archived DWARF debug symbol files on Mac OS X. +DSYMUTIL=$lt_DSYMUTIL + +# Tool to change global to local symbols on Mac OS X. +NMEDIT=$lt_NMEDIT + +# Tool to manipulate fat objects and archives on Mac OS X. +LIPO=$lt_LIPO + +# ldd/readelf like tool for Mach-O binaries on Mac OS X. +OTOOL=$lt_OTOOL + +# ldd/readelf like tool for 64 bit Mach-O binaries on Mac OS X 10.4. +OTOOL64=$lt_OTOOL64 + +# Old archive suffix (normally "a"). +libext=$libext + +# Shared library suffix (normally ".so"). +shrext_cmds=$lt_shrext_cmds + +# The commands to extract the exported symbol list from a shared archive. +extract_expsyms_cmds=$lt_extract_expsyms_cmds + +# Variables whose values should be saved in libtool wrapper scripts and +# restored at link time. +variables_saved_for_relink=$lt_variables_saved_for_relink + +# Do we need the "lib" prefix for modules? +need_lib_prefix=$need_lib_prefix + +# Do we need a version for libraries? +need_version=$need_version + +# Library versioning type. +version_type=$version_type + +# Shared library runtime path variable. +runpath_var=$runpath_var + +# Shared library path variable. +shlibpath_var=$shlibpath_var + +# Is shlibpath searched before the hard-coded library search path? +shlibpath_overrides_runpath=$shlibpath_overrides_runpath + +# Format of library name prefix. +libname_spec=$lt_libname_spec + +# List of archive names. First name is the real one, the rest are links. +# The last name is the one that the linker finds with -lNAME +library_names_spec=$lt_library_names_spec + +# The coded name of the library, if different from the real name. +soname_spec=$lt_soname_spec + +# Command to use after installation of a shared archive. +postinstall_cmds=$lt_postinstall_cmds + +# Command to use after uninstallation of a shared archive. +postuninstall_cmds=$lt_postuninstall_cmds + +# Commands used to finish a libtool library installation in a directory. +finish_cmds=$lt_finish_cmds + +# As "finish_cmds", except a single script fragment to be evaled but +# not shown. +finish_eval=$lt_finish_eval + +# Whether we should hardcode library paths into libraries. +hardcode_into_libs=$hardcode_into_libs + +# Compile-time system search path for libraries. +sys_lib_search_path_spec=$lt_sys_lib_search_path_spec + +# Run-time system search path for libraries. +sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec + +# Whether dlopen is supported. +dlopen_support=$enable_dlopen + +# Whether dlopen of programs is supported. +dlopen_self=$enable_dlopen_self + +# Whether dlopen of statically linked programs is supported. +dlopen_self_static=$enable_dlopen_self_static + +# Commands to strip libraries. +old_striplib=$lt_old_striplib +striplib=$lt_striplib + + +# The linker used to build libraries. +LD=$lt_LD + +# Commands used to build an old-style archive. +old_archive_cmds=$lt_old_archive_cmds + +# A language specific compiler. +CC=$lt_compiler + +# Is the compiler the GNU compiler? +with_gcc=$GCC + +# Compiler flag to turn off builtin functions. +no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag + +# How to pass a linker flag through the compiler. +wl=$lt_lt_prog_compiler_wl + +# Additional compiler flags for building library objects. +pic_flag=$lt_lt_prog_compiler_pic + +# Compiler flag to prevent dynamic linking. +link_static_flag=$lt_lt_prog_compiler_static + +# Does compiler simultaneously support -c and -o options? +compiler_c_o=$lt_lt_cv_prog_compiler_c_o + +# Whether or not to add -lc for building shared libraries. +build_libtool_need_lc=$archive_cmds_need_lc + +# Whether or not to disallow shared libs when runtime libs are static. +allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes + +# Compiler flag to allow reflexive dlopens. +export_dynamic_flag_spec=$lt_export_dynamic_flag_spec + +# Compiler flag to generate shared objects directly from archives. +whole_archive_flag_spec=$lt_whole_archive_flag_spec + +# Whether the compiler copes with passing no objects directly. +compiler_needs_object=$lt_compiler_needs_object + +# Create an old-style archive from a shared archive. +old_archive_from_new_cmds=$lt_old_archive_from_new_cmds + +# Create a temporary old-style archive to link instead of a shared archive. +old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds + +# Commands used to build a shared archive. +archive_cmds=$lt_archive_cmds +archive_expsym_cmds=$lt_archive_expsym_cmds + +# Commands used to build a loadable module if different from building +# a shared archive. +module_cmds=$lt_module_cmds +module_expsym_cmds=$lt_module_expsym_cmds + +# Whether we are building with GNU ld or not. +with_gnu_ld=$lt_with_gnu_ld + +# Flag that allows shared libraries with undefined symbols to be built. +allow_undefined_flag=$lt_allow_undefined_flag + +# Flag that enforces no undefined symbols. +no_undefined_flag=$lt_no_undefined_flag + +# Flag to hardcode \$libdir into a binary during linking. +# This must work even if \$libdir does not exist +hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec + +# If ld is used when linking, flag to hardcode \$libdir into a binary +# during linking. This must work even if \$libdir does not exist. +hardcode_libdir_flag_spec_ld=$lt_hardcode_libdir_flag_spec_ld + +# Whether we need a single "-rpath" flag with a separated argument. +hardcode_libdir_separator=$lt_hardcode_libdir_separator + +# Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes +# DIR into the resulting binary. +hardcode_direct=$hardcode_direct + +# Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes +# DIR into the resulting binary and the resulting library dependency is +# "absolute",i.e impossible to change by setting \${shlibpath_var} if the +# library is relocated. +hardcode_direct_absolute=$hardcode_direct_absolute + +# Set to "yes" if using the -LDIR flag during linking hardcodes DIR +# into the resulting binary. +hardcode_minus_L=$hardcode_minus_L + +# Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR +# into the resulting binary. +hardcode_shlibpath_var=$hardcode_shlibpath_var + +# Set to "yes" if building a shared library automatically hardcodes DIR +# into the library and all subsequent libraries and executables linked +# against it. +hardcode_automatic=$hardcode_automatic + +# Set to yes if linker adds runtime paths of dependent libraries +# to runtime path list. +inherit_rpath=$inherit_rpath + +# Whether libtool must link a program against all its dependency libraries. +link_all_deplibs=$link_all_deplibs + +# Fix the shell variable \$srcfile for the compiler. +fix_srcfile_path=$lt_fix_srcfile_path + +# Set to "yes" if exported symbols are required. +always_export_symbols=$always_export_symbols + +# The commands to list exported symbols. +export_symbols_cmds=$lt_export_symbols_cmds + +# Symbols that should not be listed in the preloaded symbols. +exclude_expsyms=$lt_exclude_expsyms + +# Symbols that must always be exported. +include_expsyms=$lt_include_expsyms + +# Commands necessary for linking programs (against libraries) with templates. +prelink_cmds=$lt_prelink_cmds + +# Specify filename containing input files. +file_list_spec=$lt_file_list_spec + +# How to hardcode a shared library path into an executable. +hardcode_action=$hardcode_action + +# ### END LIBTOOL CONFIG + +_LT_EOF + + case $host_os in + aix3*) + cat <<\_LT_EOF >> "$cfgfile" +# AIX sometimes has problems with the GCC collect2 program. For some +# reason, if we set the COLLECT_NAMES environment variable, the problems +# vanish in a puff of smoke. +if test "X${COLLECT_NAMES+set}" != Xset; then + COLLECT_NAMES= + export COLLECT_NAMES +fi +_LT_EOF + ;; + esac + + +ltmain="$ac_aux_dir/ltmain.sh" + + + # We use sed instead of cat because bash on DJGPP gets confused if + # if finds mixed CR/LF and LF-only lines. Since sed operates in + # text mode, it properly converts lines to CR/LF. This bash problem + # is reportedly fixed, but why not run on old versions too? + sed '/^# Generated shell functions inserted here/q' "$ltmain" >> "$cfgfile" \ + || (rm -f "$cfgfile"; exit 1) + + case $xsi_shell in + yes) + cat << \_LT_EOF >> "$cfgfile" + +# func_dirname file append nondir_replacement +# Compute the dirname of FILE. If nonempty, add APPEND to the result, +# otherwise set result to NONDIR_REPLACEMENT. +func_dirname () +{ + case ${1} in + */*) func_dirname_result="${1%/*}${2}" ;; + * ) func_dirname_result="${3}" ;; + esac +} + +# func_basename file +func_basename () +{ + func_basename_result="${1##*/}" +} + +# func_dirname_and_basename file append nondir_replacement +# perform func_basename and func_dirname in a single function +# call: +# dirname: Compute the dirname of FILE. If nonempty, +# add APPEND to the result, otherwise set result +# to NONDIR_REPLACEMENT. +# value returned in "$func_dirname_result" +# basename: Compute filename of FILE. +# value retuned in "$func_basename_result" +# Implementation must be kept synchronized with func_dirname +# and func_basename. For efficiency, we do not delegate to +# those functions but instead duplicate the functionality here. +func_dirname_and_basename () +{ + case ${1} in + */*) func_dirname_result="${1%/*}${2}" ;; + * ) func_dirname_result="${3}" ;; + esac + func_basename_result="${1##*/}" +} + +# func_stripname prefix suffix name +# strip PREFIX and SUFFIX off of NAME. +# PREFIX and SUFFIX must not contain globbing or regex special +# characters, hashes, percent signs, but SUFFIX may contain a leading +# dot (in which case that matches only a dot). +func_stripname () +{ + # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are + # positional parameters, so assign one to ordinary parameter first. + func_stripname_result=${3} + func_stripname_result=${func_stripname_result#"${1}"} + func_stripname_result=${func_stripname_result%"${2}"} +} + +# func_opt_split +func_opt_split () +{ + func_opt_split_opt=${1%%=*} + func_opt_split_arg=${1#*=} +} + +# func_lo2o object +func_lo2o () +{ + case ${1} in + *.lo) func_lo2o_result=${1%.lo}.${objext} ;; + *) func_lo2o_result=${1} ;; + esac +} + +# func_xform libobj-or-source +func_xform () +{ + func_xform_result=${1%.*}.lo +} + +# func_arith arithmetic-term... +func_arith () +{ + func_arith_result=$(( $* )) +} + +# func_len string +# STRING may not start with a hyphen. +func_len () +{ + func_len_result=${#1} +} + +_LT_EOF + ;; + *) # Bourne compatible functions. + cat << \_LT_EOF >> "$cfgfile" + +# func_dirname file append nondir_replacement +# Compute the dirname of FILE. If nonempty, add APPEND to the result, +# otherwise set result to NONDIR_REPLACEMENT. +func_dirname () +{ + # Extract subdirectory from the argument. + func_dirname_result=`$ECHO "X${1}" | $Xsed -e "$dirname"` + if test "X$func_dirname_result" = "X${1}"; then + func_dirname_result="${3}" + else + func_dirname_result="$func_dirname_result${2}" + fi +} + +# func_basename file +func_basename () +{ + func_basename_result=`$ECHO "X${1}" | $Xsed -e "$basename"` +} + + +# func_stripname prefix suffix name +# strip PREFIX and SUFFIX off of NAME. +# PREFIX and SUFFIX must not contain globbing or regex special +# characters, hashes, percent signs, but SUFFIX may contain a leading +# dot (in which case that matches only a dot). +# func_strip_suffix prefix name +func_stripname () +{ + case ${2} in + .*) func_stripname_result=`$ECHO "X${3}" \ + | $Xsed -e "s%^${1}%%" -e "s%\\\\${2}\$%%"`;; + *) func_stripname_result=`$ECHO "X${3}" \ + | $Xsed -e "s%^${1}%%" -e "s%${2}\$%%"`;; + esac +} + +# sed scripts: +my_sed_long_opt='1s/^\(-[^=]*\)=.*/\1/;q' +my_sed_long_arg='1s/^-[^=]*=//' + +# func_opt_split +func_opt_split () +{ + func_opt_split_opt=`$ECHO "X${1}" | $Xsed -e "$my_sed_long_opt"` + func_opt_split_arg=`$ECHO "X${1}" | $Xsed -e "$my_sed_long_arg"` +} + +# func_lo2o object +func_lo2o () +{ + func_lo2o_result=`$ECHO "X${1}" | $Xsed -e "$lo2o"` +} + +# func_xform libobj-or-source +func_xform () +{ + func_xform_result=`$ECHO "X${1}" | $Xsed -e 's/\.[^.]*$/.lo/'` +} + +# func_arith arithmetic-term... +func_arith () +{ + func_arith_result=`expr "$@"` +} + +# func_len string +# STRING may not start with a hyphen. +func_len () +{ + func_len_result=`expr "$1" : ".*" 2>/dev/null || echo $max_cmd_len` +} + +_LT_EOF +esac + +case $lt_shell_append in + yes) + cat << \_LT_EOF >> "$cfgfile" + +# func_append var value +# Append VALUE to the end of shell variable VAR. +func_append () +{ + eval "$1+=\$2" +} +_LT_EOF + ;; + *) + cat << \_LT_EOF >> "$cfgfile" + +# func_append var value +# Append VALUE to the end of shell variable VAR. +func_append () +{ + eval "$1=\$$1\$2" +} + +_LT_EOF + ;; + esac + + + sed -n '/^# Generated shell functions inserted here/,$p' "$ltmain" >> "$cfgfile" \ + || (rm -f "$cfgfile"; exit 1) + + mv -f "$cfgfile" "$ofile" || + (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile") + chmod +x "$ofile" + + ;; + "po-directories":C) + for ac_file in $CONFIG_FILES; do + # Support "outfile[:infile[:infile...]]" + case "$ac_file" in + *:*) ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;; + esac + # PO directories have a Makefile.in generated from Makefile.in.in. + case "$ac_file" in */Makefile.in) + # Adjust a relative srcdir. + ac_dir=`echo "$ac_file"|sed 's%/[^/][^/]*$%%'` + ac_dir_suffix="/`echo "$ac_dir"|sed 's%^\./%%'`" + ac_dots=`echo "$ac_dir_suffix"|sed 's%/[^/]*%../%g'` + # In autoconf-2.13 it is called $ac_given_srcdir. + # In autoconf-2.50 it is called $srcdir. + test -n "$ac_given_srcdir" || ac_given_srcdir="$srcdir" + case "$ac_given_srcdir" in + .) top_srcdir=`echo $ac_dots|sed 's%/$%%'` ;; + /*) top_srcdir="$ac_given_srcdir" ;; + *) top_srcdir="$ac_dots$ac_given_srcdir" ;; + esac + # Treat a directory as a PO directory if and only if it has a + # POTFILES.in file. This allows packages to have multiple PO + # directories under different names or in different locations. + if test -f "$ac_given_srcdir/$ac_dir/POTFILES.in"; then + rm -f "$ac_dir/POTFILES" + test -n "$as_me" && echo "$as_me: creating $ac_dir/POTFILES" || echo "creating $ac_dir/POTFILES" + cat "$ac_given_srcdir/$ac_dir/POTFILES.in" | sed -e "/^#/d" -e "/^[ ]*\$/d" -e "s,.*, $top_srcdir/& \\\\," | sed -e "\$s/\(.*\) \\\\/\1/" > "$ac_dir/POTFILES" + POMAKEFILEDEPS="POTFILES.in" + # ALL_LINGUAS, POFILES, UPDATEPOFILES, DUMMYPOFILES, GMOFILES depend + # on $ac_dir but don't depend on user-specified configuration + # parameters. + if test -f "$ac_given_srcdir/$ac_dir/LINGUAS"; then + # The LINGUAS file contains the set of available languages. + if test -n "$OBSOLETE_ALL_LINGUAS"; then + test -n "$as_me" && echo "$as_me: setting ALL_LINGUAS in configure.in is obsolete" || echo "setting ALL_LINGUAS in configure.in is obsolete" + fi + ALL_LINGUAS_=`sed -e "/^#/d" -e "s/#.*//" "$ac_given_srcdir/$ac_dir/LINGUAS"` + # Hide the ALL_LINGUAS assigment from automake < 1.5. + eval 'ALL_LINGUAS''=$ALL_LINGUAS_' + POMAKEFILEDEPS="$POMAKEFILEDEPS LINGUAS" + else + # The set of available languages was given in configure.in. + # Hide the ALL_LINGUAS assigment from automake < 1.5. + eval 'ALL_LINGUAS''=$OBSOLETE_ALL_LINGUAS' + fi + # Compute POFILES + # as $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(lang).po) + # Compute UPDATEPOFILES + # as $(foreach lang, $(ALL_LINGUAS), $(lang).po-update) + # Compute DUMMYPOFILES + # as $(foreach lang, $(ALL_LINGUAS), $(lang).nop) + # Compute GMOFILES + # as $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(lang).gmo) + case "$ac_given_srcdir" in + .) srcdirpre= ;; + *) srcdirpre='$(srcdir)/' ;; + esac + POFILES= + UPDATEPOFILES= + DUMMYPOFILES= + GMOFILES= + for lang in $ALL_LINGUAS; do + POFILES="$POFILES $srcdirpre$lang.po" + UPDATEPOFILES="$UPDATEPOFILES $lang.po-update" + DUMMYPOFILES="$DUMMYPOFILES $lang.nop" + GMOFILES="$GMOFILES $srcdirpre$lang.gmo" + done + # CATALOGS depends on both $ac_dir and the user's LINGUAS + # environment variable. + INST_LINGUAS= + if test -n "$ALL_LINGUAS"; then + for presentlang in $ALL_LINGUAS; do + useit=no + if test "%UNSET%" != "$LINGUAS"; then + desiredlanguages="$LINGUAS" + else + desiredlanguages="$ALL_LINGUAS" + fi + for desiredlang in $desiredlanguages; do + # Use the presentlang catalog if desiredlang is + # a. equal to presentlang, or + # b. a variant of presentlang (because in this case, + # presentlang can be used as a fallback for messages + # which are not translated in the desiredlang catalog). + case "$desiredlang" in + "$presentlang"*) useit=yes;; + esac + done + if test $useit = yes; then + INST_LINGUAS="$INST_LINGUAS $presentlang" + fi + done + fi + CATALOGS= + if test -n "$INST_LINGUAS"; then + for lang in $INST_LINGUAS; do + CATALOGS="$CATALOGS $lang.gmo" + done + fi + test -n "$as_me" && echo "$as_me: creating $ac_dir/Makefile" || echo "creating $ac_dir/Makefile" + sed -e "/^POTFILES =/r $ac_dir/POTFILES" -e "/^# Makevars/r $ac_given_srcdir/$ac_dir/Makevars" -e "s|@POFILES@|$POFILES|g" -e "s|@UPDATEPOFILES@|$UPDATEPOFILES|g" -e "s|@DUMMYPOFILES@|$DUMMYPOFILES|g" -e "s|@GMOFILES@|$GMOFILES|g" -e "s|@CATALOGS@|$CATALOGS|g" -e "s|@POMAKEFILEDEPS@|$POMAKEFILEDEPS|g" "$ac_dir/Makefile.in" > "$ac_dir/Makefile" + for f in "$ac_given_srcdir/$ac_dir"/Rules-*; do + if test -f "$f"; then + case "$f" in + *.orig | *.bak | *~) ;; + *) cat "$f" >> "$ac_dir/Makefile" ;; + esac + fi + done + fi + ;; + esac + done ;; + + esac +done # for ac_tag + + +{ (exit 0); exit 0; } +_ACEOF +chmod +x $CONFIG_STATUS +ac_clean_files=$ac_clean_files_save + +test $ac_write_fail = 0 || + { { $as_echo "$as_me:$LINENO: error: write failure creating $CONFIG_STATUS" >&5 +$as_echo "$as_me: error: write failure creating $CONFIG_STATUS" >&2;} + { (exit 1); exit 1; }; } + + +# configure is writing to config.log, and then calls config.status. +# config.status does its own redirection, appending to config.log. +# Unfortunately, on DOS this fails, as config.log is still kept open +# by configure, so config.status won't be able to write to it; its +# output is simply discarded. So we exec the FD to /dev/null, +# effectively closing config.log, so it can be properly (re)opened and +# appended to by config.status. When coming back to configure, we +# need to make the FD available again. +if test "$no_create" != yes; then + ac_cs_success=: + ac_config_status_args= + test "$silent" = yes && + ac_config_status_args="$ac_config_status_args --quiet" + exec 5>/dev/null + $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false + exec 5>>config.log + # Use ||, not &&, to avoid exiting from the if with $? = 1, which + # would make configure fail if this is the last instruction. + $ac_cs_success || { (exit 1); exit 1; } +fi +if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then + { $as_echo "$as_me:$LINENO: WARNING: unrecognized options: $ac_unrecognized_opts" >&5 +$as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;} +fi + + +if test "$NSCD_LIB" == "" ; then + { $as_echo "$as_me:$LINENO: WARNING: libnscd not found, cannot flush nscd tables!" >&5 +$as_echo "$as_me: WARNING: libnscd not found, cannot flush nscd tables!" >&2;} +fi diff --git a/configure.in b/configure.in new file mode 100644 index 0000000..c6c3486 --- /dev/null +++ b/configure.in @@ -0,0 +1,341 @@ +dnl +dnl Copyright (c) 2001-2012 Thorsten Kukuk, Germany +dnl +dnl Author: Thorsten Kukuk +dnl +AC_INIT(src/passwd.c) +AM_INIT_AUTOMAKE("pwdutils", 3.2.19) +AM_CONFIG_HEADER(config.h) +AC_PREFIX_DEFAULT(/usr) +AC_CANONICAL_HOST + +AC_SUBST(PACKAGE) +AC_SUBST(VERSION) + +dnl Some hacks... +test "${prefix}" = "NONE" && prefix="/usr" +test "${exec_prefix}" = "NONE" && exec_prefix="/usr" + +if test ${prefix} = '/usr' +then +dnl If we use /usr as prefix, use /etc for config files + if test ${sysconfdir} = '${prefix}/etc' + then + sysconfdir="/etc" + fi +dnl If we use /usr as prefix, use /usr/share/man for manual pages + if test ${mandir} = '${prefix}/man' + then + mandir='${prefix}/share/man' + fi +fi +if test ${exec_prefix} = '/usr' +then +dnl Choose between lib and lib64 + if test ${libdir} = '${exec_prefix}/lib' + then + case "`uname -m`" in + x86_64|ppc64|s390x|sparc64) + libdir="${exec_prefix}/lib64" ;; + *) + libdir="${exec_prefix}/lib" ;; + esac + fi + +fi + +dnl Checks for programs. +AC_PROG_CC +AM_PROG_CC_C_O +AC_GNU_SOURCE +AC_ISC_POSIX +AC_PROG_INSTALL +AC_PROG_MAKE_SET +AC_PROG_LIBTOOL +AC_SYS_LARGEFILE + +EXTRA_CFLAGS="" +if eval "test x$GCC = xyes"; then + for flag in \ +-W -Wall -Wbad-function-cast -Wcast-align -Wcast-qual -Winline -Wmissing-declarations -Wmissing-prototypes -Wnested-externs -Wshadow -Wstrict-prototypes -Wundef -Wpointer-arith + do + JAPHAR_GREP_CFLAGS($flag, [ EXTRA_CFLAGS="$EXTRA_CFLAGS $flag" ]) + done +fi +AC_SUBST(EXTRA_CFLAGS) + +AC_ENABLE_STATIC([no]) +AC_ENABLE_SHARED([yes]) + +AC_CACHE_CHECK(for -fpie, libc_cv_fpie, [dnl + cat > conftest.c <&AS_MESSAGE_LOG_FD]) + then + libc_cv_fpie=yes + PIE_CFLAGS="-fpie" + PIE_LDFLAGS="-pie" + else + libc_cv_fpie=no + PIE_CFLAGS="" + PIE_LDFLAGS="" + fi + rm -f conftest*]) +AC_SUBST(libc_cv_fpie) +AC_SUBST(PIE_CFLAGS) +AC_SUBST(PIE_LDFLAGS) + +dnl allow linking against some debugging libraries +AM_WITH_DMALLOC + +dnl Should we build pam_rpasswd? +AC_ARG_ENABLE([pam_rpasswd], + AC_HELP_STRING([--enable-pam_rpasswd],[Enable build of pam_rpasswd])) +AM_CONDITIONAL(build_PAM_RPASSWD, test "$enable_pam_rpasswd" = "yes") + +dnl Should we compile with SELinux support? default: no +AC_ARG_ENABLE([selinux], + AC_HELP_STRING([--disable-selinux],[Disable SELinux support])) +AC_ARG_ENABLE([static-selinux], + AC_HELP_STRING([--enable-static-selinux], + [Compile in SELinux support static])) +if test "$enable_selinux" \!= "no" -a "$enable_static_selinux" = "yes" ; then + AC_CHECK_LIB(selinux,is_selinux_enabled, + [AC_DEFINE(WITH_SELINUX,1, + [Define if you want to compile in SELinux support]) + SELINUX_LIB="-Wl,-Bstatic -lselinux -Wl,-dy"], + [SELINUX_LIB=""]) +elif test "$enable_selinux" \!= "no" ; then + AC_CHECK_LIB(selinux,is_selinux_enabled, + [AC_DEFINE(WITH_SELINUX,1, + [Define if you want to compile in SELinux support]) + SELINUX_LIB="-lselinux"],[SELINUX_LIB=""]) +else + SELINUX_LIB="" +fi +AC_SUBST(SELINUX_LIB) + +dnl Check for SLP support for rpasswd/rpasswdd +AC_ARG_ENABLE([slp], + AC_HELP_STRING([--disable-slp],[Disable SLP support])) + +AC_CHECK_HEADERS([slp.h]) + +SLP_LIBS="" +if test "$enable_slp" \!= "no" +then + AC_CHECK_LIB(slp,SLPReg,SLP_LIBS="-lslp",SLP_LIBS="") + if test -n "$SLP_LIBS" -a x$ac_cv_header_slp_h != xno + then + AC_DEFINE(USE_SLP, 1, [Enable SLP support]) + fi +fi +AC_SUBST(SLP_LIBS) + +LAUS_LIBS="" +AC_ARG_ENABLE([laus-plugin], + AC_HELP_STRING([--disable-laus-plugin],[Disable build of LAuS plugin])) +if test "$enable_laus_plugin" \!= "no" +then + AC_CHECK_HEADER([laus.h], [ laus_header="yes" ], [ laus_header="no" ]) + if test "$laus_header" = "yes"; then + AC_CHECK_LIB(laus, laus_open, + AC_DEFINE(HAVE_LIBLAUS, 1, ["LAuS Support"]) [LAUS_LIBS="-llaus"]) + fi +fi +AC_SUBST(LAUS_LIBS) +AM_CONDITIONAL(build_LAUS_PLUGIN, test -n "$LAUS_LIBS") + +AUDIT_LIBS="" +AC_ARG_ENABLE([audit-plugin], + AC_HELP_STRING([--disable-audit-plugin],[Disable build of Linux audit plugin])) +if test "$enable_audit_plugin" \!= "no" +then + AC_CHECK_HEADER([libaudit.h], [audit_header="yes"], [audit_header="no"]) + if test "$audit_header" = "yes"; then + AC_CHECK_LIB(audit, audit_open, + AC_DEFINE(HAVE_LIBAUDIT, 1, ["Linux audit Support"]) [AUDIT_LIBS="-laudit"]) + fi +fi +AC_SUBST(AUDIT_LIBS) +AM_CONDITIONAL(build_AUDIT_PLUGIN, test -n "$AUDIT_LIBS") + +dnl Checks for libraries. +dnl BACKUP_LIBS, we wish to have -ldl extra. +BACKUP_LIBS=$LIBS +AC_CHECK_LIB(dl, dlopen, DL_LIBS="-ldl", DL_LIBS="") +AC_SUBST(DL_LIBS) +LIBS=$BACKUP_LIBS + +dnl BACKUP_LIBS, we wish to have PAM extra. +BACKUP_LIBS=$LIBS +AC_CHECK_LIB(pam, pam_start, PAM_LIBS="-lpam", PAM_LIBS="") +AC_CHECK_LIB(pam_misc, main, PAM_LIBS="-lpam_misc $PAM_LIBS", PAM_LIBS="$PAM_LIBS", $PAM_LIBS) +if test -z "$PAM_LIBS"; then + echo PAM libraries are required for compiling this package! + exit 1 +fi +AC_SUBST(PAM_LIBS) +LIBS=$BACKUP_LIBS +AC_CHECK_LIB(nsl, yp_get_default_domain, NSL_LIB="-lnsl", NSL_LIB="") +AC_SUBST(NSL_LIB) +dnl Backup LIBS, AC_SEARCH_LIBS will append the library always to LIBS. +BACKUP_LIBS=$LIBS +AC_SEARCH_LIBS([crypt],[xcrypt crypt], CRYPT_LIB="-l$ac_lib", CRYPT_LIB="") +LIBS=$BACKUP_LIBS +AC_SUBST(CRYPT_LIB) +AC_CHECK_HEADERS([xcrypt.h crypt.h],[break]) +dnl Save old LIBS variable and add crypt library +BACKUP_LIBS=$LIBS +LIBS="$LIBS $CRYPT_LIB" +dnl Function check for blowfish crypt +AC_CHECK_FUNCS(crypt crypt_r xcrypt_gensalt_r) +dnl restore old LIBS variable +LIBS=$BACKUP_LIBS + +AC_CHECK_HEADERS([sys/xattr.h attr/xattr.h],[break]) +if test x$ac_cv_header_attr_xattr_h = xyes +then + AC_CHECK_LIB(attr, main, ATTR_LIB="-lattr", ATTR_LIB="") +else + ATTR_LIB="" +fi +AC_SUBST(ATTR_LIB) +BACKUP_LIBS=$LIBS +LIBS="$LIBS $ATTR_LIB" +AC_CHECK_FUNCS(llistxattr lgetxattr lsetxattr) +LIBS=$BACKUP_LIBS + +AM_FUNC_GETLINE +if test $am_cv_func_working_getline != yes; then + AC_CHECK_FUNCS(getdelim) +else + AC_CHECK_FUNCS(getline) +fi + +# Check if we should build with GnuSSL support. +TLS_LIBS="" +AC_ARG_ENABLE(ssl, [ --disable-gnutls disable GnuTLS support]) +if test "$enable_gnutls" \!= "no" ; then + AC_CHECK_LIB(gnutls, gnutls_init, TLS_LIBS="-lgnutls", TLS_LIBS="") +fi + +if test -z "$TLS_LIBS" ; then + # Check if we should build with OpenSSL support. + SSL_LIBS="" + AC_ARG_ENABLE(ssl, [ --disable-ssl disable SSL/TSL support]) + if test "$enable_ssl" \!= "no"; then + AC_CHECK_LIB(ssl, SSL_connect, SSL_LIBS="-lssl -lcrypto", AC_MSG_ERROR([OpenSSL or GnuTLS are required])) + AC_SUBST(SSL_LIBS) + fi + TLS_LIBS=$SSL_LIBS +else + AC_DEFINE(USE_GNUTLS, 1, [Enable GnuTLS support]) + BACKUP_LIBS=$LIBS + LIBS="$LIBS $TLS_LIBS" + AC_CHECK_FUNCS(gnutls_certificate_verify_peers2 gnutls_pk_algorithm_get_name) + LIBS="$BACKUP_LIBS" +fi +AC_SUBST(TLS_LIBS) + + +AC_ARG_ENABLE(ldap, [ --disable-ldap disable LDAP support]) +AC_ARG_WITH(ldap-lib, [ --with-ldap-lib=type select ldap library [auto|netscape5|netscape4|netscape3|umich|openldap]]) +AC_ARG_WITH(ldap-dir, [ --with-ldap-dir=DIR base directory of ldap SDK]) +AC_ARG_WITH(ldap-conf-file, [ --with-ldap-conf-file path to LDAP configuration file], [AC_DEFINE_UNQUOTED(LDAP_PATH_CONF, "$with_ldap_conf_file", [Path to ldap.conf file])], [AC_DEFINE_UNQUOTED(LDAP_PATH_CONF, "/etc/ldap.conf")]) +AC_ARG_WITH(ldap-secret-file, [ --with-ldap-secret-file path to LDAP root secret file], [AC_DEFINE_UNQUOTED(LDAP_PATH_ROOTPASSWD, "$with_ldap_secret_file",[Path to ldap.secrets file])], [AC_DEFINE_UNQUOTED(LDAP_PATH_ROOTPASSWD, "/etc/ldap.secret")]) + +if test "$enable_ldap" \!= "no"; then + AC_DEFINE(USE_LDAP, 1, [Enable LDAP support]) + + AC_CHECK_HEADERS(lber.h) + AC_CHECK_HEADERS(ldap.h, , AC_MSG_ERROR(could not locate )) + AC_CHECK_HEADERS(ldap_ssl.h) + + dnl check which ldap library we have + if test -z "$with_ldap_lib"; then + with_ldap_lib=auto + fi + + dnl from the pam_ldap configure script + if test -z "$found_ldap_lib" -a \( $with_ldap_lib = auto -o $with_ldap_lib = umich -o $with_ldap_lib = openldap \); then + AC_CHECK_LIB(lber, main, LDAP_LIBS="-llber") + AC_CHECK_LIB(ldap, main, LDAP_LIBS="-lldap $LDAP_LIBS" found_ldap_lib=yes,,$LDAP_LIBS) + fi + + if test -z "$found_ldap_lib" -a \( $with_ldap_lib = auto -o $with_ldap_lib = netscape5 \); then + AC_CHECK_LIB(ldap50, main, LDAP_LIBS="-lldap50 -lssldap50 -lssl3 -lnss3 -lnspr4 -lprldap50 -lplc4 -lplds4" found_ldap_lib=yes need_pthread=true,, -lpthread) + fi + if test -z "$found_ldap_lib" -a \( $with_ldap_lib = auto -o $with_ldap_lib = netscape4 \); then + AC_CHECK_LIB(ldapssl41, main, LDAP_LIBS="-lldapssl41 -lplc3 -lplds3 -lnspr3" found_ldap_lib=yes need_pthread=true,, -lpthread) + if test -z "$found_ldap_lib"; then + AC_CHECK_LIB(ldapssl40, main, LDAP_LIBS="-lldapssl40" found_ldap_lib=yes need_pthread=true,, -lpthread) + fi + fi + if test -z "$found_ldap_lib" -a \( $with_ldap_lib = auto -o $with_ldap_lib = netscape3 \); then + AC_CHECK_LIB(ldapssl30, main, LDAP_LIBS="-lldapssl30" found_ldap_lib=yes need_pthread=true,, -lpthread) + fi + if test -z "$found_ldap_lib"; then + AC_MSG_ERROR(could not locate a valid LDAP library) + fi + AC_SUBST(LDAP_LIBS) + if test "$need_pthread" = "true"; then + AC_CHECK_LIB(pthread, main) + fi + + dnl Save old LIBS variable and add LDAP libraries + BACKUP_LIBS=$LIBS + LIBS="$LDAP_LIBS $LIBS" + + AC_CHECK_FUNCS(ldap_init ldap_get_lderrno ldap_parse_result ldap_memfree ldap_controls_free ldap_set_option ldap_get_option) + if test "$enable_ssl" \!= "no"; then + AC_CHECK_FUNCS(ldapssl_init ldap_start_tls_s ldap_pvt_tls_set_option) + fi + AC_CHECK_FUNCS(ldap_initialize) + + AC_CHECK_FUNCS(ldap_set_rebind_proc) + AC_CACHE_CHECK(whether ldap_set_rebind_proc takes 3 arguments, pam_ldap_cv_ldap_set_rebind_proc, [ + AC_TRY_COMPILE([ +#include +#include ], [ldap_set_rebind_proc(0, 0, 0);], [pam_ldap_cv_ldap_set_rebind_proc=3], [pam_ldap_cv_ldap_set_rebind_proc=2]) ]) + AC_DEFINE_UNQUOTED(LDAP_SET_REBIND_PROC_ARGS, $pam_ldap_cv_ldap_set_rebind_proc, ["Define to the number of arguments to ldap_set_rebindproc"]) + + dnl restore old LIBS variable + LIBS=$BACKUP_LIBS +else + AC_CHECK_LIB(dl,dlopen, + [LDAP_LIBS="-ldl"], + [LDAP_LIBS=""]) + AC_SUBST(LDAP_LIBS) +fi + +AC_CHECK_HEADERS(libnscd.h) +AC_CHECK_LIB(nscd,nscd_flush_cache, NSCD_LIB="-lnscd", NSCD_LIB="") +AC_SUBST(NSCD_LIB) +BACKUP_LIBS=$LIBS +LIBS="$LIBS $NSCD_LIB" +AC_CHECK_FUNCS(nscd_flush_cache) +LIBS=$BACKUP_LIBS + +dnl internationalization macros +AM_GNU_GETTEXT_VERSION +AM_GNU_GETTEXT([external]) + +AC_CHECK_HEADERS(dirent.h) + +AC_CHECK_FUNCS(getusershell strftime) + +dnl Check for BioAPI interface +AC_DEFINE([UNIX], [], [Define UNIX for BioAPI]) +AC_CHECK_HEADERS(bioapi.h bioapi_util.h) +AC_CHECK_LIB([bioapi100], [BioAPI_Init], BIOAPI_LIB="-lbioapi100", BIOAPI_LIB="") +AC_SUBST(BIOAPI_LIB) + +AC_OUTPUT(Makefile etc/Makefile lib/Makefile src/Makefile plugins/Makefile po/Makefile.in m4/Makefile ) + +if test "$NSCD_LIB" == "" ; then + AC_MSG_WARN([libnscd not found, cannot flush nscd tables!]) +fi diff --git a/depcomp b/depcomp new file mode 100755 index 0000000..04701da --- /dev/null +++ b/depcomp @@ -0,0 +1,530 @@ +#! /bin/sh +# depcomp - compile a program generating dependencies as side-effects + +scriptversion=2005-07-09.11 + +# Copyright (C) 1999, 2000, 2003, 2004, 2005 Free Software Foundation, 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, 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. + +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that program. + +# Originally written by Alexandre Oliva . + +case $1 in + '') + echo "$0: No command. Try \`$0 --help' for more information." 1>&2 + exit 1; + ;; + -h | --h*) + cat <<\EOF +Usage: depcomp [--help] [--version] PROGRAM [ARGS] + +Run PROGRAMS ARGS to compile a file, generating dependencies +as side-effects. + +Environment variables: + depmode Dependency tracking mode. + source Source file read by `PROGRAMS ARGS'. + object Object file output by `PROGRAMS ARGS'. + DEPDIR directory where to store dependencies. + depfile Dependency file to output. + tmpdepfile Temporary file to use when outputing dependencies. + libtool Whether libtool is used (yes/no). + +Report bugs to . +EOF + exit $? + ;; + -v | --v*) + echo "depcomp $scriptversion" + exit $? + ;; +esac + +if test -z "$depmode" || test -z "$source" || test -z "$object"; then + echo "depcomp: Variables source, object and depmode must be set" 1>&2 + exit 1 +fi + +# Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po. +depfile=${depfile-`echo "$object" | + sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`} +tmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`} + +rm -f "$tmpdepfile" + +# Some modes work just like other modes, but use different flags. We +# parameterize here, but still list the modes in the big case below, +# to make depend.m4 easier to write. Note that we *cannot* use a case +# here, because this file can only contain one case statement. +if test "$depmode" = hp; then + # HP compiler uses -M and no extra arg. + gccflag=-M + depmode=gcc +fi + +if test "$depmode" = dashXmstdout; then + # This is just like dashmstdout with a different argument. + dashmflag=-xM + depmode=dashmstdout +fi + +case "$depmode" in +gcc3) +## gcc 3 implements dependency tracking that does exactly what +## we want. Yay! Note: for some reason libtool 1.4 doesn't like +## it if -MD -MP comes after the -MF stuff. Hmm. + "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" + stat=$? + if test $stat -eq 0; then : + else + rm -f "$tmpdepfile" + exit $stat + fi + mv "$tmpdepfile" "$depfile" + ;; + +gcc) +## There are various ways to get dependency output from gcc. Here's +## why we pick this rather obscure method: +## - Don't want to use -MD because we'd like the dependencies to end +## up in a subdir. Having to rename by hand is ugly. +## (We might end up doing this anyway to support other compilers.) +## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like +## -MM, not -M (despite what the docs say). +## - Using -M directly means running the compiler twice (even worse +## than renaming). + if test -z "$gccflag"; then + gccflag=-MD, + fi + "$@" -Wp,"$gccflag$tmpdepfile" + stat=$? + if test $stat -eq 0; then : + else + rm -f "$tmpdepfile" + exit $stat + fi + rm -f "$depfile" + echo "$object : \\" > "$depfile" + alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz +## The second -e expression handles DOS-style file names with drive letters. + sed -e 's/^[^:]*: / /' \ + -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile" +## This next piece of magic avoids the `deleted header file' problem. +## The problem is that when a header file which appears in a .P file +## is deleted, the dependency causes make to die (because there is +## typically no way to rebuild the header). We avoid this by adding +## dummy dependencies for each header file. Too bad gcc doesn't do +## this for us directly. + tr ' ' ' +' < "$tmpdepfile" | +## Some versions of gcc put a space before the `:'. On the theory +## that the space means something, we add a space to the output as +## well. +## Some versions of the HPUX 10.20 sed can't process this invocation +## correctly. Breaking it into two sed invocations is a workaround. + sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" + rm -f "$tmpdepfile" + ;; + +hp) + # This case exists only to let depend.m4 do its work. It works by + # looking at the text of this script. This case will never be run, + # since it is checked for above. + exit 1 + ;; + +sgi) + if test "$libtool" = yes; then + "$@" "-Wp,-MDupdate,$tmpdepfile" + else + "$@" -MDupdate "$tmpdepfile" + fi + stat=$? + if test $stat -eq 0; then : + else + rm -f "$tmpdepfile" + exit $stat + fi + rm -f "$depfile" + + if test -f "$tmpdepfile"; then # yes, the sourcefile depend on other files + echo "$object : \\" > "$depfile" + + # Clip off the initial element (the dependent). Don't try to be + # clever and replace this with sed code, as IRIX sed won't handle + # lines with more than a fixed number of characters (4096 in + # IRIX 6.2 sed, 8192 in IRIX 6.5). We also remove comment lines; + # the IRIX cc adds comments like `#:fec' to the end of the + # dependency line. + tr ' ' ' +' < "$tmpdepfile" \ + | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \ + tr ' +' ' ' >> $depfile + echo >> $depfile + + # The second pass generates a dummy entry for each header file. + tr ' ' ' +' < "$tmpdepfile" \ + | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \ + >> $depfile + else + # The sourcefile does not contain any dependencies, so just + # store a dummy comment line, to avoid errors with the Makefile + # "include basename.Plo" scheme. + echo "#dummy" > "$depfile" + fi + rm -f "$tmpdepfile" + ;; + +aix) + # The C for AIX Compiler uses -M and outputs the dependencies + # in a .u file. In older versions, this file always lives in the + # current directory. Also, the AIX compiler puts `$object:' at the + # start of each line; $object doesn't have directory information. + # Version 6 uses the directory in both cases. + stripped=`echo "$object" | sed 's/\(.*\)\..*$/\1/'` + tmpdepfile="$stripped.u" + if test "$libtool" = yes; then + "$@" -Wc,-M + else + "$@" -M + fi + stat=$? + + if test -f "$tmpdepfile"; then : + else + stripped=`echo "$stripped" | sed 's,^.*/,,'` + tmpdepfile="$stripped.u" + fi + + if test $stat -eq 0; then : + else + rm -f "$tmpdepfile" + exit $stat + fi + + if test -f "$tmpdepfile"; then + outname="$stripped.o" + # Each line is of the form `foo.o: dependent.h'. + # Do two passes, one to just change these to + # `$object: dependent.h' and one to simply `dependent.h:'. + sed -e "s,^$outname:,$object :," < "$tmpdepfile" > "$depfile" + sed -e "s,^$outname: \(.*\)$,\1:," < "$tmpdepfile" >> "$depfile" + else + # The sourcefile does not contain any dependencies, so just + # store a dummy comment line, to avoid errors with the Makefile + # "include basename.Plo" scheme. + echo "#dummy" > "$depfile" + fi + rm -f "$tmpdepfile" + ;; + +icc) + # Intel's C compiler understands `-MD -MF file'. However on + # icc -MD -MF foo.d -c -o sub/foo.o sub/foo.c + # ICC 7.0 will fill foo.d with something like + # foo.o: sub/foo.c + # foo.o: sub/foo.h + # which is wrong. We want: + # sub/foo.o: sub/foo.c + # sub/foo.o: sub/foo.h + # sub/foo.c: + # sub/foo.h: + # ICC 7.1 will output + # foo.o: sub/foo.c sub/foo.h + # and will wrap long lines using \ : + # foo.o: sub/foo.c ... \ + # sub/foo.h ... \ + # ... + + "$@" -MD -MF "$tmpdepfile" + stat=$? + if test $stat -eq 0; then : + else + rm -f "$tmpdepfile" + exit $stat + fi + rm -f "$depfile" + # Each line is of the form `foo.o: dependent.h', + # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'. + # Do two passes, one to just change these to + # `$object: dependent.h' and one to simply `dependent.h:'. + sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile" + # Some versions of the HPUX 10.20 sed can't process this invocation + # correctly. Breaking it into two sed invocations is a workaround. + sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" | + sed -e 's/$/ :/' >> "$depfile" + rm -f "$tmpdepfile" + ;; + +tru64) + # The Tru64 compiler uses -MD to generate dependencies as a side + # effect. `cc -MD -o foo.o ...' puts the dependencies into `foo.o.d'. + # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put + # dependencies in `foo.d' instead, so we check for that too. + # Subdirectories are respected. + dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` + test "x$dir" = "x$object" && dir= + base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` + + if test "$libtool" = yes; then + # With Tru64 cc, shared objects can also be used to make a + # static library. This mecanism is used in libtool 1.4 series to + # handle both shared and static libraries in a single compilation. + # With libtool 1.4, dependencies were output in $dir.libs/$base.lo.d. + # + # With libtool 1.5 this exception was removed, and libtool now + # generates 2 separate objects for the 2 libraries. These two + # compilations output dependencies in in $dir.libs/$base.o.d and + # in $dir$base.o.d. We have to check for both files, because + # one of the two compilations can be disabled. We should prefer + # $dir$base.o.d over $dir.libs/$base.o.d because the latter is + # automatically cleaned when .libs/ is deleted, while ignoring + # the former would cause a distcleancheck panic. + tmpdepfile1=$dir.libs/$base.lo.d # libtool 1.4 + tmpdepfile2=$dir$base.o.d # libtool 1.5 + tmpdepfile3=$dir.libs/$base.o.d # libtool 1.5 + tmpdepfile4=$dir.libs/$base.d # Compaq CCC V6.2-504 + "$@" -Wc,-MD + else + tmpdepfile1=$dir$base.o.d + tmpdepfile2=$dir$base.d + tmpdepfile3=$dir$base.d + tmpdepfile4=$dir$base.d + "$@" -MD + fi + + stat=$? + if test $stat -eq 0; then : + else + rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4" + exit $stat + fi + + for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4" + do + test -f "$tmpdepfile" && break + done + if test -f "$tmpdepfile"; then + sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile" + # That's a tab and a space in the []. + sed -e 's,^.*\.[a-z]*:[ ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile" + else + echo "#dummy" > "$depfile" + fi + rm -f "$tmpdepfile" + ;; + +#nosideeffect) + # This comment above is used by automake to tell side-effect + # dependency tracking mechanisms from slower ones. + +dashmstdout) + # Important note: in order to support this mode, a compiler *must* + # always write the preprocessed file to stdout, regardless of -o. + "$@" || exit $? + + # Remove the call to Libtool. + if test "$libtool" = yes; then + while test $1 != '--mode=compile'; do + shift + done + shift + fi + + # Remove `-o $object'. + IFS=" " + for arg + do + case $arg in + -o) + shift + ;; + $object) + shift + ;; + *) + set fnord "$@" "$arg" + shift # fnord + shift # $arg + ;; + esac + done + + test -z "$dashmflag" && dashmflag=-M + # Require at least two characters before searching for `:' + # in the target name. This is to cope with DOS-style filenames: + # a dependency such as `c:/foo/bar' could be seen as target `c' otherwise. + "$@" $dashmflag | + sed 's:^[ ]*[^: ][^:][^:]*\:[ ]*:'"$object"'\: :' > "$tmpdepfile" + rm -f "$depfile" + cat < "$tmpdepfile" > "$depfile" + tr ' ' ' +' < "$tmpdepfile" | \ +## Some versions of the HPUX 10.20 sed can't process this invocation +## correctly. Breaking it into two sed invocations is a workaround. + sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" + rm -f "$tmpdepfile" + ;; + +dashXmstdout) + # This case only exists to satisfy depend.m4. It is never actually + # run, as this mode is specially recognized in the preamble. + exit 1 + ;; + +makedepend) + "$@" || exit $? + # Remove any Libtool call + if test "$libtool" = yes; then + while test $1 != '--mode=compile'; do + shift + done + shift + fi + # X makedepend + shift + cleared=no + for arg in "$@"; do + case $cleared in + no) + set ""; shift + cleared=yes ;; + esac + case "$arg" in + -D*|-I*) + set fnord "$@" "$arg"; shift ;; + # Strip any option that makedepend may not understand. Remove + # the object too, otherwise makedepend will parse it as a source file. + -*|$object) + ;; + *) + set fnord "$@" "$arg"; shift ;; + esac + done + obj_suffix="`echo $object | sed 's/^.*\././'`" + touch "$tmpdepfile" + ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@" + rm -f "$depfile" + cat < "$tmpdepfile" > "$depfile" + sed '1,2d' "$tmpdepfile" | tr ' ' ' +' | \ +## Some versions of the HPUX 10.20 sed can't process this invocation +## correctly. Breaking it into two sed invocations is a workaround. + sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" + rm -f "$tmpdepfile" "$tmpdepfile".bak + ;; + +cpp) + # Important note: in order to support this mode, a compiler *must* + # always write the preprocessed file to stdout. + "$@" || exit $? + + # Remove the call to Libtool. + if test "$libtool" = yes; then + while test $1 != '--mode=compile'; do + shift + done + shift + fi + + # Remove `-o $object'. + IFS=" " + for arg + do + case $arg in + -o) + shift + ;; + $object) + shift + ;; + *) + set fnord "$@" "$arg" + shift # fnord + shift # $arg + ;; + esac + done + + "$@" -E | + sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \ + -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' | + sed '$ s: \\$::' > "$tmpdepfile" + rm -f "$depfile" + echo "$object : \\" > "$depfile" + cat < "$tmpdepfile" >> "$depfile" + sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile" + rm -f "$tmpdepfile" + ;; + +msvisualcpp) + # Important note: in order to support this mode, a compiler *must* + # always write the preprocessed file to stdout, regardless of -o, + # because we must use -o when running libtool. + "$@" || exit $? + IFS=" " + for arg + do + case "$arg" in + "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI") + set fnord "$@" + shift + shift + ;; + *) + set fnord "$@" "$arg" + shift + shift + ;; + esac + done + "$@" -E | + sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::echo "`cygpath -u \\"\1\\"`":p' | sort | uniq > "$tmpdepfile" + rm -f "$depfile" + echo "$object : \\" > "$depfile" + . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s:: \1 \\:p' >> "$depfile" + echo " " >> "$depfile" + . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s::\1\::p' >> "$depfile" + rm -f "$tmpdepfile" + ;; + +none) + exec "$@" + ;; + +*) + echo "Unknown depmode $depmode" 1>&2 + exit 1 + ;; +esac + +exit 0 + +# Local Variables: +# mode: shell-script +# sh-indentation: 2 +# eval: (add-hook 'write-file-hooks 'time-stamp) +# time-stamp-start: "scriptversion=" +# time-stamp-format: "%:y-%02m-%02d.%02H" +# time-stamp-end: "$" +# End: diff --git a/etc/Makefile.am b/etc/Makefile.am new file mode 100644 index 0000000..78ab652 --- /dev/null +++ b/etc/Makefile.am @@ -0,0 +1,33 @@ +# +# Copyright (c) 2003-2005 Thorsten Kukuk, Germany +# +# Author: Thorsten Kukuk +# +AUTOMAKE_OPTIONS = 1.8 gnits +MAINT_CHARSET = latin1 +# +CLEANFILES = *~ */*~ +# +EXTRA_DIST = ${SCRIPTS} ${DATA} ${MANS} + +initddir = ${sysconfdir}/init.d +pamddir = ${sysconfdir}/pam.d +defaultdir = ${sysconfdir}/default +pwdutilsdir = ${sysconfdir}/pwdutils + +initd_SCRIPTS = init.d/rpasswdd + +sysconf_DATA = login.defs rpasswd.conf + +default_DATA = default/useradd default/passwd + +pwdutils_DATA = pwdutils/logging + +pamd_DATA = pam.d/chage pam.d/chfn pam.d/chsh pam.d/passwd \ + pam.d/rpasswd pam.d/useradd pam.d/shadow + +man_MANS = login.defs.5 + +sbin_SCRIPTS = useradd.local userdel-pre.local userdel-post.local \ + groupadd.local + diff --git a/etc/Makefile.in b/etc/Makefile.in new file mode 100644 index 0000000..75b5c25 --- /dev/null +++ b/etc/Makefile.in @@ -0,0 +1,613 @@ +# Makefile.in generated by automake 1.10.1 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + + +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +subdir = etc +DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/m4/getline.m4 \ + $(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/iconv.m4 \ + $(top_srcdir)/m4/isc-posix.m4 \ + $(top_srcdir)/m4/japhar_grep_cflags.m4 \ + $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \ + $(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libtool.m4 \ + $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ + $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ + $(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \ + $(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.in +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +am__installdirs = "$(DESTDIR)$(initddir)" "$(DESTDIR)$(sbindir)" \ + "$(DESTDIR)$(man5dir)" "$(DESTDIR)$(defaultdir)" \ + "$(DESTDIR)$(pamddir)" "$(DESTDIR)$(pwdutilsdir)" \ + "$(DESTDIR)$(sysconfdir)" +initdSCRIPT_INSTALL = $(INSTALL_SCRIPT) +sbinSCRIPT_INSTALL = $(INSTALL_SCRIPT) +SCRIPTS = $(initd_SCRIPTS) $(sbin_SCRIPTS) +SOURCES = +DIST_SOURCES = +man5dir = $(mandir)/man5 +NROFF = nroff +MANS = $(man_MANS) +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = `echo $$p | sed -e 's|^.*/||'`; +defaultDATA_INSTALL = $(INSTALL_DATA) +pamdDATA_INSTALL = $(INSTALL_DATA) +pwdutilsDATA_INSTALL = $(INSTALL_DATA) +sysconfDATA_INSTALL = $(INSTALL_DATA) +DATA = $(default_DATA) $(pamd_DATA) $(pwdutils_DATA) $(sysconf_DATA) +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +AMTAR = @AMTAR@ +AR = @AR@ +ATTR_LIB = @ATTR_LIB@ +AUDIT_LIBS = @AUDIT_LIBS@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +BIOAPI_LIB = @BIOAPI_LIB@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CRYPT_LIB = @CRYPT_LIB@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DL_LIBS = @DL_LIBS@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +EXTRA_CFLAGS = @EXTRA_CFLAGS@ +FGREP = @FGREP@ +GMSGFMT = @GMSGFMT@ +GMSGFMT_015 = @GMSGFMT_015@ +GREP = @GREP@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +INTLLIBS = @INTLLIBS@ +INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ +LAUS_LIBS = @LAUS_LIBS@ +LD = @LD@ +LDAP_LIBS = @LDAP_LIBS@ +LDFLAGS = @LDFLAGS@ +LIBICONV = @LIBICONV@ +LIBINTL = @LIBINTL@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBICONV = @LTLIBICONV@ +LTLIBINTL = @LTLIBINTL@ +LTLIBOBJS = @LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +MKDIR_P = @MKDIR_P@ +MSGFMT = @MSGFMT@ +MSGFMT_015 = @MSGFMT_015@ +MSGMERGE = @MSGMERGE@ +NM = @NM@ +NMEDIT = @NMEDIT@ +NSCD_LIB = @NSCD_LIB@ +NSL_LIB = @NSL_LIB@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PAM_LIBS = @PAM_LIBS@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PIE_CFLAGS = @PIE_CFLAGS@ +PIE_LDFLAGS = @PIE_LDFLAGS@ +POSUB = @POSUB@ +RANLIB = @RANLIB@ +SED = @SED@ +SELINUX_LIB = @SELINUX_LIB@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +SLP_LIBS = @SLP_LIBS@ +SSL_LIBS = @SSL_LIBS@ +STRIP = @STRIP@ +TLS_LIBS = @TLS_LIBS@ +USE_NLS = @USE_NLS@ +VERSION = @VERSION@ +XGETTEXT = @XGETTEXT@ +XGETTEXT_015 = @XGETTEXT_015@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libc_cv_fpie = @libc_cv_fpie@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +lt_ECHO = @lt_ECHO@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ + +# +# Copyright (c) 2003-2005 Thorsten Kukuk, Germany +# +# Author: Thorsten Kukuk +# +AUTOMAKE_OPTIONS = 1.8 gnits +MAINT_CHARSET = latin1 +# +CLEANFILES = *~ */*~ +# +EXTRA_DIST = ${SCRIPTS} ${DATA} ${MANS} +initddir = ${sysconfdir}/init.d +pamddir = ${sysconfdir}/pam.d +defaultdir = ${sysconfdir}/default +pwdutilsdir = ${sysconfdir}/pwdutils +initd_SCRIPTS = init.d/rpasswdd +sysconf_DATA = login.defs rpasswd.conf +default_DATA = default/useradd default/passwd +pwdutils_DATA = pwdutils/logging +pamd_DATA = pam.d/chage pam.d/chfn pam.d/chsh pam.d/passwd \ + pam.d/rpasswd pam.d/useradd pam.d/shadow + +man_MANS = login.defs.5 +sbin_SCRIPTS = useradd.local userdel-pre.local userdel-post.local \ + groupadd.local + +all: all-am + +.SUFFIXES: +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ + && exit 0; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnits etc/Makefile'; \ + cd $(top_srcdir) && \ + $(AUTOMAKE) --gnits etc/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +install-initdSCRIPTS: $(initd_SCRIPTS) + @$(NORMAL_INSTALL) + test -z "$(initddir)" || $(MKDIR_P) "$(DESTDIR)$(initddir)" + @list='$(initd_SCRIPTS)'; for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + if test -f $$d$$p; then \ + f=`echo "$$p" | sed 's|^.*/||;$(transform)'`; \ + echo " $(initdSCRIPT_INSTALL) '$$d$$p' '$(DESTDIR)$(initddir)/$$f'"; \ + $(initdSCRIPT_INSTALL) "$$d$$p" "$(DESTDIR)$(initddir)/$$f"; \ + else :; fi; \ + done + +uninstall-initdSCRIPTS: + @$(NORMAL_UNINSTALL) + @list='$(initd_SCRIPTS)'; for p in $$list; do \ + f=`echo "$$p" | sed 's|^.*/||;$(transform)'`; \ + echo " rm -f '$(DESTDIR)$(initddir)/$$f'"; \ + rm -f "$(DESTDIR)$(initddir)/$$f"; \ + done + +installcheck-initdSCRIPTS: $(initd_SCRIPTS) + bad=0; pid=$$$$; list="$(initd_SCRIPTS)"; for p in $$list; do \ + case ' $(AM_INSTALLCHECK_STD_OPTIONS_EXEMPT) ' in \ + *" $$p "* | *" $(srcdir)/$$p "*) continue;; \ + esac; \ + f=`echo "$$p" | sed 's,^.*/,,;$(transform)'`; \ + for opt in --help --version; do \ + if "$(DESTDIR)$(initddir)/$$f" $$opt >c$${pid}_.out \ + 2>c$${pid}_.err &2; bad=1; fi; \ + done; \ + done; rm -f c$${pid}_.???; exit $$bad +install-sbinSCRIPTS: $(sbin_SCRIPTS) + @$(NORMAL_INSTALL) + test -z "$(sbindir)" || $(MKDIR_P) "$(DESTDIR)$(sbindir)" + @list='$(sbin_SCRIPTS)'; for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + if test -f $$d$$p; then \ + f=`echo "$$p" | sed 's|^.*/||;$(transform)'`; \ + echo " $(sbinSCRIPT_INSTALL) '$$d$$p' '$(DESTDIR)$(sbindir)/$$f'"; \ + $(sbinSCRIPT_INSTALL) "$$d$$p" "$(DESTDIR)$(sbindir)/$$f"; \ + else :; fi; \ + done + +uninstall-sbinSCRIPTS: + @$(NORMAL_UNINSTALL) + @list='$(sbin_SCRIPTS)'; for p in $$list; do \ + f=`echo "$$p" | sed 's|^.*/||;$(transform)'`; \ + echo " rm -f '$(DESTDIR)$(sbindir)/$$f'"; \ + rm -f "$(DESTDIR)$(sbindir)/$$f"; \ + done + +installcheck-sbinSCRIPTS: $(sbin_SCRIPTS) + bad=0; pid=$$$$; list="$(sbin_SCRIPTS)"; for p in $$list; do \ + case ' $(AM_INSTALLCHECK_STD_OPTIONS_EXEMPT) ' in \ + *" $$p "* | *" $(srcdir)/$$p "*) continue;; \ + esac; \ + f=`echo "$$p" | sed 's,^.*/,,;$(transform)'`; \ + for opt in --help --version; do \ + if "$(DESTDIR)$(sbindir)/$$f" $$opt >c$${pid}_.out \ + 2>c$${pid}_.err &2; bad=1; fi; \ + done; \ + done; rm -f c$${pid}_.???; exit $$bad + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs +install-man5: $(man5_MANS) $(man_MANS) + @$(NORMAL_INSTALL) + test -z "$(man5dir)" || $(MKDIR_P) "$(DESTDIR)$(man5dir)" + @list='$(man5_MANS) $(dist_man5_MANS) $(nodist_man5_MANS)'; \ + l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \ + for i in $$l2; do \ + case "$$i" in \ + *.5*) list="$$list $$i" ;; \ + esac; \ + done; \ + for i in $$list; do \ + if test -f $(srcdir)/$$i; then file=$(srcdir)/$$i; \ + else file=$$i; fi; \ + ext=`echo $$i | sed -e 's/^.*\\.//'`; \ + case "$$ext" in \ + 5*) ;; \ + *) ext='5' ;; \ + esac; \ + inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \ + inst=`echo $$inst | sed -e 's/^.*\///'`; \ + inst=`echo $$inst | sed '$(transform)'`.$$ext; \ + echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man5dir)/$$inst'"; \ + $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man5dir)/$$inst"; \ + done +uninstall-man5: + @$(NORMAL_UNINSTALL) + @list='$(man5_MANS) $(dist_man5_MANS) $(nodist_man5_MANS)'; \ + l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \ + for i in $$l2; do \ + case "$$i" in \ + *.5*) list="$$list $$i" ;; \ + esac; \ + done; \ + for i in $$list; do \ + ext=`echo $$i | sed -e 's/^.*\\.//'`; \ + case "$$ext" in \ + 5*) ;; \ + *) ext='5' ;; \ + esac; \ + inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \ + inst=`echo $$inst | sed -e 's/^.*\///'`; \ + inst=`echo $$inst | sed '$(transform)'`.$$ext; \ + echo " rm -f '$(DESTDIR)$(man5dir)/$$inst'"; \ + rm -f "$(DESTDIR)$(man5dir)/$$inst"; \ + done +install-defaultDATA: $(default_DATA) + @$(NORMAL_INSTALL) + test -z "$(defaultdir)" || $(MKDIR_P) "$(DESTDIR)$(defaultdir)" + @list='$(default_DATA)'; for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + f=$(am__strip_dir) \ + echo " $(defaultDATA_INSTALL) '$$d$$p' '$(DESTDIR)$(defaultdir)/$$f'"; \ + $(defaultDATA_INSTALL) "$$d$$p" "$(DESTDIR)$(defaultdir)/$$f"; \ + done + +uninstall-defaultDATA: + @$(NORMAL_UNINSTALL) + @list='$(default_DATA)'; for p in $$list; do \ + f=$(am__strip_dir) \ + echo " rm -f '$(DESTDIR)$(defaultdir)/$$f'"; \ + rm -f "$(DESTDIR)$(defaultdir)/$$f"; \ + done +install-pamdDATA: $(pamd_DATA) + @$(NORMAL_INSTALL) + test -z "$(pamddir)" || $(MKDIR_P) "$(DESTDIR)$(pamddir)" + @list='$(pamd_DATA)'; for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + f=$(am__strip_dir) \ + echo " $(pamdDATA_INSTALL) '$$d$$p' '$(DESTDIR)$(pamddir)/$$f'"; \ + $(pamdDATA_INSTALL) "$$d$$p" "$(DESTDIR)$(pamddir)/$$f"; \ + done + +uninstall-pamdDATA: + @$(NORMAL_UNINSTALL) + @list='$(pamd_DATA)'; for p in $$list; do \ + f=$(am__strip_dir) \ + echo " rm -f '$(DESTDIR)$(pamddir)/$$f'"; \ + rm -f "$(DESTDIR)$(pamddir)/$$f"; \ + done +install-pwdutilsDATA: $(pwdutils_DATA) + @$(NORMAL_INSTALL) + test -z "$(pwdutilsdir)" || $(MKDIR_P) "$(DESTDIR)$(pwdutilsdir)" + @list='$(pwdutils_DATA)'; for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + f=$(am__strip_dir) \ + echo " $(pwdutilsDATA_INSTALL) '$$d$$p' '$(DESTDIR)$(pwdutilsdir)/$$f'"; \ + $(pwdutilsDATA_INSTALL) "$$d$$p" "$(DESTDIR)$(pwdutilsdir)/$$f"; \ + done + +uninstall-pwdutilsDATA: + @$(NORMAL_UNINSTALL) + @list='$(pwdutils_DATA)'; for p in $$list; do \ + f=$(am__strip_dir) \ + echo " rm -f '$(DESTDIR)$(pwdutilsdir)/$$f'"; \ + rm -f "$(DESTDIR)$(pwdutilsdir)/$$f"; \ + done +install-sysconfDATA: $(sysconf_DATA) + @$(NORMAL_INSTALL) + test -z "$(sysconfdir)" || $(MKDIR_P) "$(DESTDIR)$(sysconfdir)" + @list='$(sysconf_DATA)'; for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + f=$(am__strip_dir) \ + echo " $(sysconfDATA_INSTALL) '$$d$$p' '$(DESTDIR)$(sysconfdir)/$$f'"; \ + $(sysconfDATA_INSTALL) "$$d$$p" "$(DESTDIR)$(sysconfdir)/$$f"; \ + done + +uninstall-sysconfDATA: + @$(NORMAL_UNINSTALL) + @list='$(sysconf_DATA)'; for p in $$list; do \ + f=$(am__strip_dir) \ + echo " rm -f '$(DESTDIR)$(sysconfdir)/$$f'"; \ + rm -f "$(DESTDIR)$(sysconfdir)/$$f"; \ + done +tags: TAGS +TAGS: + +ctags: CTAGS +CTAGS: + + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ + fi; \ + cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ + else \ + test -f $(distdir)/$$file \ + || cp -p $$d/$$file $(distdir)/$$file \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-am +all-am: Makefile $(SCRIPTS) $(MANS) $(DATA) +installdirs: + for dir in "$(DESTDIR)$(initddir)" "$(DESTDIR)$(sbindir)" "$(DESTDIR)$(man5dir)" "$(DESTDIR)$(defaultdir)" "$(DESTDIR)$(pamddir)" "$(DESTDIR)$(pwdutilsdir)" "$(DESTDIR)$(sysconfdir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + +clean-generic: + -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-generic clean-libtool mostlyclean-am + +distclean: distclean-am + -rm -f Makefile +distclean-am: clean-am distclean-generic + +dvi: dvi-am + +dvi-am: + +html: html-am + +info: info-am + +info-am: + +install-data-am: install-defaultDATA install-initdSCRIPTS install-man \ + install-pamdDATA install-pwdutilsDATA + +install-dvi: install-dvi-am + +install-exec-am: install-sbinSCRIPTS install-sysconfDATA + +install-html: install-html-am + +install-info: install-info-am + +install-man: install-man5 + +install-pdf: install-pdf-am + +install-ps: install-ps-am + +installcheck-am: installcheck-initdSCRIPTS installcheck-sbinSCRIPTS + +maintainer-clean: maintainer-clean-am + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-generic mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-defaultDATA uninstall-initdSCRIPTS \ + uninstall-man uninstall-pamdDATA uninstall-pwdutilsDATA \ + uninstall-sbinSCRIPTS uninstall-sysconfDATA + +uninstall-man: uninstall-man5 + +.MAKE: install-am install-strip + +.PHONY: all all-am check check-am clean clean-generic clean-libtool \ + distclean distclean-generic distclean-libtool distdir dvi \ + dvi-am html html-am info info-am install install-am \ + install-data install-data-am install-defaultDATA install-dvi \ + install-dvi-am install-exec install-exec-am install-html \ + install-html-am install-info install-info-am \ + install-initdSCRIPTS install-man install-man5 install-pamdDATA \ + install-pdf install-pdf-am install-ps install-ps-am \ + install-pwdutilsDATA install-sbinSCRIPTS install-strip \ + install-sysconfDATA installcheck installcheck-am \ + installcheck-initdSCRIPTS installcheck-sbinSCRIPTS installdirs \ + maintainer-clean maintainer-clean-generic mostlyclean \ + mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ + uninstall uninstall-am uninstall-defaultDATA \ + uninstall-initdSCRIPTS uninstall-man uninstall-man5 \ + uninstall-pamdDATA uninstall-pwdutilsDATA \ + uninstall-sbinSCRIPTS uninstall-sysconfDATA + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/etc/default/passwd b/etc/default/passwd new file mode 100644 index 0000000..87057ea --- /dev/null +++ b/etc/default/passwd @@ -0,0 +1,30 @@ +# This file contains some information for +# the passwd (1) command and other tools +# creating or modifying passwords. + +# Define default crypt hash. This hash will be +# used, if there is no hash for a special service +# the user is stored in. +# CRYPT={des,md5,sha256,sha512} +CRYPT=md5 + +# Use another crypt hash for group passwords. +# This is used by gpasswd, fallback is the CRYPT entry. +# GROUP_CRYPT=des + + +# We can override the default for a special service +# by appending the service name (FILES, YP, NISPLUS, LDAP) + +# for local files, use a more secure hash. We +# don't need to be portable here: +CRYPT_FILES=sha512 +# sometimes we need to specify special options for +# a hash (variable is prepended by the name of the +# crypt hash). +# blowfish: 4-31 +# sha256/sha512: 1000-9999999 +#SHA512_CRYPT_FILES=1000 + +# For NIS, we should always use DES: +CRYPT_YP=des diff --git a/etc/default/useradd b/etc/default/useradd new file mode 100644 index 0000000..a43cd87 --- /dev/null +++ b/etc/default/useradd @@ -0,0 +1,8 @@ +GROUP=500 +HOME=/home +INACTIVE=-1 +EXPIRE= +SHELL=/bin/bash +SKEL=/etc/skel +GROUPS= +CREATE_MAIL_SPOOL=no diff --git a/etc/groupadd.local b/etc/groupadd.local new file mode 100755 index 0000000..d967736 --- /dev/null +++ b/etc/groupadd.local @@ -0,0 +1,29 @@ +#!/bin/bash +# +# Here you can add your own stuff, that should be done for every +# group which was new created. +# +# When you create a group with groupadd, this script will be called +# with the group name and GID as parameter. +# + +case "$1" in + --help|--version) + echo Usage: $0 group gid + exit 0 + ;; +esac + +# Check for the required argument. +# Allow 3 arguments, groupadd can also add UID of calling process. +if [ $# -lt 2 -o $# -gt 3 ]; then + echo Usage: $0 group gid + exit 1 +fi + +# Update NIS database +# make -C /var/yp + +# All done. +exit 0 + diff --git a/etc/init.d/rpasswdd b/etc/init.d/rpasswdd new file mode 100755 index 0000000..25f04b7 --- /dev/null +++ b/etc/init.d/rpasswdd @@ -0,0 +1,139 @@ +#! /bin/sh +# Copyright (c) 2004 Thorsten Kukuk +# +# /etc/init.d/rpasswdd +# +# and symbolic its link +# +# /usr/sbin/rcrpasswdd +# +# LSB compliant service control script; see http://www.linuxbase.org/spec/ +# +# System startup script for the remote password update daemon +# +### BEGIN INIT INFO +# Provides: rpasswdd +# Required-Start: $remote_fs $syslog +# Required-Stop: $remote_fs $syslog +# Default-Start: 3 5 +# Default-Stop: 0 1 2 6 +# Short-Description: Start daemon to allow secure remote password updates +# Description: Start rpasswdd to allow secure remote password updates +### END INIT INFO + +# Check for missing binaries (stale symlinks should not happen) +RPASSWDD_BIN=/usr/sbin/rpasswdd +test -x $RPASSWDD_BIN || exit 5 + +# Check for existence of needed config file and read it +RPASSWDD_CONFIG=/etc/sysconfig/rpasswdd +test -r $RPASSWDD_CONFIG && . $RPASSWDD_CONFIG + +# Shell functions sourced from /etc/rc.status: +# rc_check check and set local and overall rc status +# rc_status check and set local and overall rc status +# rc_status -v ditto but be verbose in local rc status +# rc_status -v -r ditto and clear the local rc status +# rc_failed set local and overall rc status to failed +# rc_failed set local and overall rc status to +# rc_reset clear local rc status (overall remains) +# rc_exit exit appropriate to overall rc status +# rc_active checks whether a service is activated by symlinks +. /etc/rc.status + +# First reset status of this service +rc_reset + +# Return values acc. to LSB for all commands but status: +# 0 - success +# 1 - generic or unspecified error +# 2 - invalid or excess argument(s) +# 3 - unimplemented feature (e.g. "reload") +# 4 - insufficient privilege +# 5 - program is not installed +# 6 - program is not configured +# 7 - program is not running +# +# Note that starting an already running service, stopping +# or restarting a not-running service as well as the restart +# with force-reload (in case signalling is not supported) are +# considered a success. + +case "$1" in + start) + echo -n "Starting rpasswd daemon" + if [ ! -f /etc/rpasswdd.pem ] ; then + echo -n " . . . . . . . . . . No certificate found" + rc_status -s + # service is not configured + rc_failed 6 + rc_exit + fi + startproc $RPASSWDD_BIN $RPASSWDD_OPTIONS + rc_status -v + ;; + stop) + echo -n "Shutting down rpasswd daemon" + killproc -TERM $RPASSWDD_BIN + rc_status -v + ;; + try-restart) + ## Stop the service and if this succeeds (i.e. the + ## service was running before), start it again. + $0 status >/dev/null && $0 restart + rc_status + ;; + restart) + ## Stop the service and regardless of whether it was + ## running or not, start it again. + $0 stop + $0 start + rc_status + ;; + force-reload) + ## Signal the daemon to reload its config. Most daemons + ## do this on signal 1 (SIGHUP). + ## If it does not support it, restart. + + #echo -n "Reload service RPASSWDD" + ## if it supports it: + #killproc -HUP $RPASSWDD_BIN + #touch /var/run/RPASSWDD.pid + #rc_status -v + + ## Otherwise: + $0 stop && $0 start + rc_status + ;; + reload) + ## Like force-reload, but if daemon does not support + ## signalling, do nothing (!) + + # If it supports signalling: + echo -n "Reload service rpasswd daemon" + #killproc -HUP $RPASSWDD_BIN + #touch /var/run/RPASSWDD.pid + #rc_status -v + + ## Otherwise if it does not support reload: + rc_failed 3 + rc_status -v + ;; + status) + echo -n "Checking for service rpasswd daemon: " + checkproc $RPASSWDD_BIN + rc_status -v + ;; + probe) + test /etc/rpasswdd.pem -nt /var/run/rpasswd.pid && echo restart + ;; + --help|--version) + echo "Usage: $0 {start|stop|status|try-restart|restart|force-reload|reload|probe}" + exit 0 + ;; + *) + echo "Usage: $0 {start|stop|status|try-restart|restart|force-reload|reload|probe}" + exit 1 + ;; +esac +rc_exit diff --git a/etc/login.defs b/etc/login.defs new file mode 100644 index 0000000..e40146f --- /dev/null +++ b/etc/login.defs @@ -0,0 +1,174 @@ +# +# /etc/login.defs - Configuration control definitions for pwdutils package. +# +# Comment lines (lines beginning with "#") and blank lines are ignored. +# Please read the manual page for more information (login.defs.5). +# + +# +# Should login be allowed if we can't cd to the home directory? +# Default is yes. +# +DEFAULT_HOME yes + +# +# The default PATH settings (used by login): +# +ENV_PATH /usr/local/bin:/usr/bin:/bin + +# +# The default PATH settings for root (used by login): +# +ENV_ROOTPATH /sbin:/bin:/usr/sbin:/usr/bin + +# +# Delay in seconds before being allowed another attempt +# after a login failure +# +FAIL_DELAY 3 + +# +# If defined, file which inhibits all the usual chatter +# during the login sequence. If a full pathname, then hushed +# mode will be enabled if the user's name or shell are found +# in the file. If not a full pathname, then hushed mode will +# be enabled if the file exists in the user's home directory. +# +#HUSHLOGIN_FILE .hushlogin +HUSHLOGIN_FILE /etc/hushlogins + +# +# Enable logging and display of /var/log/lastlog login time info. +# +LASTLOG_ENAB yes + +# +# Enable display of unknown usernames when login failures +# are recorded. +# +LOG_UNKFAIL_ENAB no + +# +# Max time in seconds for login +# +LOGIN_TIMEOUT 60 + +# +# If defined, ":" delimited list of "message of the day" files to +# be displayed upon login. +# +MOTD_FILE /etc/motd +#MOTD_FILE /etc/motd:/usr/lib/news/news-motd + +# +# If defined, file which maps tty line to TERM environment parameter. +# Each line of the file is in a format something like "vt100 tty01". +# +TTYTYPE_FILE /etc/ttytype + +# +# Terminal permissions +# +# TTYGROUP Login tty will be assigned this group ownership. +# TTYPERM Login tty will be set to this permission. +# +# If you have a "write" program which is "setgid" to a special group +# which owns the terminals, define TTYGROUP to the group number and +# TTYPERM to 0620. Otherwise leave TTYGROUP commented out and assign +# TTYPERM to either 622 or 600. +# +TTYGROUP tty +TTYPERM 0620 + +# +# Require password before chfn/chsh can make any changes. +# +CHFN_AUTH yes + +# +# Which fields may be changed by regular users using chfn - use +# any combination of letters "frwh" (full name, room number, work +# phone, home phone). If not defined, no changes are allowed. +# For backward compatibility, "yes" = "rwh" and "no" = "frwh". +# +CHFN_RESTRICT rwh + +# +# Password aging controls (used by useradd): +# +# PASS_MAX_DAYS Maximum number of days a password may be used. +# PASS_MIN_DAYS Minimum number of days allowed between password changes. +# PASS_WARN_AGE Number of days warning given before a password expires. +# +PASS_MAX_DAYS 99999 +PASS_MIN_DAYS 0 +PASS_WARN_AGE 7 + +# +# Min/max values for automatic uid selection in useradd +# +# SYSTEM_UID_MIN to SYSTEM_UID_MAX inclusive is the range for +# UIDs for dynamically allocated administrative and system accounts. +# UID_MIN to UID_MAX inclusive is the range of UIDs of dynamically +# allocated user accounts. +# +SYSTEM_UID_MIN 100 +SYSTEM_UID_MAX 499 +UID_MIN 1000 +UID_MAX 60000 + +# +# Min/max values for automatic gid selection in groupadd +# +# SYSTEM_GID_MIN to SYSTEM_GID_MAX inclusive is the range for +# GIDs for dynamically allocated administrative and system groups. +# GID_MIN to GID_MAX inclusive is the range of GIDs of dynamically +# allocated groups. +# +SYSTEM_GID_MIN 100 +SYSTEM_GID_MAX 499 +GID_MIN 1000 +GID_MAX 60000 + +# +# User/group names must match the following regex expression. +# The default is [A-Za-z_][A-Za-z0-9_.-]*[A-Za-z0-9_.$-]\?, +# but be aware that the result could depend on the locale settings. +# +#CHARACTER_CLASS [A-Za-z_][A-Za-z0-9_.-]*[A-Za-z0-9_.$-]\? +CHARACTER_CLASS [ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz_][ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789_.-]*[ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789_.$-]\? + +# +# The UMASK value for useradd can be found in /etc/default/useradd, +# this variable here is deprecated and currently only used as fallback +# by pam_umask.so. +# +UMASK 022 + +# +# If defined, this command is run when adding a group. +# It should rebuild any NIS database etc. to add the +# new created group. +# +GROUPADD_CMD /usr/sbin/groupadd.local + +# +# If defined, this command is run when adding a user. +# It should rebuild any NIS database etc. to add the +# new created account. +# +USERADD_CMD /usr/sbin/useradd.local + +# +# If defined, this command is run before removing a user. +# It should remove any at/cron/print jobs etc. owned by +# the user to be removed. +# +USERDEL_PRECMD /usr/sbin/userdel-pre.local + +# +# If defined, this command is run after removing a user. +# It should rebuild any NIS database etc. to remove the +# account from it. +# +USERDEL_POSTCMD /usr/sbin/userdel-post.local diff --git a/etc/login.defs.5 b/etc/login.defs.5 new file mode 100644 index 0000000..6eed572 --- /dev/null +++ b/etc/login.defs.5 @@ -0,0 +1,269 @@ +.\" Copyright 2004, 2010 Thorsten Kukuk +.\" Copyright 1991 - 1993, Julianne Frances Haugh and Chip Rosenthal +.\" All rights reserved. +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions +.\" are met: +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in the +.\" documentation and/or other materials provided with the distribution. +.\" 3. Neither the name of Julianne F. Haugh nor the names of its contributors +.\" may be used to endorse or promote products derived from this software +.\" without specific prior written permission. +.\" +.\" THIS SOFTWARE IS PROVIDED BY JULIE HAUGH AND CONTRIBUTORS ``AS IS'' AND +.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +.\" ARE DISCLAIMED. IN NO EVENT SHALL JULIE HAUGH OR CONTRIBUTORS BE LIABLE +.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS +.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY +.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF +.\" SUCH DAMAGE. +.TH LOGIN 5 +.SH NAME +/etc/login.defs \- Login configuration +.SH DESCRIPTION +The +.I /etc/login.defs +file defines the site-specific configuration for the shadow login +suite. This file is required. Absence of this file will not prevent +system operation, but will probably result in undesirable operation. +.PP +This file is a readable text file, each line of the file describing +one configuration parameter. The lines consist of a configuration +name and value, seperated by whitespace. Blank lines and comment +lines are ignored. Comments are introduced with a `#' pound sign and +the pound sign must be the first non-white character of the line. +.PP +Parameter values may be of four types: strings, booleans, numbers, +and long numbers. A string is comprised of any printable characters. +A boolean should be either the value ``yes'' or ``no''. An undefined +boolean parameter or one with a value other than these will be given +a ``no'' value. Numbers (both regular and long) may be either decimal +values, octal values (precede the value with ``0'') or hexadecimal +values (precede the value with ``0x''). The maximum value of the +regular and long numeric parameters is machine-dependant. +.PP +The following configuration items are provided: +.\" +.IP "CHARACTER_CLASS (string)" +User accounts and Group names have to match the regex expression +of this variable. +.\" +.IP "CHFN_AUTH (boolean)" +If +.IR yes , +the +.B chfn +and +.B chsh +programs will ask for password before making any changes, unless +run by the superuser. +.\" +.IP "CHFN_RESTRICT (string)" +This parameter specifies which values in the +.I gecos +field of the +.I passwd +file may be changed by regular users using the +.B chfn +program. It can be any combination of letters +.IR f , +.IR r , +.IR w , +.IR h , +for Full name, Room number, Work phone, and Home phone, respectively. +If not specified, only the superuser can make any changes. +.\" +.IP "DEFAULT_HOME (boolean)" +If the home directory of a user is not reachable, should the +use be allowed to login ? +.\" +.IP "ENV_PATH (string)" +This parameter must be defined as the search path for regular users. +When a login with UID other than zero occurs, the PATH environment +parameter is initialized to this value. +.\" +.IP "ENV_ROOTPATH (string)" +This parameter must be defined as the search path for root. +.\" +.IP "FAIL_DELAY (number)" +Delay time in seconds after each failed login attempt. +.\" +.IP "GID_MAX (number)" +.IP "GID_MIN (number)" +Range of group IDs to choose from for the +.B groupadd +program. +.\" +.IP "HUSHLOGIN_FILE (string)" +This parameter is used to establish ``hushlogin'' conditions. There +are two possible ways to establish these conditions. First, if the +value of this parameter is a filename and that file exists in the +user's home directory then ``hushlogin'' conditions will be in effect. +The contents of this file are ignored; its mere presence triggers +``hushlogin'' conditions. Second, if the value of this parameter is +a full pathname and either the user's login name or the user's shell +is found in this file, then ``hushlogin'' conditions will be in effect. +In this case, the file should be in a format similar to: +.nf +.sp +.ft I + demo + /usr/lib/uucp/uucico + \0\0. + \0\0. + \0\0. +.ft R +.sp +.fi +When ``hushlogin'' conditions are established, the message of the day +printed by +.B /bin/login +is suppressed. See MOTD_FILE for related information. +.\" +.IP "LOG_UNKFAIL_ENAB (boolean)" +If +.I yes +then unknown usernames will be included when a login failure is +recorded. Note that this is a potential security risk; a common login +failure mode is transposition of the user name and password, thus this +mode will often cause passwords to accumulate in the failure logs. +If this option is disabled then unknown usernames will be suppressed +in login failure messages. +.\" +.IP "LOGIN_TIMEOUT (number)" +Time in seconds after the +.B login +program exits if the user doesn't type his password. +.\" +.IP "MOTD_FILE (string)" +This parameter specifies a colon-delimited list of pathnames to ``message +of the day'' files. +If a specified file exists, then its contents are displayed to the user +upon login. +If this parameter is not defined or ``hushlogin'' login conditions are +in effect, this information will be suppressed. +.\" +.IP "PASS_MIN_DAYS (number)" +The minimum number of days allowed between password changes. Any password +changes attempted sooner than this will be rejected. If not specified, a +zero value will be assumed. +.\" +.IP "PASS_MAX_DAYS (number)" +The maximum number of days a password may be used. If the password is +older than this, then the account will be locked. If not specified, +a large value will be assumed. +.\" +.IP "PASS_WARN_AGE (number)" +The number of days warning given before a password expires. A zero means +warning is given only upon the day of expiration, a negative value means +no warning is given. If not specified, no warning will be provided. +.\" +.IP "SYSTEM_GID_MAX (number)" +Max group ID value used by automatic gid selection in groupadd for system groups +.IP "SYSTEM_GID_MIN (number)" +Min group ID value used by automatic gid selection in groupadd for system groups +.\" +.IP "SYSTEM_UID_MAX (number)" +Max user ID value used by automatic uid selection in useradd for system accounts +.IP "SYSTEM_UID_MIN (number)" +Min user ID value used by automatic uid selection in useradd for system accounts +.\" +.IP "TTYGROUP (string or number)" +The group ownership of the terminal is initialized to this group +name or number. One well-known security attack involves forcing terminal +control sequences upon another user's terminal line. This problem +can be averted by disabling permissions which allow other users to +access the terminal line, but this unfortunately prevents programs +such as +.B write +from operating. Another solution is to use a version of the +.B write +program which filters out potentially dangerous character sequences, +make this program ``setgid'' to a special group, assign group ownership +of the terminal line to this special group, and assign permissions of +\fI0620\fR to the terminal line. The TTYGROUP definition has been +provided for just this situation. If this item is not defined, then +the group ownership of the terminal is initialized to the user's group +number. See TTYPERMS for related information. +.\" +.IP "TTYPERM (number)" +The login terminal permissions are initialized to this value. Typical +values will be \fI0622\fR to permit others write access to the line +or \fI0600\fR to secure the line from other users. If not specified, +the terminal permissions will be initialized to \fI0622\fR. See +TTYGROUP for related information. +.\" +.IP "TTYTYPE_FILE (string)" +This parameter specifies the full pathname to a file which maps terminal +lines to terminal types. Each line of the file contains a terminal +type and a terminal line, seperated by whitespace, for example: +.nf +.sp +.ft I + vt100\0 tty01 + wyse60 tty02 + \0\0.\0\0\0 \0\0. + \0\0.\0\0\0 \0\0. + \0\0.\0\0\0 \0\0. +.ft R +.sp +.fi +This information is only used to initialize the TERM environment parameter +when it does not already exist. +A line starting with a ``#'' pound sign will be treated as a comment. +If this paramter is not specified, the file does not exist, or the terminal +line is not found in the file, then the TERM environment parameter will not +be set. +.\" +.IP "UID_MAX (number)" +Max user ID value for automatic uid selection in useradd +.IP "UID_MIN (number)" +Min user ID value for automatic uid selection in useradd +.\" +.IP "USERADD_CMD (string)" +If defined, this command is run after adding a user with \fBuseradd\fR. +It can, for example, rebuild the NIS maps in this script. +.\" +.IP "USERDEL_PRECMD (string)" +If defined, this command is run before removing a user with \fBuserdel\fR. +It should remove any at/cron/print jobs etc. owned by the user to be +removed (passed as the first argument). +.\" +.IP "USERDEL_POSTCMD (string)" +If defined, this command is run after removing a user with \fBuserdel\fR. +It can, for example, rebuild any NIS database etc. to remove the account from it. +.\" +.SH CROSS REFERENCE +The following cross reference shows which programs in the shadow login +suite use which parameters. +.na +.IP login 12 +DEFAULT_HOME ENV_PATH ENV_ROOTPATH FAIL_DELAY +HUSHLOGIN_FILE LOG_UNKFAIL_ENAB LOGIN_TIMEOUT +MOTD_FILE TTYPERM TTYGROUP TTYTYPE_FILE +.IP useradd 12 +PASS_MAX_DAYS PASS_MIN_DAYS PASS_WARN_AGE +.IP passwd 12 +OBSCURE_CHECKS_ENAB PASS_MAX_LEN PASS_MIN_LEN PASS_ALWAYS_WARN +CRACKLIB_DICTPATH PASS_CHANGE_TRIES +.IP pwconv 12 +PASS_MAX_DAYS PASS_MIN_DAYS PASS_WARN_AGE +.ad +.SH BUGS +Some of the supported configuration parameters are not documented in this +manual page. +.SH SEE ALSO +.BR login (1), +.BR passwd (5) +.SH AUTHORS +Julianne Frances Haugh (jockgrrl@ix.netcom.com) +.br +Thorsten Kukuk (kukuk@thkukuk.de) diff --git a/etc/pam.d/chage b/etc/pam.d/chage new file mode 100644 index 0000000..4c64523 --- /dev/null +++ b/etc/pam.d/chage @@ -0,0 +1,6 @@ +#%PAM-1.0 +auth sufficient pam_rootok.so +auth include common-auth +account include common-account +password include common-password +session include common-session diff --git a/etc/pam.d/chfn b/etc/pam.d/chfn new file mode 100644 index 0000000..7ae1576 --- /dev/null +++ b/etc/pam.d/chfn @@ -0,0 +1,8 @@ +#%PAM-1.0 +# For chfn command +auth sufficient pam_rootok.so +auth include common-auth +account include common-account +password include common-password +session include common-session + diff --git a/etc/pam.d/chsh b/etc/pam.d/chsh new file mode 100644 index 0000000..d24ecf2 --- /dev/null +++ b/etc/pam.d/chsh @@ -0,0 +1,8 @@ +#%PAM-1.0 +# For chsh command +auth sufficient pam_rootok.so +auth include common-auth +account include common-account +password include common-password +session include common-session + diff --git a/etc/pam.d/passwd b/etc/pam.d/passwd new file mode 100644 index 0000000..88c729a --- /dev/null +++ b/etc/pam.d/passwd @@ -0,0 +1,5 @@ +#%PAM-1.0 +auth include common-auth +account include common-account +password include common-password +session include common-session diff --git a/etc/pam.d/rpasswd b/etc/pam.d/rpasswd new file mode 100644 index 0000000..1f9b60f --- /dev/null +++ b/etc/pam.d/rpasswd @@ -0,0 +1,6 @@ +#%PAM-1.0 +auth include common-auth +account include common-account +password include common-password +session include common-session + diff --git a/etc/pam.d/shadow b/etc/pam.d/shadow new file mode 100644 index 0000000..343efad --- /dev/null +++ b/etc/pam.d/shadow @@ -0,0 +1,7 @@ +#%PAM-1.0 +auth sufficient pam_rootok.so +auth required pam_permit.so +account required pam_permit.so +#password required pam_make.so /var/yp +password required pam_permit.so +session required pam_deny.so diff --git a/etc/pam.d/useradd b/etc/pam.d/useradd new file mode 100644 index 0000000..76c6c8a --- /dev/null +++ b/etc/pam.d/useradd @@ -0,0 +1,6 @@ +#%PAM-1.0 +auth sufficient pam_rootok.so +auth required pam_permit.so +account required pam_permit.so +password required pam_permit.so +session required pam_permit.so diff --git a/etc/pwdutils/logging b/etc/pwdutils/logging new file mode 100644 index 0000000..34e4493 --- /dev/null +++ b/etc/pwdutils/logging @@ -0,0 +1,8 @@ +# +# This modules defines which plugins for logging should +# be loaded and the options for the plugins. Plugins are +# called in the order as defined in this file. +# +# Syntax: name +# +syslog diff --git a/etc/rpasswd.conf b/etc/rpasswd.conf new file mode 100644 index 0000000..7b82822 --- /dev/null +++ b/etc/rpasswd.conf @@ -0,0 +1,5 @@ +# rpasswdd runs on master.example.com +# server master.example.com +# port 774 +# reqcert allow + diff --git a/etc/useradd.local b/etc/useradd.local new file mode 100755 index 0000000..294c065 --- /dev/null +++ b/etc/useradd.local @@ -0,0 +1,44 @@ +#!/bin/bash +# +# Here you can add your own stuff, that should be done for every user who +# was new created. +# +# When you create a user with useradd, this script will be called +# with the login name as parameter. Optional, UID, GID and the HOME +# directory are added. +# + +case "$1" in + --help|--version) + echo Usage: $0 username [uid gid home] + exit 0 + ;; +esac + +# Check for the required argument. +if [ $# -lt 1 -o $# -gt 4 ]; then + echo Usage: $0 username [uid gid home] + exit 1 +fi + +# Update NIS database +# make -C /var/yp + +# If SELinux is enabled, we have to run restorecon to assign +# appropriate fcontexts to the respective $HOME and files under it +if [ -x /usr/sbin/selinuxenabled ] && /usr/sbin/selinuxenabled ; then + test -x /sbin/restorecon || exit 2 + + if [ $# -lt 4 ]; then + home_dir=/home/$1 + else + home_dir=$4 + fi + + if [ -d $home_dir ]; then + /sbin/restorecon -R $home_dir + fi +fi + +# All done. +exit 0 diff --git a/etc/userdel-post.local b/etc/userdel-post.local new file mode 100755 index 0000000..42bdc10 --- /dev/null +++ b/etc/userdel-post.local @@ -0,0 +1,30 @@ +#!/bin/bash +# +# Here you can add your own stuff, that should be done for every user +# which we deleted. +# +# If you delete a user with userdel, this script will be called +# with the login name, UID, GID and the HOME directory as parameter +# after the account and optional home directory was removed from the +# system. +# + +case "$1" in + --help|--version) + echo Usage: $0 username uid gid home + exit 0 + ;; +esac + +# Check for the required argument. +if [ $# != 4 ]; then + echo Usage: $0 username uid gid home + exit 1 +fi + +# Rebuild NIS database to remove the account from it. +# make -C /var/yp + +# All done. +exit 0 + diff --git a/etc/userdel-pre.local b/etc/userdel-pre.local new file mode 100755 index 0000000..e439016 --- /dev/null +++ b/etc/userdel-pre.local @@ -0,0 +1,28 @@ +#!/bin/bash +# +# Here you can add your own stuff, that should be done for every user +# who will be deleted. +# +# When you delete a user with userdel, this script will be called +# with the login name, UID, GID and the HOME directory as parameter. +# + +case "$1" in + --help|--version) + echo Usage: $0 username uid gid home + exit 0 + ;; +esac + +# Check for the required argument. +if [ $# != 4 ]; then + echo Usage: $0 username uid gid home + exit 1 +fi + +# Remove cron jobs +test -x /usr/bin/crontab && /usr/bin/crontab -r -u $1 + +# All done. +exit 0 + diff --git a/install-sh b/install-sh new file mode 100755 index 0000000..36f96f3 --- /dev/null +++ b/install-sh @@ -0,0 +1,276 @@ +#!/bin/sh +# +# install - install a program, script, or datafile +# This comes from X11R5 (mit/util/scripts/install.sh). +# +# Copyright 1991 by the Massachusetts Institute of Technology +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of M.I.T. not be used in advertising or +# publicity pertaining to distribution of the software without specific, +# written prior permission. M.I.T. makes no representations about the +# suitability of this software for any purpose. It is provided "as is" +# without express or implied warranty. +# +# Calling this script install-sh is preferred over install.sh, to prevent +# `make' implicit rules from creating a file called install from it +# when there is no Makefile. +# +# This script is compatible with the BSD install script, but was written +# from scratch. It can only install one file at a time, a restriction +# shared with many OS's install programs. + + +# set DOITPROG to echo to test this script + +# Don't use :- since 4.3BSD and earlier shells don't like it. +doit="${DOITPROG-}" + + +# put in absolute paths if you don't have them in your path; or use env. vars. + +mvprog="${MVPROG-mv}" +cpprog="${CPPROG-cp}" +chmodprog="${CHMODPROG-chmod}" +chownprog="${CHOWNPROG-chown}" +chgrpprog="${CHGRPPROG-chgrp}" +stripprog="${STRIPPROG-strip}" +rmprog="${RMPROG-rm}" +mkdirprog="${MKDIRPROG-mkdir}" + +transformbasename="" +transform_arg="" +instcmd="$mvprog" +chmodcmd="$chmodprog 0755" +chowncmd="" +chgrpcmd="" +stripcmd="" +rmcmd="$rmprog -f" +mvcmd="$mvprog" +src="" +dst="" +dir_arg="" + +while [ x"$1" != x ]; do + case $1 in + -c) instcmd=$cpprog + shift + continue;; + + -d) dir_arg=true + shift + continue;; + + -m) chmodcmd="$chmodprog $2" + shift + shift + continue;; + + -o) chowncmd="$chownprog $2" + shift + shift + continue;; + + -g) chgrpcmd="$chgrpprog $2" + shift + shift + continue;; + + -s) stripcmd=$stripprog + shift + continue;; + + -t=*) transformarg=`echo $1 | sed 's/-t=//'` + shift + continue;; + + -b=*) transformbasename=`echo $1 | sed 's/-b=//'` + shift + continue;; + + *) if [ x"$src" = x ] + then + src=$1 + else + # this colon is to work around a 386BSD /bin/sh bug + : + dst=$1 + fi + shift + continue;; + esac +done + +if [ x"$src" = x ] +then + echo "$0: no input file specified" >&2 + exit 1 +else + : +fi + +if [ x"$dir_arg" != x ]; then + dst=$src + src="" + + if [ -d "$dst" ]; then + instcmd=: + chmodcmd="" + else + instcmd=$mkdirprog + fi +else + +# Waiting for this to be detected by the "$instcmd $src $dsttmp" command +# might cause directories to be created, which would be especially bad +# if $src (and thus $dsttmp) contains '*'. + + if [ -f "$src" ] || [ -d "$src" ] + then + : + else + echo "$0: $src does not exist" >&2 + exit 1 + fi + + if [ x"$dst" = x ] + then + echo "$0: no destination specified" >&2 + exit 1 + else + : + fi + +# If destination is a directory, append the input filename; if your system +# does not like double slashes in filenames, you may need to add some logic + + if [ -d "$dst" ] + then + dst=$dst/`basename "$src"` + else + : + fi +fi + +## this sed command emulates the dirname command +dstdir=`echo "$dst" | sed -e 's,[^/]*$,,;s,/$,,;s,^$,.,'` + +# Make sure that the destination directory exists. +# this part is taken from Noah Friedman's mkinstalldirs script + +# Skip lots of stat calls in the usual case. +if [ ! -d "$dstdir" ]; then +defaultIFS=' + ' +IFS="${IFS-$defaultIFS}" + +oIFS=$IFS +# Some sh's can't handle IFS=/ for some reason. +IFS='%' +set - `echo "$dstdir" | sed -e 's@/@%@g' -e 's@^%@/@'` +IFS=$oIFS + +pathcomp='' + +while [ $# -ne 0 ] ; do + pathcomp=$pathcomp$1 + shift + + if [ ! -d "$pathcomp" ] ; + then + $mkdirprog "$pathcomp" + else + : + fi + + pathcomp=$pathcomp/ +done +fi + +if [ x"$dir_arg" != x ] +then + $doit $instcmd "$dst" && + + if [ x"$chowncmd" != x ]; then $doit $chowncmd "$dst"; else : ; fi && + if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd "$dst"; else : ; fi && + if [ x"$stripcmd" != x ]; then $doit $stripcmd "$dst"; else : ; fi && + if [ x"$chmodcmd" != x ]; then $doit $chmodcmd "$dst"; else : ; fi +else + +# If we're going to rename the final executable, determine the name now. + + if [ x"$transformarg" = x ] + then + dstfile=`basename "$dst"` + else + dstfile=`basename "$dst" $transformbasename | + sed $transformarg`$transformbasename + fi + +# don't allow the sed command to completely eliminate the filename + + if [ x"$dstfile" = x ] + then + dstfile=`basename "$dst"` + else + : + fi + +# Make a couple of temp file names in the proper directory. + + dsttmp=$dstdir/#inst.$$# + rmtmp=$dstdir/#rm.$$# + +# Trap to clean up temp files at exit. + + trap 'status=$?; rm -f "$dsttmp" "$rmtmp" && exit $status' 0 + trap '(exit $?); exit' 1 2 13 15 + +# Move or copy the file name to the temp name + + $doit $instcmd "$src" "$dsttmp" && + +# and set any options; do chmod last to preserve setuid bits + +# If any of these fail, we abort the whole thing. If we want to +# ignore errors from any of these, just make sure not to ignore +# errors from the above "$doit $instcmd $src $dsttmp" command. + + if [ x"$chowncmd" != x ]; then $doit $chowncmd "$dsttmp"; else :;fi && + if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd "$dsttmp"; else :;fi && + if [ x"$stripcmd" != x ]; then $doit $stripcmd "$dsttmp"; else :;fi && + if [ x"$chmodcmd" != x ]; then $doit $chmodcmd "$dsttmp"; else :;fi && + +# Now remove or move aside any old file at destination location. We try this +# two ways since rm can't unlink itself on some systems and the destination +# file might be busy for other reasons. In this case, the final cleanup +# might fail but the new file should still install successfully. + +{ + if [ -f "$dstdir/$dstfile" ] + then + $doit $rmcmd -f "$dstdir/$dstfile" 2>/dev/null || + $doit $mvcmd -f "$dstdir/$dstfile" "$rmtmp" 2>/dev/null || + { + echo "$0: cannot unlink or rename $dstdir/$dstfile" >&2 + (exit 1); exit + } + else + : + fi +} && + +# Now rename the file to the real destination. + + $doit $mvcmd "$dsttmp" "$dstdir/$dstfile" + +fi && + +# The final little trick to "correctly" pass the exit status to the exit trap. + +{ + (exit 0); exit +} diff --git a/lib/Makefile.am b/lib/Makefile.am new file mode 100644 index 0000000..ba02cf8 --- /dev/null +++ b/lib/Makefile.am @@ -0,0 +1,34 @@ +# +# Copyright (c) 2003-2005 Thorsten Kukuk, Germany +# +# Author: Thorsten Kukuk +# +AUTOMAKE_OPTIONS = 1.8 gnits +MAINT_CHARSET = latin1 + +noinst_LIBRARIES = libpwdutils.a + +AM_CFLAGS = -fPIC @EXTRA_CFLAGS@ + +noinst_HEADERS = error_codes.h libldap.h logindefs.h nispasswd.h nsw.h \ + public.h read-files.h yppasswd.h group.h use_slp.h \ + dbg_log.h yesno.h parse_crypt_arg.h utf8conv.h logging.h \ + msg_table.h i18n.h + +libpwdutils_a_SOURCES = authentication.c get_value.c libldap.c logindefs.c \ + nsw.c passwd_nisplus.c read-files.c user.c \ + yppasswd_xdr.c group.c read-files-group.c \ + call_script.c copy_dir_rec.c remove_dir_rec.c \ + is_logged_in.c lock_database.c copy_xattr.c \ + selinux_utils.c init_environment.c print_error.c \ + print_version.c date2str.c str2date.c check_name.c \ + chown_dir_rec.c check_home.c use_slp.c dbg_log.c \ + parse_pwent.c yesno.c parse_grent.c strtoid.c \ + parse_crypt_arg.c utf8conv.c get_ldap_password.c \ + get_caller_dn.c logging.c remove_gr_mem.c + +localedir = $(datadir)/locale +plugindir = $(libdir)/pwdutils +INCLUDES = -DLOCALEDIR=\"$(localedir)\" -DPLUGINDIR=\"$(plugindir)\" + +CLEANFILES = *~ diff --git a/lib/Makefile.in b/lib/Makefile.in new file mode 100644 index 0000000..184e418 --- /dev/null +++ b/lib/Makefile.in @@ -0,0 +1,558 @@ +# Makefile.in generated by automake 1.10.1 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + + +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +subdir = lib +DIST_COMMON = $(noinst_HEADERS) $(srcdir)/Makefile.am \ + $(srcdir)/Makefile.in +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/m4/getline.m4 \ + $(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/iconv.m4 \ + $(top_srcdir)/m4/isc-posix.m4 \ + $(top_srcdir)/m4/japhar_grep_cflags.m4 \ + $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \ + $(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libtool.m4 \ + $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ + $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ + $(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \ + $(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.in +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +LIBRARIES = $(noinst_LIBRARIES) +ARFLAGS = cru +libpwdutils_a_AR = $(AR) $(ARFLAGS) +libpwdutils_a_LIBADD = +am_libpwdutils_a_OBJECTS = authentication.$(OBJEXT) \ + get_value.$(OBJEXT) libldap.$(OBJEXT) logindefs.$(OBJEXT) \ + nsw.$(OBJEXT) passwd_nisplus.$(OBJEXT) read-files.$(OBJEXT) \ + user.$(OBJEXT) yppasswd_xdr.$(OBJEXT) group.$(OBJEXT) \ + read-files-group.$(OBJEXT) call_script.$(OBJEXT) \ + copy_dir_rec.$(OBJEXT) remove_dir_rec.$(OBJEXT) \ + is_logged_in.$(OBJEXT) lock_database.$(OBJEXT) \ + copy_xattr.$(OBJEXT) selinux_utils.$(OBJEXT) \ + init_environment.$(OBJEXT) print_error.$(OBJEXT) \ + print_version.$(OBJEXT) date2str.$(OBJEXT) str2date.$(OBJEXT) \ + check_name.$(OBJEXT) chown_dir_rec.$(OBJEXT) \ + check_home.$(OBJEXT) use_slp.$(OBJEXT) dbg_log.$(OBJEXT) \ + parse_pwent.$(OBJEXT) yesno.$(OBJEXT) parse_grent.$(OBJEXT) \ + strtoid.$(OBJEXT) parse_crypt_arg.$(OBJEXT) utf8conv.$(OBJEXT) \ + get_ldap_password.$(OBJEXT) get_caller_dn.$(OBJEXT) \ + logging.$(OBJEXT) remove_gr_mem.$(OBJEXT) +libpwdutils_a_OBJECTS = $(am_libpwdutils_a_OBJECTS) +DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) +depcomp = $(SHELL) $(top_srcdir)/depcomp +am__depfiles_maybe = depfiles +COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ + $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ + $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +CCLD = $(CC) +LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \ + $(LDFLAGS) -o $@ +SOURCES = $(libpwdutils_a_SOURCES) +DIST_SOURCES = $(libpwdutils_a_SOURCES) +HEADERS = $(noinst_HEADERS) +ETAGS = etags +CTAGS = ctags +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +AMTAR = @AMTAR@ +AR = @AR@ +ATTR_LIB = @ATTR_LIB@ +AUDIT_LIBS = @AUDIT_LIBS@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +BIOAPI_LIB = @BIOAPI_LIB@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CRYPT_LIB = @CRYPT_LIB@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DL_LIBS = @DL_LIBS@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +EXTRA_CFLAGS = @EXTRA_CFLAGS@ +FGREP = @FGREP@ +GMSGFMT = @GMSGFMT@ +GMSGFMT_015 = @GMSGFMT_015@ +GREP = @GREP@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +INTLLIBS = @INTLLIBS@ +INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ +LAUS_LIBS = @LAUS_LIBS@ +LD = @LD@ +LDAP_LIBS = @LDAP_LIBS@ +LDFLAGS = @LDFLAGS@ +LIBICONV = @LIBICONV@ +LIBINTL = @LIBINTL@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBICONV = @LTLIBICONV@ +LTLIBINTL = @LTLIBINTL@ +LTLIBOBJS = @LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +MKDIR_P = @MKDIR_P@ +MSGFMT = @MSGFMT@ +MSGFMT_015 = @MSGFMT_015@ +MSGMERGE = @MSGMERGE@ +NM = @NM@ +NMEDIT = @NMEDIT@ +NSCD_LIB = @NSCD_LIB@ +NSL_LIB = @NSL_LIB@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PAM_LIBS = @PAM_LIBS@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PIE_CFLAGS = @PIE_CFLAGS@ +PIE_LDFLAGS = @PIE_LDFLAGS@ +POSUB = @POSUB@ +RANLIB = @RANLIB@ +SED = @SED@ +SELINUX_LIB = @SELINUX_LIB@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +SLP_LIBS = @SLP_LIBS@ +SSL_LIBS = @SSL_LIBS@ +STRIP = @STRIP@ +TLS_LIBS = @TLS_LIBS@ +USE_NLS = @USE_NLS@ +VERSION = @VERSION@ +XGETTEXT = @XGETTEXT@ +XGETTEXT_015 = @XGETTEXT_015@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libc_cv_fpie = @libc_cv_fpie@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = $(datadir)/locale +localstatedir = @localstatedir@ +lt_ECHO = @lt_ECHO@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ + +# +# Copyright (c) 2003-2005 Thorsten Kukuk, Germany +# +# Author: Thorsten Kukuk +# +AUTOMAKE_OPTIONS = 1.8 gnits +MAINT_CHARSET = latin1 +noinst_LIBRARIES = libpwdutils.a +AM_CFLAGS = -fPIC @EXTRA_CFLAGS@ +noinst_HEADERS = error_codes.h libldap.h logindefs.h nispasswd.h nsw.h \ + public.h read-files.h yppasswd.h group.h use_slp.h \ + dbg_log.h yesno.h parse_crypt_arg.h utf8conv.h logging.h \ + msg_table.h i18n.h + +libpwdutils_a_SOURCES = authentication.c get_value.c libldap.c logindefs.c \ + nsw.c passwd_nisplus.c read-files.c user.c \ + yppasswd_xdr.c group.c read-files-group.c \ + call_script.c copy_dir_rec.c remove_dir_rec.c \ + is_logged_in.c lock_database.c copy_xattr.c \ + selinux_utils.c init_environment.c print_error.c \ + print_version.c date2str.c str2date.c check_name.c \ + chown_dir_rec.c check_home.c use_slp.c dbg_log.c \ + parse_pwent.c yesno.c parse_grent.c strtoid.c \ + parse_crypt_arg.c utf8conv.c get_ldap_password.c \ + get_caller_dn.c logging.c remove_gr_mem.c + +plugindir = $(libdir)/pwdutils +INCLUDES = -DLOCALEDIR=\"$(localedir)\" -DPLUGINDIR=\"$(plugindir)\" +CLEANFILES = *~ +all: all-am + +.SUFFIXES: +.SUFFIXES: .c .lo .o .obj +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ + && exit 0; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnits lib/Makefile'; \ + cd $(top_srcdir) && \ + $(AUTOMAKE) --gnits lib/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +clean-noinstLIBRARIES: + -test -z "$(noinst_LIBRARIES)" || rm -f $(noinst_LIBRARIES) +libpwdutils.a: $(libpwdutils_a_OBJECTS) $(libpwdutils_a_DEPENDENCIES) + -rm -f libpwdutils.a + $(libpwdutils_a_AR) libpwdutils.a $(libpwdutils_a_OBJECTS) $(libpwdutils_a_LIBADD) + $(RANLIB) libpwdutils.a + +mostlyclean-compile: + -rm -f *.$(OBJEXT) + +distclean-compile: + -rm -f *.tab.c + +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/authentication.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/call_script.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/check_home.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/check_name.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/chown_dir_rec.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/copy_dir_rec.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/copy_xattr.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/date2str.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dbg_log.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/get_caller_dn.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/get_ldap_password.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/get_value.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/group.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/init_environment.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/is_logged_in.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libldap.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lock_database.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/logging.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/logindefs.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nsw.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/parse_crypt_arg.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/parse_grent.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/parse_pwent.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/passwd_nisplus.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/print_error.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/print_version.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/read-files-group.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/read-files.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/remove_dir_rec.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/remove_gr_mem.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/selinux_utils.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/str2date.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/strtoid.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/use_slp.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/user.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/utf8conv.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/yesno.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/yppasswd_xdr.Po@am__quote@ + +.c.o: +@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(COMPILE) -c $< + +.c.obj: +@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` +@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'` + +.c.lo: +@am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $< + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs + +ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonemtpy = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + mkid -fID $$unique +tags: TAGS + +TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + tags=; \ + here=`pwd`; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$tags $$unique; \ + fi +ctags: CTAGS +CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + tags=; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + test -z "$(CTAGS_ARGS)$$tags$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$tags $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && cd $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) $$here + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ + fi; \ + cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ + else \ + test -f $(distdir)/$$file \ + || cp -p $$d/$$file $(distdir)/$$file \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-am +all-am: Makefile $(LIBRARIES) $(HEADERS) +installdirs: +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + +clean-generic: + -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-generic clean-libtool clean-noinstLIBRARIES \ + mostlyclean-am + +distclean: distclean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +distclean-am: clean-am distclean-compile distclean-generic \ + distclean-tags + +dvi: dvi-am + +dvi-am: + +html: html-am + +info: info-am + +info-am: + +install-data-am: + +install-dvi: install-dvi-am + +install-exec-am: + +install-html: install-html-am + +install-info: install-info-am + +install-man: + +install-pdf: install-pdf-am + +install-ps: install-ps-am + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-compile mostlyclean-generic \ + mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: + +.MAKE: install-am install-strip + +.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ + clean-libtool clean-noinstLIBRARIES ctags distclean \ + distclean-compile distclean-generic distclean-libtool \ + distclean-tags distdir dvi dvi-am html html-am info info-am \ + install install-am install-data install-data-am install-dvi \ + install-dvi-am install-exec install-exec-am install-html \ + install-html-am install-info install-info-am install-man \ + install-pdf install-pdf-am install-ps install-ps-am \ + install-strip installcheck installcheck-am installdirs \ + maintainer-clean maintainer-clean-generic mostlyclean \ + mostlyclean-compile mostlyclean-generic mostlyclean-libtool \ + pdf pdf-am ps ps-am tags uninstall uninstall-am + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/lib/authentication.c b/lib/authentication.c new file mode 100644 index 0000000..af05997 --- /dev/null +++ b/lib/authentication.c @@ -0,0 +1,106 @@ +/* Copyright (C) 2002, 2003, 2004, 2005 Thorsten Kukuk + Author: Thorsten Kukuk + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License version 2 as + published by the Free Software Foundation. + + 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ + + +#ifdef HAVE_CONFIG_H +#include +#endif + +#include +#include +#include +#include +#include +#include + +#include "i18n.h" +#include "public.h" +#include "logindefs.h" + +int +do_authentication (const char *prog, const char *caller, user_t *pw_data) +{ + /* If the user needs to authenticate itself, let PAM do the job. */ + pam_handle_t *pamh = NULL; + struct pam_conv conv = { misc_conv, NULL }; + int retcode; + const char *cp; + + retcode = pam_start (prog, caller, &conv, &pamh); + if (retcode != PAM_SUCCESS) + { + openlog (prog, LOG_PID, LOG_AUTHPRIV); + fprintf (stderr, _("%s: PAM Failure, aborting: %s\n"), + prog, pam_strerror (pamh, retcode)); + syslog (LOG_ERR, "Couldn't initialize PAM: %s", + pam_strerror (pamh, retcode)); + return 1; + } + + retcode = pam_authenticate (pamh, 0); + if (retcode != PAM_SUCCESS) + { + bailout: + openlog (prog, LOG_PID, LOG_AUTHPRIV); + syslog (LOG_ERR, "User %s: %s", caller, + pam_strerror (pamh, retcode)); + sleep (getlogindefs_num ("FAIL_DELAY", 1)); + fprintf(stderr, "%s\n", pam_strerror (pamh, retcode)); + return 1; + } + + retcode = pam_acct_mgmt (pamh, 0); + if (retcode == PAM_NEW_AUTHTOK_REQD) + retcode = pam_chauthtok (pamh, PAM_CHANGE_EXPIRED_AUTHTOK); + if (retcode != PAM_SUCCESS) + goto bailout; + + retcode = pam_setcred (pamh, 0); + if (retcode != PAM_SUCCESS) + goto bailout; + + if (pw_data) + { + cp = pam_getenv (pamh, "PAM_AUTHTOK"); + if (cp) + pw_data->oldclearpwd = strdup (cp); + } + + pam_end (pamh, 0); + + openlog (prog, LOG_PID, LOG_AUTHPRIV); + + return 0; +} + +int +get_old_clear_password (user_t *pw_data) +{ + /* If we don't have the clear password, the user don't need to + authenticate or we don't use a PAM module which gives us the + password. */ + if (pw_data->oldclearpwd == NULL) + { + char prompt[130]; + char *cp; + + snprintf (prompt, sizeof (prompt), _("Enter login(%s) password:"), + nsw2str (pw_data->service)); + cp = getpass (prompt); + pw_data->oldclearpwd = strdup (cp); + } + return 0; +} diff --git a/lib/call_script.c b/lib/call_script.c new file mode 100644 index 0000000..3a8f5ff --- /dev/null +++ b/lib/call_script.c @@ -0,0 +1,82 @@ +/* Copyright (C) 2003, 2004, 2005, 2008 Thorsten Kukuk + Author: Thorsten Kukuk + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License version 2 as + published by the Free Software Foundation. + + 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ + +#ifdef HAVE_CONFIG_H +#include +#endif + +#include +#include +#include +#include +#include +#include +#include + +#include "i18n.h" +#include "public.h" +#include "logging.h" +#include "logindefs.h" + +/* call_script reads the command to be called for "variable" + from /etc/login.defs. */ +int +call_script (const char *variable, const char *name, uid_t uid, + gid_t gid, const char *home, const char *program) +{ + const char *script; + int status; + pid_t child_pid; + + script = getlogindefs_str (variable, NULL); + + if (script == NULL || *script == '\0') + return 0; + + sec_log (program, MSG_CALL_SCRIPT, + variable, script, name, uid, gid, home?home:"", getuid ()); + + switch ((child_pid = fork ())) + { + case 0: /* Child. */ + { + char *uid_s, *gid_s; + + if (asprintf (&uid_s, "%u", uid) < 0) + return ENOMEM; + if (asprintf (&gid_s, "%u", gid) < 0) + return ENOMEM; + + execl (script, script, name, uid_s, gid_s, home, (char *) 0); + perror (script); + _exit (1); + } + case -1: /* Error occurs. */ + fprintf (stderr, _("Cannot fork: %s\n"), strerror (errno)); + return -1; + break; + default: /* Parent. */ + while (waitpid (child_pid, &status, 0) == -1) + { + int err = errno; + if (err != EINTR) + fprintf (stderr, _("waitpid (%d) failed: %s\n"), + child_pid, strerror (err)); + } + break; + } + return status; +} diff --git a/lib/check_home.c b/lib/check_home.c new file mode 100644 index 0000000..b738ebc --- /dev/null +++ b/lib/check_home.c @@ -0,0 +1,39 @@ +/* Copyright (C) 2003 Thorsten Kukuk + Author: Thorsten Kukuk + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License version 2 as + published by the Free Software Foundation. + + 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include +#include +#include + +#include "public.h" + +/* Check, if new home directory is a valid path. Don't allow + files or special passwd delimeter in path. */ +int +check_home (const char *home) +{ + struct stat st; + + if (strcspn (home, ":\n") != strlen (home) || *home != '/' || + (stat (home, &st) == 0 && !S_ISDIR(st.st_mode))) + return -1; + + return 0; +} diff --git a/lib/check_name.c b/lib/check_name.c new file mode 100644 index 0000000..2ec6723 --- /dev/null +++ b/lib/check_name.c @@ -0,0 +1,80 @@ +/* Copyright (C) 2003, 2004, 2005, 2008 Thorsten Kukuk + Author: Thorsten Kukuk + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License version 2 as + published by the Free Software Foundation. + + 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include +#include +#include +#include + +#include "i18n.h" +#include "public.h" +#include "logindefs.h" + +/* Return 0 if name is POSIX conform, -1 else. */ +int +check_name (const char *name) +{ + const char *class; + regex_t reg; + int result; + char *buf; + + /* The login name/group name should not be longer than the space we + have for it in the utmp entry. */ + if (strlen (name) > UT_NAMESIZE) + return -1; + + /* User/group names must match [A-Za-z_][A-Za-z0-9_-.]*[A-Za-z0-9_-.$]?. + This is the POSIX portable character class. The $ at the end is + needed for SAMBA. But user can also specify something else in + /etc/login.defs. */ + class = getlogindefs_str ("CHARACTER_CLASS", + "[A-Za-z_][A-Za-z0-9_.-]*[A-Za-z0-9_.$-]\\?"); + + if (class == NULL || strlen (class) == 0) + return 0; + + if (asprintf (&buf, "^%s$", class) < 0) + return -1; + + memset (®, 0, sizeof (regex_t)); + result = regcomp (®, buf, 0); + free (buf); + + if (result) + { + size_t length = regerror (result, ®, NULL, 0); + char *buffer = malloc (length); + if (buffer == NULL) + fputs ("running out of memory!\n", stderr); + else + { + regerror (result, ®, buffer, length); + fprintf (stderr, _("Can't compile regular expression: %s\n"), + buffer); + return -1; + } + } + + if (regexec (®, name, 0, NULL, 0) != 0) + return -1; + + return 0; +} diff --git a/lib/chown_dir_rec.c b/lib/chown_dir_rec.c new file mode 100644 index 0000000..259062b --- /dev/null +++ b/lib/chown_dir_rec.c @@ -0,0 +1,109 @@ +/* Copyright (C) 2003, 2005, 2012 Thorsten Kukuk + Author: Thorsten Kukuk + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License version 2 as + published by the Free Software Foundation. + + 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include +#include +#include +#include +#include +#include +#include + +#include "i18n.h" +#include "public.h" + +static inline int +chown_entry (const char *entry, struct stat *st, + uid_t old_uid, uid_t new_uid, gid_t old_gid, gid_t new_gid) +{ + uid_t use_uid; + gid_t use_gid; + + if (st->st_uid == old_uid) + use_uid = new_uid; + else + use_uid = st->st_uid; + + if (st->st_gid == old_gid) + use_gid = new_gid; + else + use_gid = st->st_gid; + + if (use_uid != st->st_uid || use_gid != st->st_gid) + { + if (lchown (entry, use_uid, use_gid) < 0) + { + fprintf (stderr, + _("Cannot change owner/group for `%s': %s\n"), + entry, strerror (errno)); + return -1; + } + } + return 0; +} + +/* This function walks a directory tree and changes the ownership + and group of all files owned by the provided old ID's. */ +int +chown_dir_rec (const char *src, uid_t old_uid, uid_t new_uid, + gid_t old_gid, gid_t new_gid) +{ + struct dirent *entry; + DIR *dir = opendir (src); + struct stat st; + int retval = 0; + + if (dir == NULL) + return -1; + + while ((entry = readdir (dir)) != NULL) + { + /* Skip "." and ".." directory entries. */ + if (strcmp (entry->d_name, ".") == 0 || + strcmp (entry->d_name, "..") == 0) + continue; + else + { + char srcfile[strlen (src) + strlen (entry->d_name) + 2]; + char *cp; + + /* create source and destination filename with full path. */ + cp = stpcpy (srcfile, src); + *cp++ = '/'; + strcpy (cp, entry->d_name); + + if (lstat (srcfile, &st) != 0) + continue; + + if (S_ISDIR(st.st_mode)) + retval = chown_dir_rec (srcfile, old_uid, new_uid, + old_gid, new_gid); + else + retval = chown_entry (srcfile, &st, old_uid, new_uid, + old_gid, new_gid); + } + } + + if (lstat (src, &st) == 0) + retval = chown_entry (src, &st, old_uid, new_uid, old_gid, new_gid); + + closedir (dir); + return retval; +} diff --git a/lib/copy_dir_rec.c b/lib/copy_dir_rec.c new file mode 100644 index 0000000..158f6ef --- /dev/null +++ b/lib/copy_dir_rec.c @@ -0,0 +1,224 @@ +/* Copyright (C) 2003, 2005, 2010 Thorsten Kukuk + Author: Thorsten Kukuk + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License version 2 as + published by the Free Software Foundation. + + 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include +#include +#include +#include +#include +#include +#include + +#include "i18n.h" +#include "public.h" + +/* Recursive copy of a directory. Return values: + -1: Error occured, remove the tree. + 0: No error. + 1: There was on error in a deeper level, this is only informative. +*/ +int +copy_dir_rec (const char *src, const char *dst, int preserve_id, + uid_t uid, gid_t gid) +{ + struct dirent *entry; + DIR *dir = opendir (src); + int retval = 0; + + if (dir == NULL) + return -1; + + while ((entry = readdir (dir)) != NULL) + { + /* Skip "." and ".." directory entries. */ + if (strcmp (entry->d_name, ".") == 0 || + strcmp (entry->d_name, "..") == 0) + continue; + else + { + char srcfile[strlen (src) + strlen (entry->d_name) + 2]; + char dstfile[strlen (dst) + strlen (entry->d_name) + 2]; + struct stat st; + char *cp; + + /* create source and destination filename with full path. */ + cp = stpcpy (srcfile, src); + *cp++ = '/'; + strcpy (cp, entry->d_name); + + cp = stpcpy (dstfile, dst); + *cp++ = '/'; + strcpy (cp, entry->d_name); + + if (lstat (srcfile, &st) != 0) + continue; + + if (S_ISCHR(st.st_mode) || S_ISBLK(st.st_mode)) + { + if (mknod (dstfile, st.st_mode & ~07777, st.st_rdev) != 0) + { + fprintf (stderr, _("Can't create `%s': %m\n"), + dstfile); + retval = 1; + } + else if (chown (dstfile, + preserve_id ? st.st_uid : uid, + preserve_id ? st.st_gid : gid) != 0 || + chmod (dstfile, st.st_mode & 07777) != 0) + { + unlink (dstfile); + retval = 1; + } + else if (copy_xattr (srcfile, dstfile) != 0) + { + unlink (dstfile); + retval = 1; + } + } + else if (S_ISDIR(st.st_mode)) + { + if (mkdir (dstfile, 0) != 0) + { + fprintf (stderr, _("Cannot create directory `%s': %s\n"), + dstfile, strerror (errno)); + retval = 1; + } + else + { + retval = copy_dir_rec (srcfile, dstfile, + preserve_id, uid, gid); + if (retval < 0 || + chown (dstfile, + preserve_id ? st.st_uid : uid, + preserve_id ? st.st_gid : gid) != 0 || + chmod (dstfile, st.st_mode & 07777) != 0) + { + fprintf (stderr, _("Cannot change permissions for `%s': %s\n"), + dstfile, strerror (errno)); + /* An error occured, remove the new subtree. */ + remove_dir_rec (dstfile); + retval = 1; + } + else if (copy_xattr (srcfile, dstfile) != 0) + { + remove_dir_rec (dstfile); + retval = 1; + } + } + } + else if (S_ISLNK(st.st_mode)) + { + char buffer[4096]; + int len = readlink (srcfile, buffer, sizeof (buffer)); + + if (len < 0) + retval = 1; + else + { + buffer[len] = '\0'; + if (symlink (buffer, dstfile) != 0) + { + fprintf (stderr, _("Cannot create symlink `%s': %s\n"), + dstfile, strerror (errno)); + retval = 1; + } + else if (lchown (dstfile, + preserve_id ? st.st_uid : uid, + preserve_id ? st.st_gid : gid) != 0) + { + fprintf (stderr, + _("Cannot change owner/group for `%s': %s\n"), + dstfile, strerror (errno)); + unlink (dstfile); + retval = 1; + } + else if (copy_xattr (srcfile, dstfile) != 0) + { + unlink (dstfile); + retval = 1; + } + } + } + else if (S_ISREG(st.st_mode)) + /* Here we should only copy regular files. */ + { + int src_fd, dst_fd; + + src_fd = open (srcfile, O_RDONLY); + if (src_fd < 0) + { + retval = 1; + continue; + } + dst_fd = open (dstfile, O_WRONLY|O_CREAT|O_TRUNC, 0); + if (dst_fd < 0) + { + close (src_fd); + retval = 1; + } + else + { + char buffer[4096]; + int cnt; + + while ((cnt = read (src_fd, buffer, sizeof (buffer))) > 0) + { + if (write (dst_fd, buffer, cnt) != cnt) + { + fprintf (stderr, _("Cannot copy `%s': %s\n"), + srcfile, strerror (errno)); + cnt = -1; + break; + } + } + close (src_fd); + close (dst_fd); + if (cnt < 0 /* Remove file if copy failed. */ || + chown (dstfile, + preserve_id ? st.st_uid : uid, + preserve_id ? st.st_gid : gid) != 0 || + chmod (dstfile, st.st_mode & 07777)) + { + fprintf (stderr, _("Cannot change permissions for `%s': %s\n"), + dstfile, strerror (errno)); + unlink (dstfile); + retval = 1; + } + else if (copy_xattr (srcfile, dstfile) != 0) + { + unlink (dstfile); + retval = 1; + } + } + } + else + { + /* skip all other types: FIFO, socket, ... */ + fprintf (stderr, + _("Warning: ignoring `%s', not a regular file\n"), + srcfile); + } + } + } + + closedir (dir); + + return retval; +} diff --git a/lib/copy_xattr.c b/lib/copy_xattr.c new file mode 100644 index 0000000..0f08986 --- /dev/null +++ b/lib/copy_xattr.c @@ -0,0 +1,169 @@ +/* Copyright (C) 2003, 2004, 2005 Thorsten Kukuk + Author: Thorsten Kukuk + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License version 2 as + published by the Free Software Foundation. + + 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ + + +#ifdef HAVE_CONFIG_H +#include +#endif + +#include +#include +#include + +#if defined HAVE_SYS_XATTR_H +#include +#elif defined HAVE_ATTR_XATTR_H +#include +#include +#elif defined WITH_SELINUX +#include +#endif + +#include "i18n.h" +#include "public.h" + +int +copy_xattr (const char *from, const char *to) +{ + + if (from == NULL || to == NULL) + return -1; + +#if defined(HAVE_LLISTXATTR) && defined(HAVE_LGETXATTR) && defined(HAVE_LSETXATTR) + ssize_t size = llistxattr (from, NULL, 0); + if (size < 0) + { + if (errno != ENOSYS && errno != ENOTSUP) + { + fprintf (stderr, _("Cannot get attributes for `%s': %m\n"), from); + return -1; + } + } + else + { + char *name = NULL, *end_names = NULL, *value = NULL; + char *names = malloc (size + 1); + + if (names == NULL) + { + fputs ("running out of memory!\n", stderr); + return -1; + } + + size = llistxattr (from, names, size); + if (size < 0) + { + fprintf (stderr, _("Cannot get attributes for `%s': %m\n"), from); + if (value) + free (value); + free (names); + return -1; + } + else + { + names[size] = '\0'; + end_names = names + size; + } + + for (name = names; name != end_names; + name = strchr (name, '\0') + 1) + { + char *old_value; + + /* check if this attribute shall be preserved */ + if (!*name) + continue; + + size = lgetxattr (from, name, NULL, 0); + if (size < 0) + { + fprintf (stderr, _("Cannot get attribute %s of `%s': %m\n"), + name, from); + if (value) + free (value); + free (names); + return -1; + } + + value = realloc (old_value = value, size); + if (size != 0 && value == NULL) + { + fputs ("running out of memory!\n", stderr); + free (old_value); + free (names); + return -1; + } + + size = lgetxattr (from, name, value, size); + if (size < 0) + { + fprintf (stderr, _("Cannot get attribute %s of `%s': %m\n"), + name, from); + if (value) + free (value); + free (names); + return -1; + } + + if (lsetxattr (to, name, value, size, 0) != 0) + { +#if defined(WITH_SELINUX) + if (strcmp (name, "security.selinux") == 0 && + is_selinux_enabled() == 0) + fprintf (stderr, + _("SELinux not enabled, ignore attribute %s for `%s'.\n"), + name, to); + + else +#endif + { + fprintf (stderr, _("Cannot set attribute %s for `%s': %m\n"), + name, to); + if (value) + free (value); + free (names); + return -1; + } + } + } + if (value) + free (value); + free (names); + } +#elif defined(WITH_SELINUX) + if (is_selinux_enabled () > 0) + { + security_context_t passwd_context = NULL; + int ret; + + if (getfilecon (file, &passwd_context) < 0) + { + fprintf (stderr, _("%s: Can't get context for `%s'"), program, file); + return -1; + } + ret = setfilecon (tmpname, passwd_context); + freecon (passwd_context); + if (ret != 0) + { + fprintf (stderr, _("%s: Can't set context for `%s'"), + progname, tmpname); + return -1; + } + } +#endif + + return 0; +} diff --git a/lib/date2str.c b/lib/date2str.c new file mode 100644 index 0000000..0bb09e9 --- /dev/null +++ b/lib/date2str.c @@ -0,0 +1,43 @@ +/* Copyright (C) 2003 Thorsten Kukuk + Author: Thorsten Kukuk + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License version 2 as + published by the Free Software Foundation. + + 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include +#include +#include + +#include "public.h" + +/* convert time_t into a readable date string. */ +char * +date2str (time_t date) +{ + struct tm *tp; + char buf[12]; + + tp = gmtime (&date); +#ifdef HAVE_STRFTIME + strftime (buf, sizeof (buf), "%Y-%m-%d", tp); +#else + snprintf (buf, sizeof (buf), "%04d-%02d-%02d", + tp->tm_year + 1900, tp->tm_mon + 1, tp->tm_mday); +#endif + return strdup (buf); +} + diff --git a/lib/dbg_log.c b/lib/dbg_log.c new file mode 100644 index 0000000..7950908 --- /dev/null +++ b/lib/dbg_log.c @@ -0,0 +1,70 @@ +/* Copyright (c) 1998, 2000 Free Software Foundation, Inc. + This file is part of the GNU C Library. + Contributed by Thorsten Kukuk , 1998. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, write to the Free + Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA + 02111-1307 USA. */ + +#ifdef HAVE_CONFIG_H +#include +#endif + +#include +#include +#include +#include +#include "dbg_log.h" + +/* if in debug mode and we have a debug file, we write the messages to it, + if in debug mode and no debug file, we write the messages to stderr, + else to syslog. */ + +static FILE *dbgout; +int debug_level; + +int +set_logfile (const char *logfile) +{ + dbgout = fopen (logfile, "a"); + return dbgout == NULL ? 0 : 1; +} + +void +dbg_log (const char *fmt,...) +{ + va_list ap; + char msg[512], msg2[512]; + + va_start (ap, fmt); + vsnprintf (msg2, sizeof (msg), fmt, ap); + + if (debug_level > 0) + { + snprintf (msg, sizeof (msg), "%d: %s\n", getpid (), msg2); + if (dbgout) + { + fputs (msg, dbgout); + fflush (dbgout); + } + else + fputs (msg, stderr); + } + else + { + snprintf (msg, sizeof (msg), "%d: %s", getpid (), msg2); + syslog (LOG_NOTICE, "%s", msg); + } + va_end (ap); +} diff --git a/lib/dbg_log.h b/lib/dbg_log.h new file mode 100644 index 0000000..705aa02 --- /dev/null +++ b/lib/dbg_log.h @@ -0,0 +1,30 @@ +/* Copyright (c) 1998, 2000 Free Software Foundation, Inc. + This file is part of the GNU C Library. + Contributed by Thorsten Kukuk , 1998. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, write to the Free + Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA + 02111-1307 USA. */ + +#ifndef _DBG_LOG_H +#define _DBG_LOG_H 1 + +extern int debug_level; + +extern void dbg_log (const char *str, ...) + __attribute__ ((__format__ (__printf__, 1, 2)));; + +extern int set_logfile (const char *logfile); + +#endif diff --git a/lib/error_codes.h b/lib/error_codes.h new file mode 100644 index 0000000..a5f2ea8 --- /dev/null +++ b/lib/error_codes.h @@ -0,0 +1,50 @@ +/* Copyright (C) 2002, 2003 Thorsten Kukuk + Author: Thorsten Kukuk + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License version 2 as + published by the Free Software Foundation. + + 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ + +#ifndef __ERROR_CODES_H__ +#define __ERROR_CODES_H__ + +/* + * exit status values + */ + +#define E_SUCCESS 0 /* Success */ +#define E_NOPERM 1 /* Permission denied */ +#define E_USAGE 2 /* Invalid combination of options */ +#define E_FAILURE 3 /* Unexpected failure, nothing done */ +#define E_MISSING 4 /* Unexpected failure, passwd file missing */ +#define E_PWDBUSY 5 /* passwd file busy, try again later */ +#define E_BAD_ARG 6 /* Invalid argument to option */ +#define E_PAM_ERROR 7 /* PAM returns with an error */ +#define E_NO_LOCAL_USER 8 /* The user is not in the local shadow file */ +#define E_NAME_IN_USE 9 /* The user does already exist */ +#define E_GRP_UPDATE 10 /* Updating group file failed */ +#define E_UID_IN_USE 11 /* The given user ID does already exist */ +#define E_HOMEDIR 12 /* Cannot create Home Directory */ +#define E_LOGIN_DEFS 13 /* /etc/login.defs read/write failure */ +#define E_NOTFOUND 14 /* Specified group not found */ +#define E_USER_BUSY 15 /* User currently logged in */ +#define E_GID_IN_USE 16 /* The given group ID does already exist */ +#define E_GROUP_BUSY 17 /* Group is primary group of an user */ +#define E_NO_SHADOW 18 /* User does not have a shadow entry */ +#define E_MAIL_SPOOL 19 /* Can't create mail spool */ + +#define E_WRONG_VERSION 21 /* Protocol mismatch on server */ +#define E_UNKNOWN_USER 22 /* User is not known on server */ +#define E_SSL_FAILURE 23 /* SSL error, nothing done */ + +#endif + diff --git a/lib/get_caller_dn.c b/lib/get_caller_dn.c new file mode 100644 index 0000000..d61846e --- /dev/null +++ b/lib/get_caller_dn.c @@ -0,0 +1,50 @@ +/* Copyright (C) 2004, 2005 Thorsten Kukuk + Author: Thorsten Kukuk + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License version 2 as + published by the Free Software Foundation. + + 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ + +#if defined(HAVE_CONFIG_H) +#include "config.h" +#endif + +#ifdef USE_LDAP + +#include +#include + +#include "i18n.h" +#include "libldap.h" + +char * +get_caller_dn (void) +{ + /* A user tries to add an account stored in a LDAP database and + knows the Manager dn, now we need the password from him. */ + ldap_session_t *session = create_ldap_session (LDAP_PATH_CONF); + struct passwd *pw; + char *cp; + + if (session == NULL) + return NULL; + + pw = getpwuid (getuid ()); + + cp = convert_user_to_dn (session, strdupa (pw->pw_name)); + + close_ldap_session (session); + + return cp; +} + +#endif diff --git a/lib/get_ldap_password.c b/lib/get_ldap_password.c new file mode 100644 index 0000000..c66cdbf --- /dev/null +++ b/lib/get_ldap_password.c @@ -0,0 +1,52 @@ +/* Copyright (C) 2004, 2005 Thorsten Kukuk + Author: Thorsten Kukuk + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License version 2 as + published by the Free Software Foundation. + + 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ + +#if defined(HAVE_CONFIG_H) +#include "config.h" +#endif + +#ifdef USE_LDAP + +#include + +#include "i18n.h" +#include "libldap.h" + +char * +get_ldap_password (const char *binddn) +{ + /* A user tries to add an account stored in a LDAP database and + knows the Manager dn, now we need the password from him. */ + ldap_session_t *session = create_ldap_session (LDAP_PATH_CONF); + char *cp; + + if (session == NULL) + return NULL; + + cp = getpass (_("Enter LDAP Password:")); + + if (open_ldap_session (session) != 0) + return NULL; + + if (ldap_authentication (session, NULL, binddn, cp) != 0) + return NULL; + + close_ldap_session (session); + + return cp; +} + +#endif diff --git a/lib/get_value.c b/lib/get_value.c new file mode 100644 index 0000000..6a9f8ec --- /dev/null +++ b/lib/get_value.c @@ -0,0 +1,96 @@ +/* Copyright (C) 2002, 2004 Thorsten Kukuk + Author: Thorsten Kukuk + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License version 2 as + published by the Free Software Foundation. + + 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ + + +#ifdef HAVE_CONFIG_H +#include +#endif + +#include +#include +#include + +#include "public.h" +#include "utf8conv.h" + +/* prompt the user with the name of the field being changed and the + current value. + return value: + NULL -> Ctrl-D was pressed + "" -> Field was cleard by user. User can enter a space or + "none" to do this. + oldf -> User entered only . + newf -> User entered something new . */ +char * +get_value (const char *oldf, const char *prompt) +{ + char newf[BUFSIZ]; + char *cp; + char *locstr; + + locstr = oldf ? utf8_to_locale (oldf) : strdup (""); + printf ("\t%s [%s]: ", prompt, locstr); + free (locstr); + if (fgets(newf, sizeof (newf), stdin) != newf) + { + /* print newline to get defined output. */ + printf ("\n"); + return NULL; + } + + if ((cp = strchr(newf, '\n')) != NULL) + *cp = '\0'; + + if (newf[0]) /* something is entered */ + { + /* if none is entered, return an empty string. If somebody + wishes to enter "none", he as to add a space. */ + if (strcasecmp ("none", newf) == 0) + return strdup (""); + + /* Remove leading and trailing whitespace. This also + makes it possible to change the field to empty or + "none" by entering a space. */ + + /* cp should point to the trailing '\0'. */ + cp = &newf[strlen(newf)]; + + while (--cp >= newf && isspace(*cp)) + ; + *++cp = '\0'; + + cp = newf; + while (*cp && isspace(*cp)) + cp++; + + return locale_to_utf8 (cp); + } + return strdup (oldf ?:""); +} + +#ifdef TEST +int +main (int argc, char **argv) +{ + char *cp; + + cp = get_value ("test", "t1"); + + printf("cp=\"%s\"\n", cp); + + return 0; +} +#endif diff --git a/lib/group.c b/lib/group.c new file mode 100644 index 0000000..1c7b376 --- /dev/null +++ b/lib/group.c @@ -0,0 +1,712 @@ +/* Copyright (C) 2003, 2005, 2010 Thorsten Kukuk + Author: Thorsten Kukuk + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License version 2 as + published by the Free Software Foundation. + + 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ + + +#ifdef HAVE_CONFIG_H +#include +#endif + +#include +#include +#include +#include +#include +#include +#include + +#ifdef USE_LDAP +#ifdef HAVE_LDAP_H +#include +#endif +#include "libldap.h" +#endif + +#include "nsw.h" +#include "i18n.h" +#include "group.h" +#include "yppasswd.h" +#include "read-files.h" + +void +free_group_t (group_t *data) +{ + unsigned int i; + + if (data == NULL) + return; + + if (data->new_name) + free (data->new_name); + if (data->grpbuffer) + free (data->grpbuffer); + if (data->newpassword) + free (data->newpassword); + if (data->oldclearpwd) + free (data->oldclearpwd); + if (data->new_gr_mem) + { + for (i = 0; data->new_gr_mem[i]; i++) + { + if (data->new_gr_mem[i]) + free (data->new_gr_mem[i]); + } + free (data->new_gr_mem); + } + if (data->binddn) + free (data->binddn); + free (data); +} + +group_t * +find_group_data (const char *name, gid_t gid, const char *use_service) +{ + enum nss_status (*nss_getgrnam_r)(const char *gr_name, struct group *grp, + char *buffer, size_t buflen, int *errnop); + enum nss_status (*nss_getgrgid_r)(gid_t grpid, struct group *grp, + char *buffer, size_t buflen, int *errnop); + enum nss_status status; + void *nss_handle = NULL; + group_t *data; + struct nsw *nswp; + int i; + + data = calloc (1, sizeof (group_t)); + if (data == NULL) + return NULL; + + data->service = S_NONE; + + /* UNIX passwords area */ + if (use_service) + { + nswp = calloc (1, sizeof (struct nsw)); + if (nswp == NULL) + return data; + + nswp->name = strdup ("group"); + nswp->orderc = 1; + nswp->orders = calloc (2, sizeof (char *)); + nswp->orders[0] = strdup (use_service); + nswp->orders[1] = NULL; + } + else + nswp = _getnswbyname ("group"); + if (nswp == NULL) + return data; + + for (i = 0; i < nswp->orderc; ++i) + { + const char *cmpptr = nswp->orders[i]; + + again: + + if (nswp->orders[i][0] == '[') + continue; + if (strcasecmp ("files", cmpptr) == 0 || + strcasecmp ("compat", cmpptr) == 0) + { + nss_getgrnam_r = files_getgrnam_r; + nss_getgrgid_r = files_getgrgid_r; + /* Get group file entry... */ + do { + errno = 0; + data->grpbuflen += 1024; + data->grpbuffer = realloc (data->grpbuffer, data->grpbuflen); + if (name) + status = (*nss_getgrnam_r)(name, &data->gr, data->grpbuffer, + data->grpbuflen, &errno); + else + status = (*nss_getgrgid_r)(gid, &data->gr, data->grpbuffer, + data->grpbuflen, &errno); + + } while (status == NSS_STATUS_TRYAGAIN && errno == ERANGE); + + if (status != NSS_STATUS_SUCCESS) + { + free (data->grpbuffer); + data->grpbuffer = NULL; + data->grpbuflen = 0; + if (strcasecmp ("compat", cmpptr) == 0) + { + struct nsw *nswp2 = _getnswbyname ("group_compat"); + + if (nswp2 == NULL) + cmpptr = "nis"; + else + { + char *cp = alloca (strlen (nswp2->orders[0]) + 1); + strcpy (cp, nswp2->orders[0]); + cmpptr = cp; + nsw_free (nswp2); + } + goto again; + } + } + else + { + data->service = S_LOCAL; + break; + } + } + else if (strcasecmp ("nis", cmpptr) == 0 || + strcasecmp ("yp", cmpptr) == 0) + { + nss_handle = dlopen ("libnss_nis.so.2", RTLD_NOW); + if (!nss_handle) + continue; + nss_getgrnam_r = dlsym (nss_handle, "_nss_nis_getgrnam_r"); + nss_getgrgid_r = dlsym (nss_handle, "_nss_nis_getgrgid_r"); + if (dlerror () != NULL) + { + dlclose (nss_handle); + continue; + } + + /* Get NIS group entry... */ + do { + errno = 0; + data->grpbuflen += 1024; + data->grpbuffer = realloc (data->grpbuffer, data->grpbuflen); + if (name) + status = (*nss_getgrnam_r)(name, &data->gr, data->grpbuffer, + data->grpbuflen, &errno); + else + status = (*nss_getgrgid_r)(gid, &data->gr, data->grpbuffer, + data->grpbuflen, &errno); + } while (status == NSS_STATUS_TRYAGAIN && errno == ERANGE); + + if (status != NSS_STATUS_SUCCESS) + { + dlclose (nss_handle); + free (data->grpbuffer); + data->grpbuffer = NULL; + data->grpbuflen = 0; + } + else + { + data->service = S_YP; + break; + } + } + else if (strcasecmp ("nisplus", cmpptr) == 0 || + strcasecmp ("nis+", cmpptr) == 0) + { + nss_handle = dlopen ("libnss_nisplus.so.2", RTLD_NOW); + if (!nss_handle) + continue; + nss_getgrnam_r = dlsym (nss_handle, "_nss_nisplus_getgrnam_r"); + nss_getgrgid_r = dlsym (nss_handle, "_nss_nisplus_getgrgid_r"); + if (dlerror () != NULL) + { + dlclose (nss_handle); + continue; + } + + /* Get group NIS+ entry... */ + do { + errno = 0; + data->grpbuflen += 1024; + data->grpbuffer = realloc (data->grpbuffer, data->grpbuflen); + if (name) + status = (*nss_getgrnam_r)(name, &data->gr, data->grpbuffer, + data->grpbuflen, &errno); + else + status = (*nss_getgrgid_r)(gid, &data->gr, data->grpbuffer, + data->grpbuflen, &errno); + + } while (status == NSS_STATUS_TRYAGAIN && errno == ERANGE); + + if (status != NSS_STATUS_SUCCESS) + { + dlclose (nss_handle); + free (data->grpbuffer); + data->grpbuffer = NULL; + data->grpbuflen = 0; + } + else + { + data->service = S_NISPLUS; + break; + } + } +#ifdef USE_LDAP + else if (strcasecmp ("ldap", cmpptr) == 0) + { + nss_handle = dlopen ("libnss_ldap.so.2", RTLD_NOW); + if (!nss_handle) + continue; + nss_getgrnam_r = dlsym (nss_handle, "_nss_ldap_getgrnam_r"); + nss_getgrgid_r = dlsym (nss_handle, "_nss_ldap_getgrgid_r"); + if (dlerror () != NULL) + { + dlclose (nss_handle); + continue; + } + + /* Get LDAP group entry... */ + do { + errno = 0; + data->grpbuflen += 1024; + data->grpbuffer = realloc (data->grpbuffer, data->grpbuflen); + if (name) + status = (*nss_getgrnam_r)(name, &data->gr, data->grpbuffer, + data->grpbuflen, &errno); + else + status = (*nss_getgrgid_r)(gid, &data->gr, data->grpbuffer, + data->grpbuflen, &errno); + } while (status == NSS_STATUS_TRYAGAIN && errno == ERANGE); + + if (status != NSS_STATUS_SUCCESS) + { + dlclose (nss_handle); + free (data->grpbuffer); + data->grpbuffer = NULL; + data->grpbuflen = 0; + } + else + { + data->service = S_LDAP; + break; + } + } +#endif + } + + nsw_free (nswp); + + if (data->service != S_LOCAL && data->service != S_NONE) + dlclose (nss_handle); + + return data; +} + +int +write_group_data (group_t *data, int is_locked) +{ + int retval = 0; + + if (data->service == S_LOCAL) + { + if (!is_locked && lock_database() != 0) + { + fputs (_("Cannot lock group file: already locked.\n"), stderr); + retval = -1; + } + else if ((data->newpassword && !data->use_gshadow) || + data->new_gr_mem || data->have_new_gid || + data->new_name || data->todo == DO_CREATE || + data->todo == DO_DELETE) + { + /* Only run through /etc/group if we really have something to + change. */ + const char *file_tmp = "/group.tmpXXXXXX"; + char *group_tmp = alloca (strlen (files_etc_dir) + strlen (file_tmp) + 1); + char *group_orig = alloca (strlen (files_etc_dir) + 8); + char *group_old = alloca (strlen (files_etc_dir) + 12); + struct stat group_stat; + struct group *gr; /* group struct obtained from fgetgrent() */ + FILE *oldgf, *newgf; + int gotit, newgf_fd; + char *cp; + + cp = stpcpy (group_tmp, files_etc_dir); + strcpy (cp, file_tmp); + cp = stpcpy (group_orig, files_etc_dir); + strcpy (cp, "/group"); + cp = stpcpy (group_old, group_orig); + strcpy (cp, ".old"); + + if ((oldgf = fopen (group_orig, "r")) == NULL) + { + fprintf (stderr, _("Can't open `%s': %m\n"), group_orig); + retval = -1; + goto error_group; + } + if (fstat (fileno (oldgf), &group_stat) < 0) + { + fprintf (stderr, _("Can't stat `%s': %m\n"), group_orig); + fclose (oldgf); + retval = -1; + goto error_group; + } + +#ifdef WITH_SELINUX + security_context_t prev_context; + if (set_default_context (group_orig, &prev_context) < 0) + { + fclose (oldgf); + retval = -1; + goto error_group; + } +#endif + /* Open a temp group file */ + newgf_fd = mkstemp (group_tmp); +#ifdef WITH_SELINUX + if (restore_default_context (prev_context) < 0) + { + if (newgf_fd >= 0) + close (newgf_fd); + fclose (oldgf); + retval = -1; + goto error_group; + } +#endif + if (newgf_fd == -1) + { + fprintf (stderr, _("Can't create `%s': %m\n"), + group_orig); + fclose (oldgf); + retval = -1; + goto error_group; + } + if (fchmod (newgf_fd, group_stat.st_mode) < 0) + { + fprintf (stderr, + _("Cannot change permissions for `%s': %s\n"), + group_tmp, strerror (errno)); + fclose (oldgf); + close (newgf_fd); + unlink (group_tmp); + retval = -1; + goto error_group; + } + if (fchown (newgf_fd, group_stat.st_uid, group_stat.st_gid) < 0) + { + fprintf (stderr, + _("Cannot change owner/group for `%s': %s\n"), + group_tmp, strerror (errno)); + fclose (oldgf); + close (newgf_fd); + unlink (group_tmp); + retval = -1; + goto error_group; + } + if (copy_xattr (group_orig, group_tmp) != 0) + { + fclose (oldgf); + close (newgf_fd); + unlink (group_tmp); + retval = -1; + goto error_group; + } + + newgf = fdopen (newgf_fd, "w+"); + if (newgf == NULL) + { + fprintf (stderr, _("Can't open `%s': %m\n"), group_tmp); + fclose (oldgf); + close (newgf_fd); + unlink (group_tmp); + retval = -1; + goto error_group; + } + + gotit = 0; + + /* Loop over all group entries */ + while ((gr = fgetgrent (oldgf)) != NULL) + { + if (data->todo == DO_CREATE) + { + /* insert the new group before we find a group with a + higher GID or before we find a +/- character. */ + if (!gotit && + (/* data->gr.gr_gid < gr->gr_gid || XXX not yet? */ + gr->gr_name[0] == '+' || + gr->gr_name[0] == '-')) + { + /* write the group entry to tmp file */ + if (putgrent (&data->gr, newgf) < 0) + { + fprintf (stderr, + _("Error while writing `%s': %m\n"), + group_tmp); + fclose (oldgf); + fclose (newgf); + retval = -1; + goto error_group; + } + gotit = 1; + } + } + else if (data->todo == DO_DELETE) + { + if (data->gr.gr_gid == gr->gr_gid && + strcmp (data->gr.gr_name, gr->gr_name) == 0) + { + gotit = 1; + continue; + } + + } + else + { + /* check if this is the gid we want to change. A few + sanity checks added for consistency. */ + if (data->gr.gr_gid == gr->gr_gid && + !strcmp (data->gr.gr_name, gr->gr_name) && !gotit) + { + if (data->newpassword && !data->use_gshadow) + gr->gr_passwd = data->newpassword; + if (data->new_gr_mem) + gr->gr_mem = data->new_gr_mem; + if (data->have_new_gid) + gr->gr_gid = data->new_gid; + if (data->new_name) + gr->gr_name = data->new_name; + gotit = 1; + } + } + + /* write the group entry to tmp file */ + if (putgrent (gr, newgf) < 0) + { + fprintf (stderr, + _("Error while writing `%s': %m\n"), + group_tmp); + fclose (oldgf); + fclose (newgf); + retval = -1; + goto error_group; + } + } + if (data->todo == DO_CREATE && !gotit) + { + /* write the group entry to tmp file */ + if (putgrent (&data->gr, newgf) < 0) + { + fprintf (stderr, + _("Error while writing `%s': %m\n"), + group_tmp); + fclose (oldgf); + fclose (newgf); + retval = -1; + goto error_group; + } + } + else if (data->todo == DO_DELETE && !gotit) + { + fprintf (stderr, + _("Group not found (and not deleted): %s\n"), + data->gr.gr_name); + retval = -1; + } + + if (fclose (oldgf) != 0) + { + fprintf (stderr, + _("Error while closing `%s': %m\n"), group_orig); + fclose (newgf); + retval = -1; + goto error_group; + } + + if (fflush (newgf) != 0) + { + fprintf (stderr, + _("Error while writing to disk `%s': %m\n"), + group_tmp); + fclose (newgf); + retval = -1; + goto error_group; + } + + if (fsync (fileno(newgf)) != 0) + { + fprintf (stderr, + _("Error while syncing to disk `%s': %m\n"), + group_tmp); + fclose (newgf); + retval = -1; + goto error_group; + } + + if (fclose (newgf) != 0) + { + fprintf (stderr, + _("Error while closing `%s': %m\n"), group_tmp); + retval = -1; + goto error_group; + } + unlink (group_old); + if (link (group_orig, group_old) < 0) + fprintf (stderr, + _("Warning: cannot create backup file `%s': %m\n"), + group_old); + if (rename (group_tmp, group_orig) < 0) + { + fprintf (stderr, + _("Error while renaming `%s': %m\n"), group_tmp); + retval = -1; + goto error_group; + } + error_group: + unlink (group_tmp); + } + + if (!is_locked) + ulckpwdf (); + } +#ifdef USE_LDAP + else if (data->service == S_LDAP) + { + ldap_session_t *session = NULL; + + session = create_ldap_session (LDAP_PATH_CONF); + + if (session == NULL) + retval = -1; + else + { + if (data->todo == DO_CREATE) + { + retval = ldap_create_group (session, &data->gr, + data->binddn, data->oldclearpwd); + } + else if (data->todo == DO_DELETE) + { + retval = ldap_delete_group (session, data->gr.gr_name, + data->binddn, data->oldclearpwd); + } + else + { + if (data->new_name) + { +#if 0 /* XXX does not work */ + retval = ldap_update_group (session, data->gr.gr_name, + data->binddn, data->oldclearpwd, + LDAP_MOD_REPLACE, "cn", + data->new_name); +#else + retval = -1; +#endif + } + if (data->have_new_gid) + { + char *buf; + + if (asprintf (&buf, "%u", data->new_gid) < 1) + { + if (retval == 0) + retval = LDAP_OTHER; + } + else + { + int rc; + rc = ldap_update_group (session, data->gr.gr_name, + data->binddn, data->oldclearpwd, + LDAP_MOD_REPLACE, "gidNumber", + buf); + free (buf); + if (retval == 0 && rc != LDAP_SUCCESS) + retval = rc; + } + } + if (data->new_gr_mem) + { + unsigned int i; + + /* At first, check if there is a new member and add this. */ + for (i = 0; data->new_gr_mem[i] != 0; i++) + { + unsigned int j; + int found = 0; + + for (j = 0; data->gr.gr_mem[j]; j++) + { + if (strcmp (data->new_gr_mem[i], + data->gr.gr_mem[j]) == 0) + { + found = 1; + break; + } + } + if (!found) + { + int rc; + int first = 0; + + if ( data->new_gr_mem[0] && !data->new_gr_mem[1] ) + { + first = 1; + } + rc = ldap_add_groupmember (session, data->gr.gr_name, + data->binddn, + data->oldclearpwd, + data->new_gr_mem[i],first); + if (retval == 0 && rc != 0) + retval = rc; + } + } + + /* Now check, if there are entries missing and delete + them. */ + for (i = 0; data->gr.gr_mem[i] != 0; i++) + { + unsigned int j; + int found = 0; + + for (j = 0; data->new_gr_mem[j]; j++) + { + if (strcmp (data->gr.gr_mem[i], + data->new_gr_mem[j]) == 0) + { + found = 1; + break; + } + } + if (!found) + { + int rc; + int last = 0; + + if (! data->new_gr_mem[0] ) + { + last = 1; + } + rc = ldap_del_groupmember (session, data->gr.gr_name, + data->binddn, + data->oldclearpwd, + data->gr.gr_mem[i], last); + if (retval == 0 && rc != 0) + retval = rc; + } + } + } + } + + if (retval != 0) + fprintf (stderr, + _("LDAP information update failed: %s\n"), + ldap_err2string (retval)); + + close_ldap_session (session); + } + } +#endif + else if (data->service == S_YP) + { + fprintf (stderr, _("Cannot modify/add NIS group entries.\n")); + retval = -1; + } + else + { + fprintf (stderr, _("Unknown service %d.\n"), data->service); + retval = -1; + } + + return retval; +} diff --git a/lib/group.h b/lib/group.h new file mode 100644 index 0000000..f5c3456 --- /dev/null +++ b/lib/group.h @@ -0,0 +1,50 @@ +/* Copyright (C) 2003, 2005 Thorsten Kukuk + Author: Thorsten Kukuk + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License version 2 as + published by the Free Software Foundation. + + 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ + +#ifndef __GROUP_H__ +#define __GROUP_H__ + +#include +#include +#include + +#ifndef __attribute_warn_unused_result__ +#define __attribute_warn_unused_result__ +#endif + +struct group_t { + todo_t todo; + char *grpbuffer; + size_t grpbuflen; + struct group gr; + int use_gshadow; + enum service_t service; + char *new_name; + int have_new_gid; + gid_t new_gid; + char *newpassword; + char *oldclearpwd; + char **new_gr_mem; + char *binddn; +}; +typedef struct group_t group_t; + +extern void free_group_t (group_t *data); +extern group_t *find_group_data (const char *group, gid_t gid, + const char *use_service); +extern int write_group_data (group_t *data, int is_locked) __attribute_warn_unused_result__; + +#endif /* __GROUP_H__ */ diff --git a/lib/i18n.h b/lib/i18n.h new file mode 100644 index 0000000..4873cc5 --- /dev/null +++ b/lib/i18n.h @@ -0,0 +1,33 @@ +/* Copyright (C) 2005 Thorsten Kukuk + Author: Thorsten Kukuk + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License version 2 as + published by the Free Software Foundation. + + 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ + +#ifndef __I18N_H__ +#define __I18N_H__ + +#ifdef ENABLE_NLS + +#include +#include + +#define _(String) gettext (String) + +#else + +#define _(String) String + +#endif /* ENABLE_NLS */ +#endif /* __I18N_H__ */ + diff --git a/lib/init_environment.c b/lib/init_environment.c new file mode 100644 index 0000000..859ce80 --- /dev/null +++ b/lib/init_environment.c @@ -0,0 +1,60 @@ +/* Copyright (C) 2003 Thorsten Kukuk + Author: Thorsten Kukuk + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License version 2 as + published by the Free Software Foundation. + + 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include +#include +#include + +#include "public.h" + +void +init_environment (void) +{ + struct rlimit rlim; + + /* Don't create a core file. */ + rlim.rlim_cur = rlim.rlim_max = 0; + setrlimit (RLIMIT_CORE, &rlim); + + /* Set all limits to unlimited to avoid to run in any + problems later. */ + rlim.rlim_cur = rlim.rlim_max = RLIM_INFINITY; + setrlimit (RLIMIT_AS, &rlim); + setrlimit (RLIMIT_CPU, &rlim); + setrlimit (RLIMIT_DATA, &rlim); + setrlimit (RLIMIT_FSIZE, &rlim); + setrlimit (RLIMIT_NOFILE, &rlim); + setrlimit (RLIMIT_RSS, &rlim); + setrlimit (RLIMIT_STACK, &rlim); + + /* Ignore all signals which can make trouble later. */ + signal (SIGALRM, SIG_IGN); + signal (SIGXFSZ, SIG_IGN); + signal (SIGHUP, SIG_IGN); + signal (SIGINT, SIG_IGN); + signal (SIGPIPE, SIG_IGN); + signal (SIGQUIT, SIG_IGN); + signal (SIGTERM, SIG_IGN); + signal (SIGTSTP, SIG_IGN); + signal (SIGTTOU, SIG_IGN); + + umask (077); +} + diff --git a/lib/is_logged_in.c b/lib/is_logged_in.c new file mode 100644 index 0000000..24c456b --- /dev/null +++ b/lib/is_logged_in.c @@ -0,0 +1,44 @@ +/* Copyright (C) 2003, 2005 Thorsten Kukuk + Author: Thorsten Kukuk + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License version 2 as + published by the Free Software Foundation. + + 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include +#include + +#include "i18n.h" +#include "public.h" + +/* Check if the user is logged in. + 0: user is not logged in + 1: user is logged in +*/ +int +is_logged_in (const char *user) +{ + struct utmp *utp; + + setutent (); + while ((utp = getutent ())) + { + if (utp->ut_type == USER_PROCESS && + strncmp (utp->ut_user, user, sizeof utp->ut_user) == 0) + return 1; + } + return 0; +} diff --git a/lib/libldap.c b/lib/libldap.c new file mode 100644 index 0000000..3886cda --- /dev/null +++ b/lib/libldap.c @@ -0,0 +1,2083 @@ +/* Copyright (C) 2003, 2004, 2005, 2008 Thorsten Kukuk + The basis of this code is from the pam_ldap-148 package written + by Luke Howard. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License version 2 as + published by the Free Software Foundation. + + 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ + + +#ifdef HAVE_CONFIG_H +#include +#endif + +#ifdef USE_LDAP + +#define LDAP_DEPRECATED 1 + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#ifdef HAVE_LBER_H +#include +#endif +#ifdef HAVE_LDAP_H +#include +#endif +#ifdef HAVE_LDAP_SSL_H +#include +#endif + +#include "i18n.h" + +#define _INCLUDED_FROM_LIBLDAP_C_ +#include "libldap.h" + +#ifndef HAVE_LDAP_MEMFREE +#define ldap_memfree(x) free(x) +#endif + +#if LDAP_SET_REBIND_PROC_ARGS < 3 +static ldap_session_t *global_session = 0; +#endif + +#ifndef HAVE_LDAP_GET_LDERRNO +static int +ldap_get_lderrno (LDAP *ld, char **m, char **s) +{ +#ifdef HAVE_LDAP_GET_OPTION + int rc; +#endif + int lderrno; + +#if defined(HAVE_LDAP_GET_OPTION) && defined(LDAP_OPT_ERROR_NUMBER) + /* is this needed? */ + rc = ldap_get_option (ld, LDAP_OPT_ERROR_NUMBER, &lderrno); + if (rc != LDAP_SUCCESS) + return rc; +#else + lderrno = ld->ld_errno; +#endif + + if (s != NULL) + { +#if defined(HAVE_LDAP_GET_OPTION) && defined(LDAP_OPT_ERROR_STRING) + rc = ldap_get_option (ld, LDAP_OPT_ERROR_STRING, s); + if (rc != LDAP_SUCCESS) + return rc; +#else + *s = ld->ld_error; +#endif + } + + if (s != NULL) + { +#if defined(HAVE_LDAP_GET_OPTION) && defined(LDAP_OPT_MATCHED_DN) + rc = ldap_get_option (ld, LDAP_OPT_MATCHED_DN, m); + if (rc != LDAP_SUCCESS) + return rc; +#else + *m = ld->ld_matched; +#endif + } + + return lderrno; +} +#endif + +void +free_ldap_config (ldap_config_t **pconfig) +{ + ldap_config_t *c; + + c = *pconfig; + if (c == NULL) + return; + + if (c->host != NULL) + free (c->host); + + if (c->base != NULL) + free (c->base); + + if (c->binddn != NULL) + free (c->binddn); + + if (c->bindpw != NULL) + { + memset (c->bindpw, 0, strlen (c->bindpw)); + free (c->bindpw); + } + + if (c->rootbinddn != NULL) + free (c->rootbinddn); + + if (c->rootbindpw != NULL) + { + memset (c->rootbindpw, 0, strlen (c->rootbindpw)); + free (c->rootbindpw); + } + + if (c->sslpath != NULL) + free (c->sslpath); + + if (c->tmplattr != NULL) + free (c->tmplattr); + + if (c->tmpluser != NULL) + free (c->tmpluser); + + if (c->groupattr != NULL) + free (c->groupattr); + + if (c->groupdn != NULL) + free (c->groupdn); + + memset (c, 0, sizeof (*c)); + free (c); + *pconfig = NULL; + + return; +} + +#if 0 /* XXX */ +static void +free_bind_info (bind_info_t **info) +{ + if (*info == NULL) + return; + + if ((*info)->dn != NULL) + free ((*info)->dn); + + if ((*info)->pw) + { + memset ((*info)->pw, 0, strlen ((*info)->pw)); + free((*info)->pw); + } + + if ((*info)->user) + free ((*info)->user); + + free (*info); + *info = NULL; + + return; +} +#endif + +static ldap_config_t * +alloc_ldap_config (void) +{ + ldap_config_t *result = (ldap_config_t *) calloc (1, sizeof (*result)); + + if (result == NULL) + { + errno = ENOMEM; + return NULL; + } + + result->scope = LDAP_SCOPE_SUBTREE; + result->deref = LDAP_DEREF_NEVER; + result->host = NULL; + result->base = NULL; + result->port = 0; + result->binddn = NULL; + result->bindpw = NULL; + result->rootbinddn = NULL; + result->rootbindpw = NULL; + result->ssl_on = SSL_OFF; + result->sslpath = NULL; + result->groupattr = NULL; + result->groupdn = NULL; + result->getpolicy = 0; + result->checkhostattr = 0; +#ifdef LDAP_VERSION3 + result->version = LDAP_VERSION3; +#else + result->version = LDAP_VERSION2; +#endif /* LDAP_VERSION2 */ + result->timelimit = LDAP_NO_LIMIT; + result->bind_timelimit = 10; + result->referrals = 1; + result->restart = 1; + result->password_type = PASSWORD_CLEAR; + result->tmplattr = NULL; + result->tmpluser = NULL; + result->tls_checkpeer = 0; + result->tls_cacertfile = NULL; + result->tls_cacertdir = NULL; + result->tls_ciphers = NULL; + result->tls_cert = NULL; + result->tls_key = NULL; + result->use_rfc2307bis = 1; + return result; +} + + +#define CHECKPOINTER(ptr) do { if ((ptr) == NULL) { \ + fclose(fp); \ + free_ldap_config (&result); \ + return NULL; \ +} \ +} while (0) + +static ldap_config_t * +read_ldap_config (const char *configFile) +{ + /* this is the same configuration file as for nss_ldap and pam_ldap */ + FILE *fp; + char b[BUFSIZ]; + char *defaultBase, *passwdBase; + int defaultScope, passwdScope; + ldap_config_t *result; + + if ((result = alloc_ldap_config ()) == NULL) + return NULL; + + /* configuration file location is configurable; default /etc/ldap.conf */ + if (configFile == NULL) + configFile = LDAP_PATH_CONF; + + fp = fopen (configFile, "r"); + + if (fp == NULL) + { + if (isatty (fileno(stderr))) + fprintf (stderr, "missing file \"%s\".\n", configFile); + else + syslog (LOG_ERR, "missing file \"%s\"", configFile); + return NULL; + } + + defaultBase = NULL; + defaultScope = LDAP_SCOPE_SUBTREE; + + passwdBase = NULL; + passwdScope = -1; + + while (fgets (b, sizeof (b), fp) != NULL) + { + char *k, *v; + int len; + + if (*b == '\n' || *b == '#') + continue; + + k = b; + v = k; + while (*v != '\0' && *v != ' ' && *v != '\t') + v++; + + if (*v == '\0') + continue; + + *(v++) = '\0'; + + /* skip all whitespaces between keyword and value */ + /* Lars Oergel , 05.10.2000 */ + while (*v == ' ' || *v == '\t') + v++; + + /* kick off all whitespaces and newline at the end of value */ + /* Bob Guo , 08.10.2001 */ + len = strlen (v) - 1; + while (v[len] == ' ' || v[len] == '\t' || v[len] == '\n') + --len; + v[len + 1] = '\0'; + + if (!strcasecmp (k, "host")) + { + CHECKPOINTER (result->host = strdup (v)); + } + else if (!strcasecmp (k, "uri")) + { + CHECKPOINTER (result->uri = strdup (v)); + } + else if (!strcasecmp (k, "base")) + { + CHECKPOINTER (defaultBase = strdup (v)); + } + else if (!strcasecmp (k, "binddn")) + { + CHECKPOINTER (result->binddn = strdup (v)); + } + else if (!strcasecmp (k, "bindpw")) + { + CHECKPOINTER (result->bindpw = strdup (v)); + } + else if (!strcasecmp (k, "rootbinddn")) + { + CHECKPOINTER (result->rootbinddn = strdup (v)); + } + else if (!strcasecmp (k, "scope")) + { + if (!strncasecmp (v, "sub", 3)) + result->scope = LDAP_SCOPE_SUBTREE; + else if (!strncasecmp (v, "one", 3)) + result->scope = LDAP_SCOPE_ONELEVEL; + else if (!strncasecmp (v, "base", 4)) + result->scope = LDAP_SCOPE_BASE; + } + else if (!strcasecmp (k, "deref")) + { + if (!strcasecmp (v, "never")) + result->deref = LDAP_DEREF_NEVER; + else if (!strcasecmp (v, "searching")) + result->deref = LDAP_DEREF_SEARCHING; + else if (!strcasecmp (v, "finding")) + result->deref = LDAP_DEREF_FINDING; + else if (!strcasecmp (v, "always")) + result->deref = LDAP_DEREF_ALWAYS; + } + else if (!strcasecmp (k, "pam_password")) + { + if (!strcasecmp (v, "clear")) + result->password_type = PASSWORD_CLEAR; + else if (!strcasecmp (v, "crypt")) + result->password_type = PASSWORD_CRYPT; + else if (!strcasecmp (v, "md5")) + result->password_type = PASSWORD_MD5; + else if (!strcasecmp (v, "nds")) + result->password_type = PASSWORD_NDS; + else if (!strcasecmp (v, "ad")) + result->password_type = PASSWORD_AD; + else if (!strcasecmp (v, "exop")) + result->password_type = PASSWORD_EXOP; + } + else if (!strcasecmp (k, "pam_crypt")) + { + /* + * we still support this even though it is + * deprecated, as it could be a security + * hole to change this behaviour on + * unsuspecting users of pam_ldap. + */ + if (!strcasecmp (v, "local")) + result->password_type = PASSWORD_CRYPT; + else + result->password_type = PASSWORD_CLEAR; + } + else if (!strcasecmp (k, "port")) + { + result->port = atoi (v); + } + else if (!strcasecmp (k, "timelimit")) + { + result->timelimit = atoi (v); + } + else if (!strcasecmp (k, "bind_timelimit")) + { + result->bind_timelimit = atoi (v); + } + else if (!strcasecmp (k, "ldap_version")) + { + result->version = atoi (v); + } + else if (!strcasecmp (k, "sslpath")) + { + CHECKPOINTER (result->sslpath = strdup (v)); + } + else if (!strcasecmp (k, "ssl")) + { + if (!strcasecmp (v, "on") || !strcasecmp (v, "yes") + || !strcasecmp (v, "true")) + { + result->ssl_on = SSL_LDAPS; + } + else if (!strcasecmp (v, "start_tls")) + { + result->ssl_on = SSL_START_TLS; + } + } + else if (!strcasecmp (k, "referrals")) + { + result->referrals = (!strcasecmp (v, "on") || !strcasecmp (v, "yes") + || !strcasecmp (v, "true")); + } + else if (!strcasecmp (k, "restart")) + { + result->restart = (!strcasecmp (v, "on") || !strcasecmp (v, "yes") + || !strcasecmp (v, "true")); + } + else if (!strcasecmp (k, "pam_template_login_attribute")) + { + CHECKPOINTER (result->tmplattr = strdup (v)); + } + else if (!strcasecmp (k, "pam_template_login")) + { + CHECKPOINTER (result->tmpluser = strdup (v)); + } + else if (!strcasecmp (k, "pam_lookup_policy")) + { + result->getpolicy = !strcasecmp (v, "yes"); + } + else if (!strcasecmp (k, "pam_check_host_attr")) + { + result->checkhostattr = !strcasecmp (v, "yes"); + } + else if (!strcasecmp (k, "pam_groupdn")) + { + CHECKPOINTER (result->groupdn = strdup (v)); + } + else if (!strcasecmp (k, "pam_member_attribute")) + { + CHECKPOINTER (result->groupattr = strdup (v)); + } + else if (!strcasecmp (k, "tls_checkpeer")) + { + if (!strcasecmp (v, "on") || !strcasecmp (v, "yes") + || !strcasecmp (v, "true")) + { + result->tls_checkpeer = 1; + } + else if (!strcasecmp (v, "off") || !strcasecmp (v, "no") + || !strcasecmp (v, "false")) + { + result->tls_checkpeer = 0; + } + } + else if (!strcasecmp (k, "tls_cacertfile")) + { + CHECKPOINTER (result->tls_cacertfile = strdup (v)); + } + else if (!strcasecmp (k, "tls_cacertdir")) + { + CHECKPOINTER (result->tls_cacertdir = strdup (v)); + } + else if (!strcasecmp (k, "tls_ciphers")) + { + CHECKPOINTER (result->tls_ciphers = strdup (v)); + } + else if (!strcasecmp (k, "tls_cert")) + { + CHECKPOINTER (result->tls_cert = strdup (v)); + } + else if (!strcasecmp (k, "tls_key")) + { + CHECKPOINTER (result->tls_key = strdup (v)); + } + else if (!strcasecmp (k, "nss_schema")) + { + if (!strcasecmp (v, "rfc2307bis")) + { + result->use_rfc2307bis = 1; + } + else if (!strcasecmp (v, "rfc2307")) + { + result->use_rfc2307bis = 0; + } + } + } + + if (passwdBase != NULL) + { + if (defaultBase != NULL) + { + size_t len = strlen (passwdBase); + + if (passwdBase[len - 1] == ',') + { + char *p; + + p = (char *) malloc (len + strlen (defaultBase) + 1); + if (p == NULL) + { + fclose (fp); + free (defaultBase); /* leak the rest... */ + free_ldap_config (&result); + return NULL; + } + + strcpy (p, passwdBase); + strcpy (&p[len], defaultBase); + free (passwdBase); + passwdBase = p; + } + free (defaultBase); + } + result->base = passwdBase; + } + else + { + result->base = defaultBase; + } + + if (passwdScope != -1) + { + result->scope = passwdScope; + } + else + { + result->scope = defaultScope; + } + + if (result->host == NULL +#ifdef HAVE_LDAP_INITIALIZE + && result->uri == NULL +#endif + ) + { + if (isatty (fileno(stderr))) + fprintf (stderr, "missing \"host\" in file \"ldap.conf\".\n"); + else + syslog (LOG_ERR, "missing \"host\" in file \"ldap.conf\""); + return NULL; + } + + if (result->groupattr == NULL) + { + CHECKPOINTER (result->groupattr = strdup ("uniquemember")); + } + + if (result->port == 0) + { +#if defined(HAVE_LDAP_START_TLS_S) + if (result->ssl_on == SSL_LDAPS) + { + result->port = LDAPS_PORT; + } + else +#endif + result->port = LDAP_PORT; + } + + fclose (fp); + + if ((result->rootbinddn != NULL) && (geteuid () == 0)) + { + fp = fopen (LDAP_PATH_ROOTPASSWD, "r"); + if (fp != NULL) + { + if (fgets (b, sizeof (b), fp) != NULL) + { + int len; + len = strlen (b); + if (len > 0 && b[len - 1] == '\n') + len--; + + b[len] = '\0'; + result->rootbindpw = strdup (b); + } + fclose (fp); + } + else + { + int save_err = errno; + + if (result->rootbinddn) + { + free (result->rootbinddn); + result->rootbinddn = NULL; + } + if (isatty (fileno(stderr))) + fprintf (stderr, + "could not open secret file %s (%s)", + LDAP_PATH_ROOTPASSWD, strerror (save_err)); + else + syslog (LOG_WARNING, + "could not open secret file %s (%s)", + LDAP_PATH_ROOTPASSWD, strerror (save_err)); + } + } + + memset (b, 0, BUFSIZ); + return result; +} + +ldap_session_t * +create_ldap_session (const char *configFile) +{ + ldap_session_t *session; + + session = malloc (sizeof (ldap_session_t)); + + if (session == NULL) + { + errno = ENOMEM; + return NULL; + } + + memset (session, 0, sizeof (ldap_session_t)); + + session->conf = read_ldap_config (configFile); + if (session->conf == NULL) + { + free (session); + return NULL; + } + +#if LDAP_SET_REBIND_PROC_ARGS < 3 + /* Ugly hack, bad idea, but not possible to solve in another way. */ + global_session = session; +#endif + + return session; +} + +#if defined HAVE_LDAP_START_TLS_S || (defined(HAVE_LDAP_SET_OPTION) && defined(LDAP_OPT_X_TLS)) +/* Some global TLS-specific options need to be set before we create our + * session context, so we set them here. */ +static int +_set_ssl_default_options (ldap_session_t *session) +{ + int rc; + + /* ca cert file */ + if (session->conf->tls_cacertfile != NULL) + { + rc = ldap_set_option (NULL, LDAP_OPT_X_TLS_CACERTFILE, + session->conf->tls_cacertfile); + if (rc != LDAP_SUCCESS) + { + if (isatty (fileno (stderr))) + fprintf (stderr, "ldap_set_option(LDAP_OPT_X_TLS_CACERTFILE): %s", + ldap_err2string (rc)); + else + syslog (LOG_ERR, + "ldap_set_option(LDAP_OPT_X_TLS_CACERTFILE): %s", + ldap_err2string (rc)); + return LDAP_OPERATIONS_ERROR; + } + } + + if (session->conf->tls_cacertdir != NULL) + { + /* ca cert directory */ + rc = ldap_set_option (NULL, LDAP_OPT_X_TLS_CACERTDIR, + session->conf->tls_cacertdir); + if (rc != LDAP_SUCCESS) + { + if (isatty (fileno (stderr))) + fprintf (stderr, "ldap_set_option(LDAP_OPT_X_TLS_CACERTDIR): %s", + ldap_err2string (rc)); + else + syslog (LOG_ERR, + "ldap_set_option(LDAP_OPT_X_TLS_CACERTDIR): %s", + ldap_err2string (rc)); + return LDAP_OPERATIONS_ERROR; + } + } + + /* require cert? */ + rc = ldap_set_option (NULL, LDAP_OPT_X_TLS_REQUIRE_CERT, + &session->conf->tls_checkpeer); + if (rc != LDAP_SUCCESS) + { + if (isatty (fileno (stderr))) + fprintf (stderr, "ldap_set_option(LDAP_OPT_X_TLS_REQUIRE_CERT): %s", + ldap_err2string (rc)); + else + syslog (LOG_ERR, + "ldap_set_option(LDAP_OPT_X_TLS_REQUIRE_CERT): %s", + ldap_err2string (rc)); + return LDAP_OPERATIONS_ERROR; + } + + if (session->conf->tls_ciphers != NULL) + { + /* set cipher suite, certificate and private key: */ + rc = ldap_set_option (NULL, LDAP_OPT_X_TLS_CIPHER_SUITE, + session->conf->tls_ciphers); + if (rc != LDAP_SUCCESS) + { + if (isatty (fileno (stderr))) + fprintf (stderr, + "ldap_set_option(LDAP_OPT_X_TLS_CIPHER_SUITE): %s", + ldap_err2string (rc)); + else + syslog (LOG_ERR, + "ldap_set_option(LDAP_OPT_X_TLS_CIPHER_SUITE): %s", + ldap_err2string (rc)); + return LDAP_OPERATIONS_ERROR; + } + } + + if (session->conf->tls_cert != NULL) + { + rc = ldap_set_option (NULL, LDAP_OPT_X_TLS_CERTFILE, + session->conf->tls_cert); + if (rc != LDAP_SUCCESS) + { + if (isatty (fileno (stderr))) + fprintf (stderr, "ldap_set_option(LDAP_OPT_X_TLS_CERTFILE): %s", + ldap_err2string (rc)); + else + syslog (LOG_ERR, + "ldap_set_option(LDAP_OPT_X_TLS_CERTFILE): %s", + ldap_err2string (rc)); + return LDAP_OPERATIONS_ERROR; + } + } + + if (session->conf->tls_key != NULL) + { + rc = ldap_set_option (NULL, LDAP_OPT_X_TLS_KEYFILE, + session->conf->tls_key); + if (rc != LDAP_SUCCESS) + { + if (isatty (fileno (stderr))) + fprintf (stderr, + "ldap_set_option(LDAP_OPT_X_TLS_KEYFILE): %s", + ldap_err2string (rc)); + else + syslog (LOG_ERR, + "ldap_set_option(LDAP_OPT_X_TLS_KEYFILE): %s", + ldap_err2string (rc)); + return LDAP_OPERATIONS_ERROR; + } + } + + return LDAP_SUCCESS; +} +#endif + +#if defined(LDAP_API_FEATURE_X_OPENLDAP) && (LDAP_API_VERSION > 2000) +#if LDAP_SET_REBIND_PROC_ARGS == 3 +static int +_rebind_proc (LDAP * ld, LDAP_CONST char *url __attribute__ ((unused)), + ber_tag_t request __attribute__ ((unused)), + ber_int_t msgid __attribute__ ((unused)), void *arg) +#else +static int +_rebind_proc (LDAP * ld, LDAP_CONST char *url __attribute__ ((unused)), + int request __attribute__ ((unused)), + ber_int_t msgid __attribute__ ((unused))) +#endif +{ +#if LDAP_SET_REBIND_PROC_ARGS == 3 + ldap_session_t *session = (ldap_session_t *) arg; +#else + /* ugly hack */ + ldap_session_t *session = global_session; +#endif + char *who, *cred; + + if (session->bind != NULL && session->bind->bound_as_user == 1) + { + who = session->bind->dn; + cred = session->bind->pw; + } + else + { + if (session->conf->rootbinddn != NULL && geteuid () == 0) + { + who = session->conf->rootbinddn; + cred = session->conf->rootbindpw; + } + else + { + who = session->conf->binddn; + cred = session->conf->bindpw; + } + } + + return ldap_simple_bind_s (ld, who, cred); +} +#else +#if LDAP_SET_REBIND_PROC_ARGS == 3 +static int +_rebind_proc (LDAP * ld, + char **whop, char **credp, int *methodp, int freeit, void *arg) +#else +static int +_rebind_proc (LDAP * ld, char **whop, char **credp, int *methodp, int freeit) +#endif +{ +#if LDAP_SET_REBIND_PROC_ARGS == 3 + ldap_session_t *session = (ldap_session_t *) arg; +#else + /* ugly hack */ + ldap_session_t *session = global_session; +#endif + + if (freeit) + { + _pam_drop (*whop); + _pam_overwrite (*credp); + _pam_drop (*credp); + return LDAP_SUCCESS; + } + + if (session->bind != NULL && session->bind->bound_as_user == 1) + { + /* + * We're authenticating as a user. + */ + *whop = strdup (session->bind->dn); + *credp = strdup (session->bind->pw); + } + else + { + if (session->conf->rootbinddn != NULL && geteuid () == 0) + { + *whop = strdup (session->conf->rootbinddn); + *credp = session->conf->rootbindpw != NULL ? + strdup (session->conf->rootbindpw) : NULL; + } + else + { + *whop = session->conf->binddn != NULL ? + strdup (session->conf->binddn) : NULL; + *credp = session->conf->bindpw != NULL ? + strdup (session->conf->bindpw) : NULL; + } + } + + *methodp = LDAP_AUTH_SIMPLE; + + return LDAP_SUCCESS; +} +#endif + +int +open_ldap_session (ldap_session_t *session) +{ +#if defined(HAVE_LDAP_SET_OPTION) && defined(LDAP_OPT_X_TLS) + /* set defaults for global TLS-related options */ + _set_ssl_default_options (session); +#endif +#ifdef HAVE_LDAP_INITIALIZE + if (session->conf->uri != NULL) + { + int rc = ldap_initialize (&session->ld, session->conf->uri); + if (rc != LDAP_SUCCESS) + { + if (isatty (fileno (stderr))) + fprintf (stderr, "ldap_initialize %s", + ldap_err2string (rc)); + else + syslog (LOG_ERR, "ldap_initialize %s", + ldap_err2string (rc)); + return rc; + } + } + else + { +#endif /* HAVE_LDAP_INTITIALIZE */ +#ifdef HAVE_LDAP_INIT + session->ld = ldap_init (session->conf->host, session->conf->port); +#else + session->ld = ldap_open (session->conf->host, session->conf->port); +#endif /* HAVE_LDAP_INIT */ + } + + if (session->ld == NULL) + return 1; + +#if defined(HAVE_LDAP_SET_OPTION) && defined(LDAP_OPT_X_TLS) + if (session->conf->ssl_on == SSL_LDAPS) + { + int tls = LDAP_OPT_X_TLS_HARD; + int rc = ldap_set_option (session->ld, LDAP_OPT_X_TLS, &tls); + if (rc != LDAP_SUCCESS) + { + if (isatty (fileno (stderr))) + fprintf (stderr, "ldap_set_option(LDAP_OPT_X_TLS) %s", + ldap_err2string (rc)); + else + syslog (LOG_ERR, "ldap_set_option(LDAP_OPT_X_TLS) %s", + ldap_err2string (rc)); + return rc; + } + } +#endif /* LDAP_OPT_X_TLS */ + +#if defined(HAVE_LDAP_SET_OPTION) && defined(LDAP_OPT_PROTOCOL_VERSION) + ldap_set_option (session->ld, LDAP_OPT_PROTOCOL_VERSION, + &session->conf->version); +#else + session->ld->ld_version = session->conf->version; +#endif + +#if LDAP_SET_REBIND_PROC_ARGS == 3 + ldap_set_rebind_proc (session->ld, _rebind_proc, (void *) session); +#elif LDAP_SET_REBIND_PROC_ARGS == 2 + ldap_set_rebind_proc (session->ld, _rebind_proc); +#endif + +#if defined(HAVE_LDAP_SET_OPTION) && defined(LDAP_OPT_DEREF) + ldap_set_option (session->ld, LDAP_OPT_DEREF, &session->conf->deref); +#else + session->ld->ld_deref = session->conf->deref; +#endif + +#if defined(HAVE_LDAP_SET_OPTION) && defined(LDAP_OPT_TIMELIMIT) + ldap_set_option (session->ld, LDAP_OPT_TIMELIMIT, &session->conf->timelimit); +#else + session->ld->ld_timelimit = session->conf->timelimit; +#endif + +#if defined(HAVE_LDAP_SET_OPTION) && defined(LDAP_OPT_REFERRALS) + ldap_set_option (session->ld, LDAP_OPT_REFERRALS, + session-> + conf->referrals ? LDAP_OPT_ON : LDAP_OPT_OFF); +#endif + +#if defined(HAVE_LDAP_SET_OPTION) && defined(LDAP_OPT_RESTART) + ldap_set_option (session->ld, LDAP_OPT_RESTART, + session-> + conf->restart ? LDAP_OPT_ON : LDAP_OPT_OFF); +#endif + +#ifdef HAVE_LDAP_START_TLS_S + if (session->conf->ssl_on == SSL_START_TLS) + { + int version, rc; + + if (ldap_get_option (session->ld, LDAP_OPT_PROTOCOL_VERSION, &version) + == LDAP_SUCCESS) + { + if (version < LDAP_VERSION3) + { + version = LDAP_VERSION3; + ldap_set_option (session->ld, LDAP_OPT_PROTOCOL_VERSION, + &version); + } + + rc = ldap_start_tls_s (session->ld, NULL, NULL); + if (rc != LDAP_SUCCESS) + { + if (isatty (fileno (stderr))) + fprintf (stderr, "ldap_starttls_s: %s", + ldap_err2string (rc)); + else + syslog (LOG_ERR, "ldap_starttls_s: %s", + ldap_err2string (rc)); + return rc; + } + } + } +#endif /* HAVE_LDAP_START_TLS_S */ + return 0; +} + +int +close_ldap_session (ldap_session_t *session) +{ + if (session->ld != NULL) + { + ldap_unbind (session->ld); + session->ld = NULL; + } + + /* XXX free all the other stuff, too. */ + + return 0; +} + +static int +reopen_ldap_session (ldap_session_t *session) +{ + /* FYI: V3 lets us avoid five unneeded binds in a password change */ + if (session->conf->version == LDAP_VERSION2) + { + close_ldap_session (session); + + if (session->bind != NULL) + session->bind->bound_as_user = 0; + + return open_ldap_session (session); + } + return 0; +} + +static int +connect_as_nobody (ldap_session_t *session) +{ + int rc; + int msgid; + struct timeval timeout; + LDAPMessage *result; + + if (session->ld == NULL) + { + rc = open_ldap_session (session); + if (rc != 0) + return rc; + } + + if (session->conf->rootbinddn && geteuid () == 0) + msgid = ldap_simple_bind (session->ld, + session->conf->rootbinddn, + session->conf->rootbindpw); + else + msgid = ldap_simple_bind (session->ld, + session->conf->binddn, session->conf->bindpw); + + if (msgid == -1) + { + if (isatty (fileno (stderr))) + fprintf (stderr, "ldap_simple_bind %s.\n", + ldap_err2string (ldap_get_lderrno (session->ld, 0, 0))); + else + syslog (LOG_ERR, "ldap_simple_bind %s", + ldap_err2string (ldap_get_lderrno (session->ld, 0, 0))); + return ldap_get_lderrno (session->ld, 0, 0); + } + + timeout.tv_sec = session->conf->bind_timelimit; /* default 10 */ + timeout.tv_usec = 0; + rc = ldap_result (session->ld, msgid, FALSE, &timeout, &result); + if (rc == -1 || rc == 0) + { + if (isatty (fileno (stderr))) + fprintf (stderr, "ldap_result %s.\n", + ldap_err2string (ldap_get_lderrno (session->ld, 0, 0))); + else + syslog (LOG_ERR, "ldap_result %s", + ldap_err2string (ldap_get_lderrno (session->ld, 0, 0))); + return ldap_get_lderrno (session->ld, 0, 0); + } + +#ifdef HAVE_LDAP_PARSE_RESULT + ldap_parse_result (session->ld, result, &rc, 0, 0, 0, 0, TRUE); +#else + rc = ldap_result2error (session->ld, result, TRUE); +#endif + + if (rc != LDAP_SUCCESS) + { + if (isatty (fileno (stderr))) + fprintf (stderr, "error trying to bind (%s).\n", + ldap_err2string (rc)); + else + syslog (LOG_ERR, "error trying to bind (%s)", + ldap_err2string (rc)); + return rc; + } + + if (session->bind != NULL) + session->bind->bound_as_user = 0; + + return LDAP_SUCCESS; +} + +static int +connect_with_dn (ldap_session_t *session) +{ + int rc, msgid; + struct timeval timeout; + LDAPMessage *result; + + /* this shouldn't ever happen */ + if (session == NULL || session->bind == NULL) + return 1; + + /* avoid binding anonymously with a DN but no password */ + if (session->bind->pw == NULL || session->bind->pw[0] == '\0') + return 1; + + /* if we already bound as the user don't bother retrying */ + if (session->bind->bound_as_user) + { + abort (); /* XXX only for debugging. */ + return 1; + } + + if (session->ld == NULL) + { + rc = open_ldap_session (session); + if (rc != LDAP_SUCCESS) + return rc; + } + + msgid = ldap_simple_bind (session->ld, session->bind->dn, + session->bind->pw); + if (msgid == -1) + { + if (isatty (fileno (stderr))) + fprintf (stderr, "ldap_simple_bind %s.\n", + ldap_err2string (ldap_get_lderrno (session->ld, 0, 0))); + else + syslog (LOG_ERR, "ldap_simple_bind %s", + ldap_err2string (ldap_get_lderrno (session->ld, 0, 0))); + return ldap_get_lderrno (session->ld, 0, 0); + } + + timeout.tv_sec = 10; + timeout.tv_usec = 0; + rc = ldap_result (session->ld, msgid, FALSE, &timeout, &result); + if (rc == -1 || rc == 0) + { + if (isatty (fileno (stderr))) + fprintf (stderr, "ldap_result %s.\n", + ldap_err2string (ldap_get_lderrno (session->ld, 0, 0))); + else + syslog (LOG_ERR, "ldap_result %s", + ldap_err2string (ldap_get_lderrno (session->ld, 0, 0))); + return 1; + } + + rc = ldap_result2error (session->ld, result, TRUE); + + if (rc != LDAP_SUCCESS) + { + if (isatty (fileno (stderr))) + fprintf (stderr, "error trying to bind as \"%s\" (%s).\n", + session->bind->dn, ldap_err2string (rc)); + else + syslog (LOG_ERR, "error trying to bind as \"%s\" (%s)", + session->bind->dn, ldap_err2string (rc)); + return rc; + } + + session->bind->bound_as_user = 1; + + return 0; +} + +static int +_escape_string (const char *str, char *buf, size_t buflen) +{ + int ret = 1; + char *p = buf; + char *limit = p + buflen - 3; + const char *s = str; + + while (p < limit && *s) + { + switch (*s) + { + case '*': + strcpy (p, "\\2a"); + p += 3; + break; + case '(': + strcpy (p, "\\28"); + p += 3; + break; + case ')': + strcpy (p, "\\29"); + p += 3; + break; + case '\\': + strcpy (p, "\\5c"); + p += 3; + break; + default: + *p++ = *s; + break; + } + s++; + } + + if (*s == '\0') + { + /* got to end */ + *p = '\0'; + ret = 0; + } + + return ret; +} + +static char * +convert_to_dn (ldap_session_t *session, const char *name, + const char *filterformat) +{ + char *filter, escapedName[strlen (name) * 3 + 3]; + int rc; + char *retval; + LDAPMessage *res, *msg; + + rc = connect_as_nobody (session); + if (rc != 0) + return NULL; + + if (session->bind) + session->bind->bound_as_user = 0; + +#if defined(HAVE_LDAP_SET_OPTION) && defined(LDAP_OPT_SIZELIMIT) + rc = 1; + ldap_set_option (session->ld, LDAP_OPT_SIZELIMIT, &rc); +#else + session->ld->ld_sizelimit = 1; +#endif + + rc = _escape_string (name, escapedName, sizeof (escapedName)); + if (rc != 0) + return NULL; + + if (asprintf (&filter, filterformat, escapedName) < 1) + return NULL; + + rc = ldap_search_s (session->ld, session->conf->base, + session->conf->scope, filter, NULL, 0, &res); + free (filter); + + if (rc != LDAP_SUCCESS && + rc != LDAP_TIMELIMIT_EXCEEDED && rc != LDAP_SIZELIMIT_EXCEEDED) + { + if (isatty (fileno (stderr))) + fprintf (stderr, "ldap_search_s: %s", ldap_err2string (rc)); + else + syslog (LOG_ERR, "ldap_search_s: %s", ldap_err2string (rc)); + return NULL; + } + + msg = ldap_first_entry (session->ld, res); + if (msg == NULL) + { + ldap_msgfree (res); + return NULL; + } + + retval = ldap_get_dn (session->ld, msg); + + ldap_msgfree (res); + return retval; +} + +char * +convert_user_to_dn (ldap_session_t *session, const char *user) +{ + return convert_to_dn (session, user, + "(&(objectClass=posixAccount)(uid=%s))"); +} + +static char * +convert_group_to_dn (ldap_session_t *session, const char *group) +{ + return convert_to_dn (session, group, + "(&(objectClass=posixGroup)(cn=%s))"); +} + +int +ldap_authentication (ldap_session_t *session, const char *user, + const char *binddn, const char *password) +{ + int rc = 0; + + /* Sanity checks. */ + if (session == NULL || (binddn == NULL && user == NULL)) + return 1; + + if (session->bind == NULL) + { + session->bind = malloc (sizeof (bind_info_t)); + if (session->bind == NULL) + { + errno = ENOMEM; + return 1; + } + memset (session->bind, 0, sizeof (bind_info_t)); + } + + if (binddn) + { + if (session->bind->user) + { + free (session->bind->user); + session->bind->user = NULL; + } + if (session->bind->dn) + free (session->bind->dn); + session->bind->dn = strdup (binddn); + } + else if (user) + { + if (session->bind->user == NULL || + strcmp (session->bind->user, user) != 0) + { + char *cp = convert_user_to_dn (session, user); + + if (cp == NULL) + return 1; + + if (session->bind->user) + free (session->bind->user); + session->bind->user = strdup (user); + + if (session->bind->dn) + free (session->bind->dn); + session->bind->dn = strdup (cp); + } + } + else + return 1; + + if (session->bind->pw) + { + free (session->bind->pw); + session->bind->pw = NULL; + } + if (password) + session->bind->pw = strdup (password); + + rc = reopen_ldap_session (session); + if (rc != LDAP_SUCCESS) + return rc; + + rc = connect_with_dn (session); + + return rc; +} + +/* ldap_update_user: Updates an entry in the LDAP database. + session: pointer to struct with LDAP session data. + user: Name of the user, from which the data should be updated. + binddn: Optional, DN as which we should bind to the server. + If not given, we will use the user DN for binding. + password: Password used for binding to the LDAP server. + field: The name of the field which we wish to update. + new_value: The new value for the field to be updated. */ +int +ldap_update_user (ldap_session_t *session, const char *user, + const char *binddn, const char *password, + const char *field, const char *new_value) +{ + LDAPMod *mods[2], mod; + char *strvals[2]; + char *userdn; + int rc; + + /* Sanity check. */ + if (session == NULL || user == NULL) + return 1; + + if (session->bind == NULL) + { + int i; + /* If no binding is created yet, call ldap_authentication, + which creates the binding and checks the password. */ + if ((i = ldap_authentication (session, user, binddn, password)) != 0) + { + fprintf (stderr, _("Authentication failure.\n")); + return i; + } + } + + /* Check, if our user is also the user we used for binding. */ + if (session->bind->user && strcmp (user, session->bind->user) == 0) + userdn = session->bind->dn; + else + userdn = convert_user_to_dn (session, user); + + if (userdn == NULL) + return 1; + + + /* update field */ + strvals[0] = strdupa (new_value); + strvals[1] = NULL; + + mod.mod_values = strvals; + mod.mod_type = strdupa (field); + mod.mod_op = LDAP_MOD_REPLACE; + + mods[0] = &mod; + mods[1] = NULL; + + if (!session->bind->bound_as_user) + { + rc = reopen_ldap_session (session); + if (rc != LDAP_SUCCESS) + return rc; + + rc = connect_with_dn (session); + if (rc != LDAP_SUCCESS) + return rc; + } + + rc = ldap_modify_s (session->ld, userdn, mods); + + return rc; +} + +/* ldap_delete_user: Deletes a user entry in the LDAP database. + session: pointer to struct with LDAP session data. + user: Name of the user account, which should be deleted. + binddn: DN as which we should bind to the server. + password: Password used for binding to the LDAP server. */ +int +ldap_delete_user (ldap_session_t *session, const char *user, + const char *binddn, const char *password) +{ + char *userdn; + int rc; + + /* Sanity check. */ + if (session == NULL || user == NULL || binddn == NULL) + return 1; + + if (session->bind == NULL) + { + int i; + /* If no binding is created yet, call ldap_authentication, + which creates the binding and checks the password. */ + if ((i = ldap_authentication (session, NULL, binddn, password)) != 0) + { + fprintf (stderr, _("Authentication failure.\n")); + return i; + } + } + + userdn = convert_user_to_dn (session, user); + + if (userdn == NULL) + return 1; + + if (!session->bind->bound_as_user) + { + rc = reopen_ldap_session (session); + if (rc != LDAP_SUCCESS) + return rc; + + rc = connect_with_dn (session); + if (rc != LDAP_SUCCESS) + return rc; + } + + rc = ldap_delete_s (session->ld, userdn); + return rc; +} + + +/* ldap_update_group: Updates an entry in the LDAP database. + session: pointer to struct with LDAP session data. + user: Name of the user, from which the data should be updated. + binddn: Optional, DN as which we should bind to the server. + If not given, we will use the user DN for binding. + password: Password used for binding to the LDAP server. + field: The name of the field which we wish to update. + new_value: The new value for the field to be updated. */ +int +ldap_update_group (ldap_session_t *session, const char *group, + const char *binddn, const char *password, + int op, const char *field, const char *new_value) +{ + LDAPMod *mods[2], mod; + char *strvals[2]; + char *groupdn; + int rc; + + /* Sanity check. */ + if (session == NULL || group == NULL) + return 1; + + if (session->bind == NULL) + { + int i; + /* If no binding is created yet, call ldap_authentication, + which creates the binding and checks the password. */ + if ((i = ldap_authentication (session, NULL, binddn, password)) != 0) + { + fprintf (stderr, _("Authentication failure.\n")); + return i; + } + } + + groupdn = convert_group_to_dn (session, group); + if (groupdn == NULL) + return 1; + + + /* update field */ + strvals[0] = strdupa (new_value); + strvals[1] = NULL; + + mod.mod_values = strvals; + mod.mod_type = strdupa (field); + mod.mod_op = op; + + mods[0] = &mod; + mods[1] = NULL; + + if (!session->bind->bound_as_user) + { + rc = reopen_ldap_session (session); + if (rc != LDAP_SUCCESS) + return rc; + + rc = connect_with_dn (session); + if (rc != LDAP_SUCCESS) + return rc; + } + + rc = ldap_modify_s (session->ld, groupdn, mods); + + return rc; +} + +int +ldap_add_groupmember (ldap_session_t *session, const char* group, + const char *binddn, const char *password, + const char *member, int first ) +{ + int rc; + + if ( session->conf->use_rfc2307bis ) + { + char* dn; + dn = convert_user_to_dn ( session, member ); + if (dn == NULL) + return 1; + + rc = ldap_update_group (session, group, binddn, password, LDAP_MOD_ADD, + "member", dn ); + free (dn); + if ( first ) + { + ldap_update_group (session, group, binddn, password, LDAP_MOD_DELETE, + "member", "" ); + } + } + else + { + rc = ldap_update_group (session, group, binddn, password, LDAP_MOD_ADD, + "memberUid", member ); + } + + return rc; +} + +int +ldap_del_groupmember (ldap_session_t *session, const char* group, + const char *binddn, const char *password, + const char *member, int last ) +{ + char* userdn; + int rc; + + if ( session->conf->use_rfc2307bis ) + { + userdn = convert_user_to_dn ( session, member ); + if (userdn == NULL) + return 1; + + if ( last ) + { + ldap_update_group (session, group, binddn, password, LDAP_MOD_ADD, + "member", "" ); + } + + rc = ldap_update_group (session, group, binddn, password, LDAP_MOD_DELETE, + "member", userdn ); + free (userdn); + } + else + { + rc = ldap_update_group (session, group, binddn, password, LDAP_MOD_DELETE, + "memberUid", member ); + } + + return rc; +} + +/* ldap_delete_group: Deletes an group entry in the LDAP database. + session: pointer to struct with LDAP session data. + group: Name of the group, which should be removed from the LDAP database. + binddn: Optional, DN as which we should bind to the server. + If not given, we will use the user DN for binding. + password: Password used for binding to the LDAP server. */ +int +ldap_delete_group (ldap_session_t *session, const char *group, + const char *binddn, const char *password) +{ + char *groupdn; + int rc; + + /* Sanity check. */ + if (session == NULL || group == NULL || binddn == NULL) + return 1; + + if (session->bind == NULL) + { + int i; + /* If no binding is created yet, call ldap_authentication, + which creates the binding and checks the password. */ + if ((i = ldap_authentication (session, NULL, binddn, password)) != 0) + { + fprintf (stderr, _("Authentication failure.\n")); + return i; + } + } + + groupdn = convert_group_to_dn (session, group); + if (groupdn == NULL) + return 1; + + if (!session->bind->bound_as_user) + { + rc = reopen_ldap_session (session); + if (rc != LDAP_SUCCESS) + return rc; + + rc = connect_with_dn (session); + if (rc != LDAP_SUCCESS) + return rc; + } + + rc = ldap_delete_s (session->ld, groupdn); + + return rc; +} + +/* Try to find the baseou for passwd and group in LDAP. At first we try + to find a posixAccount or posixGroup object. If we don't find one, try + to find a organizationalUnit with ou=People or ou=Groups. The result + will always be a guess, there is no way to determine this without + explicit option by the admin. */ +static char * +find_baseou (ldap_session_t *session, const char *filter, char *prefer[]) +{ + int ldap_errors; + LDAPMessage *searchresults = NULL; + LDAPMessage *entry = NULL; + char *dn = NULL; + + ldap_errors = ldap_search_s (session->ld, session->conf->base, + LDAP_SCOPE_SUBTREE, + "objectclass=organizationalUnit", NULL, 0, + &searchresults); + if (ldap_errors) + { + fprintf (stderr, "ldap_search_s: %s.\n", ldap_err2string (ldap_errors)); + return NULL; + } + + entry = ldap_first_entry (session->ld, searchresults); + while (entry) + { + LDAPMessage *search2results = NULL, *entry2 = NULL; + + ldap_errors = ldap_search_s (session->ld, + ldap_get_dn (session->ld, entry), + LDAP_SCOPE_ONELEVEL, filter, NULL, 0, + &search2results); + if (ldap_errors) + { + fprintf (stderr, "ldap_search_s: %s.\n", + ldap_err2string (ldap_errors)); + return NULL; + } + + entry2 = ldap_first_entry (session->ld, search2results); + if (entry2) + { + if (dn) + free (dn); + dn = ldap_get_dn (session->ld, entry); + } + else if (dn == NULL) + { + BerElement *attributehandler; + char *attribute = ldap_first_attribute (session->ld, entry, + &attributehandler); + while (attribute) + { + char **value_collection = NULL; + int i; + + if (strcasecmp (attribute, "ou") == 0) + { + value_collection = ldap_get_values (session->ld, + entry, attribute); + + for (i = 0; prefer[i]; i++) + { + if (strcasecmp (value_collection[0], prefer[i]) == 0) + dn = ldap_get_dn (session->ld, entry); + } + ldap_value_free (value_collection); + } + attribute = ldap_next_attribute (session->ld, + entry, attributehandler); + } + } + entry = ldap_next_entry (session->ld, entry); + } + ldap_msgfree (searchresults); + + return dn; + +} + +char * +ldap_find_user_baseou (ldap_session_t *session) +{ + char *prefer[] = {"People", "User", NULL}; + + return find_baseou (session, "objectclass=posixAccount", prefer); + +} + +char * +ldap_find_group_baseou (ldap_session_t *session) +{ + char *prefer[] = {"Group", "Groups", NULL}; + + return find_baseou (session, "objectclass=posixGroup", prefer); + +} + +int +ldap_create_user (ldap_session_t *session, struct passwd *pw, + struct spwd *sp, const char *binddn, const char *password) +{ + LDAPMod *mods[9], mod[8]; + char *strvals[8][2]; + char *userdn, *baseou; + int i, rc; + + /* Sanity check. */ + if (session == NULL || pw == NULL) + return 1; + + if (session->bind == NULL) + { + /* If no binding is created yet, call ldap_authentication, + which creates the binding and checks the password. */ + if ((i = ldap_authentication (session, NULL, binddn, password)) != 0) + { + fprintf (stderr, _("Authentication failure.\n")); + return i; + } + } + + baseou = ldap_find_user_baseou (session); + if (baseou == NULL) + { + fprintf (stderr, _("Cannot find base ou for new users.\n")); + return 1; + } + printf (_("Base DN for user account `%s' is \"%s\".\n"), + pw->pw_name, baseou); + + + /* create top account object */ + strvals[0][0] = "account"; + strvals[0][1] = NULL; + strvals[1][0] = pw->pw_name; + strvals[1][1] = NULL; + + mod[0].mod_values = strvals[0]; + mod[0].mod_type = "objectClass"; + mod[0].mod_op = LDAP_MOD_ADD; + mod[1].mod_values = strvals[1]; + mod[1].mod_type = "uid"; + mod[1].mod_op = LDAP_MOD_ADD; + + mods[0] = &mod[0]; + mods[1] = &mod[1]; + mods[2] = NULL; + + if (!session->bind->bound_as_user) + { + rc = reopen_ldap_session (session); + if (rc != LDAP_SUCCESS) + return rc; + + rc = connect_with_dn (session); + if (rc != LDAP_SUCCESS) + return rc; + } + + if (asprintf (&userdn, "uid=%s,%s", pw->pw_name, baseou) < 0) + return 1; + rc = ldap_add_s (session->ld, userdn, mods); + if (rc != 0) + { + free (userdn); + return rc; + } + + /* create posixAccount object */ + strvals[0][0] = "posixAccount"; + strvals[0][1] = NULL; + strvals[1][0] = pw->pw_name; + strvals[1][1] = NULL; + if (sp && sp->sp_pwdp) + strvals[2][0] = sp->sp_pwdp; + else + strvals[2][0] = pw->pw_passwd ?: "x"; + strvals[2][1] = NULL; + if (asprintf (&strvals[3][0], "%u", pw->pw_uid) < 0) + return 1; + strvals[3][1] = NULL; + if (asprintf (&strvals[4][0], "%u", pw->pw_gid) < 0) + return 1; + strvals[4][1] = NULL; + strvals[5][0] = pw->pw_dir ?: ""; + strvals[5][1] = NULL; + strvals[6][0] = pw->pw_shell ?: ""; + strvals[6][1] = NULL; + strvals[7][0] = pw->pw_gecos; + strvals[7][1] = NULL; + + mod[0].mod_values = strvals[0]; + mod[0].mod_type = "objectClass"; + mod[0].mod_op = LDAP_MOD_ADD; + mod[1].mod_values = strvals[1]; + mod[1].mod_type = "cn"; + mod[1].mod_op = LDAP_MOD_ADD; + mod[2].mod_values = strvals[2]; + mod[2].mod_type = "userPassword"; + mod[2].mod_op = LDAP_MOD_ADD; + mod[3].mod_values = strvals[3]; + mod[3].mod_type = "uidNumber"; + mod[3].mod_op = LDAP_MOD_ADD; + mod[4].mod_values = strvals[4]; + mod[4].mod_type = "gidNumber"; + mod[4].mod_op = LDAP_MOD_ADD; + mod[5].mod_values = strvals[5]; + mod[5].mod_type = "homeDirectory"; + mod[5].mod_op = LDAP_MOD_ADD; + mod[6].mod_values = strvals[6]; + mod[6].mod_type = "loginShell"; + mod[6].mod_op = LDAP_MOD_ADD; + mod[7].mod_values = strvals[7]; + mod[7].mod_type = "gecos"; + mod[7].mod_op = LDAP_MOD_ADD; + + mods[0] = &mod[0]; + mods[1] = &mod[1]; + mods[2] = &mod[2]; + mods[3] = &mod[3]; + mods[4] = &mod[4]; + mods[5] = &mod[5]; + mods[6] = &mod[6]; + if (pw->pw_gecos && pw->pw_gecos[0] != '\0') + { + mods[7] = &mod[7]; + mods[8] = NULL; + } + else + mods[7] = NULL; + + rc = ldap_modify_s (session->ld, userdn, mods); + if (rc != 0) + { + ldap_delete_s (session->ld, userdn); + free (userdn); + return rc; + } + + /* create shadowAccount object */ + i = 0; + strvals[i][0] = "shadowAccount"; + strvals[i][1] = NULL; + mod[i].mod_values = strvals[i]; + mod[i].mod_type = "objectClass"; + mod[i].mod_op = LDAP_MOD_ADD; + mods[i] = &mod[i]; + i++; + if (sp->sp_lstchg > 0) + { + if (asprintf (&strvals[i][0], "%lu", sp->sp_lstchg) < 0) + return 1; + strvals[i][1] = NULL; + mod[i].mod_values = strvals[i]; + mod[i].mod_type = "shadowLastChange"; + mod[i].mod_op = LDAP_MOD_ADD; + mods[i] = &mod[i]; + i++; + } + if (sp->sp_min >= 0) + { + if (asprintf (&strvals[i][0], "%ld", sp->sp_min) < 0) + return 1; + strvals[i][1] = NULL; + mod[i].mod_values = strvals[i]; + mod[i].mod_type = "shadowMin"; + mod[i].mod_op = LDAP_MOD_ADD; + mods[i] = &mod[i]; + i++; + } + if (sp->sp_max >= 0) + { + if (asprintf (&strvals[i][0], "%ld", sp->sp_max) < 0) + return 1; + strvals[i][1] = NULL; + mod[i].mod_values = strvals[i]; + mod[i].mod_type = "shadowMax"; + mod[i].mod_op = LDAP_MOD_ADD; + mods[i] = &mod[i]; + i++; + } + if (sp->sp_warn >= 0) + { + if (asprintf (&strvals[i][0], "%ld", sp->sp_warn) < 0) + return 1; + strvals[i][1] = NULL; + mod[i].mod_values = strvals[i]; + mod[i].mod_type = "shadowWarning"; + mod[i].mod_op = LDAP_MOD_ADD; + mods[i] = &mod[i]; + } + if (sp->sp_inact >= 0) + { + if (asprintf (&strvals[i][0], "%ld", sp->sp_inact) < 0) + return 1; + strvals[i][1] = NULL; + mod[i].mod_values = strvals[i]; + mod[i].mod_type = "shadowInactive"; + mod[i].mod_op = LDAP_MOD_ADD; + mods[i] = &mod[i]; + i++; + } + if (sp->sp_expire >= 0) + { + if (asprintf (&strvals[i][0], "%ld", sp->sp_expire) < 0) + return 1; + strvals[i][1] = NULL; + mod[i].mod_values = strvals[i]; + mod[i].mod_type = "shadowExpire"; + mod[i].mod_op = LDAP_MOD_ADD; + mods[i] = &mod[i]; + i++; + } + if ((long int) sp->sp_flag != -1 ) + { + if (asprintf (&strvals[i][0], "%lu", sp->sp_flag) < 0) + return 1; + strvals[i][1] = NULL; + mod[i].mod_values = strvals[i]; + mod[i].mod_type = "shadowFlag"; + mod[i].mod_op = LDAP_MOD_ADD; + mods[i] = &mod[i]; + i++; + } + + mods[i] = NULL; + + rc = ldap_modify_s (session->ld, userdn, mods); + if (rc != 0) + ldap_delete_s (session->ld, userdn); + + free (userdn); + + return rc; + +} + +int +ldap_create_group (ldap_session_t *session, struct group *gr, + const char *binddn, const char *password) +{ + LDAPMod *mods[8], mod[8]; + char *strvals[8][3]; + char *groupdn, *baseou; + int i, rc; + + /* Sanity check. */ + if (session == NULL || gr == NULL) + return 1; + + if (session->bind == NULL) + { + /* If no binding is created yet, call ldap_authentication, + which creates the binding and checks the password. */ + if ((i = ldap_authentication (session, NULL, binddn, password)) != 0) + { + fprintf (stderr, _("Authentication failure.\n")); + return i; + } + } + + baseou = ldap_find_group_baseou (session); + if (baseou == NULL) + { + fprintf (stderr, _("Cannot find base ou for new groups.\n")); + return 1; + } + printf (_("Base DN for group `%s' is \"%s\".\n"), + gr->gr_name, baseou); + if (asprintf (&groupdn, "cn=%s,%s", gr->gr_name, baseou) < 0) + return 1; + + if (!session->bind->bound_as_user) + { + rc = reopen_ldap_session (session); + if (rc != LDAP_SUCCESS) + return rc; + + rc = connect_with_dn (session); + if (rc != LDAP_SUCCESS) + return rc; + } + + + /* create top objectClass. */ + strvals[0][0] = "posixGroup"; + strvals[0][1] = NULL; + + strvals[1][0] = gr->gr_name; + strvals[1][1] = NULL; + if (asprintf (&strvals[2][0], "%u", gr->gr_gid) < 0) + return 1; + strvals[2][1] = NULL; + + mod[0].mod_values = strvals[0]; + mod[0].mod_type = "objectClass"; + mod[0].mod_op = LDAP_MOD_ADD; + mod[1].mod_values = strvals[1]; + mod[1].mod_type = "cn"; + mod[1].mod_op = LDAP_MOD_ADD; + mod[2].mod_values = strvals[2]; + mod[2].mod_type = "gidNumber"; + mod[2].mod_op = LDAP_MOD_ADD; + + mods[0] = &mod[0]; + mods[1] = &mod[1]; + mods[2] = &mod[2]; + mods[3] = NULL; + + /* rfc2307bis uses standard LDAP groups (groupOfNames as + * structural objectclass) */ + if ( session->conf->use_rfc2307bis ) + { + strvals[0][1] = "groupOfNames"; + strvals[0][2] = NULL; + + /* groupOfNames requires at least one "member" attribute + * use an empty value for groups with no members */ + strvals[3][0] = ""; + strvals[3][1] = NULL; + + mod[3].mod_values = strvals[3]; + mod[3].mod_type = "member"; + mod[3].mod_op = LDAP_MOD_ADD; + mods[3] = &mod[3]; + mods[4] = NULL; + } + + rc = ldap_add_s (session->ld, groupdn, mods); + if (rc != 0) + { + ldap_delete_s (session->ld, groupdn); + free (groupdn); + return rc; + } + + free (strvals[2][0]); + + if (rc != 0) + ldap_delete_s (session->ld, groupdn); + + free (groupdn); + + return rc; + +} + +#endif /* USE_LDAP */ diff --git a/lib/libldap.h b/lib/libldap.h new file mode 100644 index 0000000..b0db5e8 --- /dev/null +++ b/lib/libldap.h @@ -0,0 +1,178 @@ + +#ifndef _LIBLDAP_H_ +#define _LIBLDAP_H_ 1 + +#ifdef USE_LDAP + +#include +#include +#include + +/* /etc/ldap.conf nss_ldap-style configuration */ +typedef struct ldap_config + { + /* URI */ + char *uri; + /* space delimited list of servers */ + char *host; + /* port, expected to be common to all servers */ + int port; + /* base DN, eg. dc=gnu,dc=org */ + char *base; + /* scope for searches */ + int scope; + /* deref policy */ + int deref; + /* bind dn/pw for "anonymous" authentication */ + char *binddn; + char *bindpw; + /* bind dn/pw for "root" authentication */ + char *rootbinddn; + char *rootbindpw; + /* SSL config states */ +#define SSL_OFF 0 +#define SSL_LDAPS 1 +#define SSL_START_TLS 2 + int ssl_on; + /* SSL path */ + char *sslpath; + /* attribute to set PAM_USER based on */ + char *tmplattr; + /* default template user */ + char *tmpluser; + /* search for Netscape password policy */ + int getpolicy; + /* host attribute checking, for access authorization */ + int checkhostattr; + /* group name; optional, for access authorization */ + char *groupdn; + /* group membership attribute; defaults to uniquemember */ + char *groupattr; + /* LDAP protocol version */ + int version; + /* search timelimit */ + int timelimit; + /* bind timelimit */ + int bind_timelimit; + /* automatically chase referrals */ + int referrals; + /* restart interrupted syscalls, OpenLDAP only */ + int restart; + /* chauthtok config states */ +#define PASSWORD_CLEAR 0 +#define PASSWORD_CRYPT 1 +#define PASSWORD_MD5 2 +#define PASSWORD_NDS 3 +#define PASSWORD_AD 4 +#define PASSWORD_EXOP 5 + int password_type; + /* tls check peer */ + int tls_checkpeer; + /* tls ca certificate file */ + char *tls_cacertfile; + /* tls ca certificate dir */ + char *tls_cacertdir; + /* tls ciphersuite */ + char *tls_ciphers; + /* tls certificate */ + char *tls_cert; + /* tls key */ + char *tls_key; + /* use the RFC2307bis Schema (groupmembers with full DN) */ + int use_rfc2307bis; + } +ldap_config_t; + +/* Password controls sent to client */ +#ifndef LDAP_CONTROL_PWEXPIRED +#define LDAP_CONTROL_PWEXPIRED "2.16.840.1.113730.3.4.4" +#endif /* LDAP_CONTROL_PWEXPIRED */ +#ifndef LDAP_CONTROL_PWEXPIRING +#define LDAP_CONTROL_PWEXPIRING "2.16.840.1.113730.3.4.5" +#endif /* LDAP_CONTROL_PWEXPIRING */ + +#ifndef LDAP_OPT_ON +#define LDAP_OPT_ON ((void *) 1) +#endif /* LDPA_OPT_ON */ +#ifndef LDAP_OPT_OFF +#define LDAP_OPT_OFF ((void *) 0) +#endif /* LDAP_OPT_OFF */ + +/* Seconds in a day */ +#define SECSPERDAY 86400 + +/* Netscape per-use password attributes. Unused except for DN. */ +typedef struct bind_info { + /* user name, to validate info cache */ + char *user; + /* DN to use for binding */ + char *dn; + /* temporary cache of user's bind credentials for rebind function */ + char *pw; + /* bound as user DN */ + int bound_as_user; +} bind_info_t; + +/* + * Per PAM-call LDAP session. We keep the user info and + * LDAP handle cached to minimize binds and searches to + * the directory, particularly as you can't rebind within + * a V2 session. + */ +#if defined(_INCLUDED_FROM_LIBLDAP_C_) +typedef struct ldap_session + { + LDAP *ld; + ldap_config_t *conf; + bind_info_t *bind; + } +ldap_session_t; +#else +typedef struct ldap_session_t ldap_session_t; +#endif + +void free_ldap_config (ldap_config_t **pconfig); +ldap_session_t *create_ldap_session (const char *configFile); +int open_ldap_session (ldap_session_t *); +int close_ldap_session (ldap_session_t *); + +int ldap_authentication (ldap_session_t *session, const char *user, + const char *binddn, const char *bindpw); +int ldap_update_user (ldap_session_t *session, const char *user, + const char *binddn, const char *password, + const char *field, const char *new_value); +int ldap_delete_user (ldap_session_t *session, const char *user, + const char *binddn, const char *password); +int ldap_update_group (ldap_session_t *session, const char *group, + const char *binddn, const char *password, + int op, const char *field, const char *new_value); +int ldap_add_groupmember (ldap_session_t *session, const char* group, + const char *binddn, const char *password, + const char *member, int first ); +int ldap_del_groupmember (ldap_session_t *session, const char* group, + const char *binddn, const char *password, + const char *member, int last ); +int ldap_delete_group (ldap_session_t *session, const char *group, + const char *binddn, const char *password); +int ldap_create_user (ldap_session_t *session, struct passwd *pw, + struct spwd *sp, const char *binddn, + const char *password); +int ldap_create_group (ldap_session_t *session, struct group *gr, + const char *binddn, const char *password); +char *convert_user_to_dn (ldap_session_t *session, const char *user); +char *ldap_find_user_baseou (ldap_session_t *session); +char *ldap_find_group_baseou (ldap_session_t *session); + +char *get_ldap_password (const char *binddn); +char *get_caller_dn (void); + +#ifndef FALSE +#define FALSE 0 +#endif + +#ifndef TRUE +#define TRUE !FALSE +#endif + +#endif /* USE_LDAP */ +#endif /* _LIBLDAP_H_ */ diff --git a/lib/lock_database.c b/lib/lock_database.c new file mode 100644 index 0000000..40523cb --- /dev/null +++ b/lib/lock_database.c @@ -0,0 +1,46 @@ +/* Copyright (C) 2002, 2003, 2005 Thorsten Kukuk + Author: Thorsten Kukuk + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License version 2 as + published by the Free Software Foundation. + + 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ + + +#ifdef HAVE_CONFIG_H +#include +#endif + +#include +#include + +#include "i18n.h" +#include "public.h" + + +#define MAX_LOCK_RETRIES 3 /* How often should we try to lock password file */ + +int +lock_database (void) +{ + int retries = 0; + + while (lckpwdf () && retries < MAX_LOCK_RETRIES) + { + sleep (1); + ++retries; + } + + if (retries == MAX_LOCK_RETRIES) + return 1; + + return 0; +} diff --git a/lib/logging.c b/lib/logging.c new file mode 100644 index 0000000..90d4a69 --- /dev/null +++ b/lib/logging.c @@ -0,0 +1,196 @@ +/* Copyright (C) 2004, 2005 Thorsten Kukuk + Author: Thorsten Kukuk + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License version 2 as + published by the Free Software Foundation. + + 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ + + +#ifdef HAVE_CONFIG_H +#include +#endif + +#include +#include +#include +#include +#include +#include +#include + +#include "i18n.h" +#include "logging.h" + +struct logfunc_t *logfunc_list = NULL; + +/* Add a new entry to the list. */ +static int +store (const char *name, const char *options) +{ + void *handle = NULL; + char *err_msg; + struct logfunc_t *new = malloc (sizeof (struct logfunc_t)); + char *buf; + + if (new == NULL) + abort (); + + if (name == NULL) + abort (); + + if (asprintf (&buf, "%s/liblog_%s.so.1", PLUGINDIR, name) < 0) + { + syslog (LOG_ERR, "Out of memory"); + fputs ("running out of memory!\n", stderr); + return -1; + } + + new->next = NULL; + + handle = dlopen (buf, RTLD_NOW); + free (buf); + if (!handle) + { + err_msg = dlerror (); + syslog (LOG_ERR, err_msg); + fprintf (stderr, _("Cannot open logging plugin:\n%s\n"), + err_msg); + return -1; + } + + if (asprintf (&buf, "%s_sec_log", name) < 0) + { + syslog (LOG_ERR, "Out of memory"); + fputs ("running out of memory!\n", stderr); + return -1; + } + dlerror (); + new->sec_log_fnc = dlsym (handle, buf); + if ((err_msg = dlerror ()) != NULL) + { + syslog (LOG_ERR, err_msg); + fprintf (stderr, _("Cannot find symbol `%s':\n%s\n"), + buf, err_msg); + dlclose (handle); + free (buf); + return -1; + } + free (buf); + + if (asprintf (&buf, "%s_open_sec_log", name) < 0) + { + syslog (LOG_ERR, "Out of memory"); + fputs ("running out of memory!\n", stderr); + return -1; + } + new->open_sec_log_fnc = dlsym (handle, buf); + if ((err_msg = dlerror ()) != NULL) + { + syslog (LOG_ERR, err_msg); + fprintf (stderr, _("Cannot find symbol `%s':\n%s\n"), + buf, err_msg); + dlclose (handle); + free (buf); + return -1; + } + free (buf); + + (*new->open_sec_log_fnc)(options); + + if (logfunc_list == NULL) + logfunc_list = new; + else + { + struct logfunc_t *ptr = logfunc_list; + + while (ptr->next != NULL) + ptr = ptr->next; + + ptr->next = new; + } + + return 0; +} + + +void +open_sec_log (const char *program) +{ + FILE *fp; + char *buf = NULL; + size_t buflen = 0; + + openlog (program, LOG_PID, LOG_AUTHPRIV); + + fp = fopen ("/etc/pwdutils/logging", "r"); + if (NULL == fp) + { +#if 0 /* We should not try to load modules if none is setup */ + if (store ("syslog", NULL) < 0) + { + fprintf (stderr, _("Error setting up logging subsystem!\n")); + return; + } +#endif + return; + } + + while (!feof (fp)) + { + char *tmp, *cp; +#if defined(HAVE_GETLINE) + ssize_t n = getline (&buf, &buflen, fp); +#elif defined (HAVE_GETDELIM) + ssize_t n = getdelim (&buf, &buflen, '\n', fp); +#else + ssize_t n; + + if (buf == NULL) + { + buflen = 8096; + buf = malloc (buflen); + } + buf[0] = '\0'; + fgets (buf, buflen - 1, fp); + if (buf != NULL) + n = strlen (buf); + else + n = 0; +#endif /* HAVE_GETLINE / HAVE_GETDELIM */ + cp = buf; + + if (n < 1) + break; + + tmp = strchr (cp, '#'); /* remove comments */ + if (tmp) + *tmp = '\0'; + while (isspace ((int)*cp)) /* remove spaces and tabs */ + ++cp; + if (*cp == '\0') /* ignore empty lines */ + continue; + + if (cp[strlen (cp) - 1] == '\n') + cp[strlen (cp) - 1] = '\0'; + + tmp = strsep (&cp, " \t="); + if (cp != NULL) + while (isspace ((int)*cp) || *cp == '=') + ++cp; + + store (tmp, cp); + } + fclose (fp); + + if (buf) + free (buf); +} diff --git a/lib/logging.h b/lib/logging.h new file mode 100644 index 0000000..3385f68 --- /dev/null +++ b/lib/logging.h @@ -0,0 +1,113 @@ +/* Copyright (C) 2004, 2005 Thorsten Kukuk + Author: Thorsten Kukuk + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License version 2 as + published by the Free Software Foundation. + + 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ + +#ifndef __LOGGING_H__ +#define __LOGGING_H__ + +#include + +extern void open_sec_log (const char *program); + +struct logfunc_t { + void (*sec_log_fnc) (const char *program, unsigned int id, ...); + void (*open_sec_log_fnc) (const char *arguments); + struct logfunc_t *next; +}; + +extern struct logfunc_t *logfunc_list; + +#define sec_log(program, id, args...) \ + do { \ + struct logfunc_t *listptr = logfunc_list; \ + while (listptr) \ + { \ + listptr->sec_log_fnc (program, id, ##args); \ + listptr = listptr->next; \ + } \ + } while (0); + +#define MSG_PATH_ARG_DENIED 1 /* caller uid */ +#define MSG_PERMISSION_DENIED 2 /* account, id, caller uid */ +#define MSG_SHADOW_DATA_PRINTED 3 /* account, uid, caller uid */ +#define MSG_UNKNOWN_GROUP 4 /* group, caller uid */ +#define MSG_CHANGING_GROUP_PASSWORD 5 /* group, caller uid */ +#define MSG_PASSWORD_CHANGE_ABORTED 6 /* account, caller uid */ +#define MSG_MAX_GROUP_PASSWD_TRIES 7 /* group, caller uid */ +#define MSG_ERROR_CHANGE_GROUP_PASSWORD 8 /* group, caller uid */ +#define MSG_GROUP_PASSWORD_REMOVED 9 /* group, gid, caller uid */ +#define MSG_GROUP_PASSWORD_CHANGED 10 /* group, gid, caller uid */ +#define MSG_NO_FREE_GID 11 /* gid_min, gid max */ +#define MSG_GID_NOT_UNIQUE 12 /* new_gid, caller uid */ +#define MSG_GROUP_NAME_INVALID 13 /* group, caller uid */ +#define MSG_GROUP_FILE_ALREADY_LOCKED 14 /* - */ +#define MSG_GROUP_ALREADY_EXISTS 15 /* group, caller uid */ +#define MSG_ERROR_ADDING_NEW_GROUP 16 /* group, gid, caller uid */ +#define MSG_NEW_GROUP_ADDED 17 /* group, gid, caller uid */ +#define MSG_GID_IS_PRIMARY_GROUP 18 /* gid, group, caller uid */ +#define MSG_CANNOT_REMOVE_PRIMARY_GROUP 19 /* group, caller uid */ +#define MSG_ERROR_REMOVING_GROUP 20 /* group, gid, caller uid */ +#define MSG_GROUP_DELETED 21 /* group, gid, caller uid */ +#define MSG_PASSWD_FILE_ALREADY_LOCKED 22 /* - */ +#define MSG_ERROR_MODIFYING_GROUP 23 /* group, gid, caller uid */ +#define MSG_USER_REMOVED_FROM_GROUP 24 /* user, group, gid, caller uid */ +#define MSG_USER_ADDED_TO_GROUP 25 /* user, group, gid, caller uid */ +#define MSG_GROUP_NAME_CHANGED 26 /* new name, old name, gid, caller uid */ +#define MSG_GROUP_ID_CHANGED 27 /* group, new gid, old gid, caller uid */ +#define MSG_PASSWORD_STATUS_FOR_ALL_DENIED 28 /* caller uid */ +#define MSG_DISPLAY_PASSWORD_STATUS_FOR_ALL 29 /* caller uid */ +#define MSG_UNKNOWN_USER 30 /* account, caller uid */ +#define MSG_PASSWORD_CHANGE_DENIED 31 /* account, uid, caller uid */ +#define MSG_DISPLAY_PASSWORD_STATUS 32 /* account, uid, caller uid */ +#define MSG_PASSWORD_CHANGE_FAILED 33 /* pam error, account, uid, caller uid */ +#define MSG_PASSWORD_CHANGED 34 /* account, uid, caller uid */ +#define MSG_NO_FREE_UID 35 /* uid min, uid max */ +#define MSG_NO_ACCOUNT_FOUND 36 /* caller uid */ +#define MSG_CONFIG_DEFAULTS_CHANGED 37 /* gid, home, shell, inactive, expire, caller uid */ +#define MSG_UPDATING_DEFAULT_CONFIG_FAILED 38 /* config file, caller uid */ +#define MSG_UID_NOT_UNIQUE 39 /* new_uid, caller uid */ +#define MSG_USER_NAME_INVALID 40 /* account, caller uid */ +#define MSG_USER_ALREADY_EXISTS 41 /* account, caller uid */ +#define MSG_NEW_USER_ADDED 42 /* account, uid, gid, home, shell, caller uid */ +#define MSG_HOME_DIR_CREATED 43 /* account, uid, home, caller uid */ +#define MSG_CALL_SCRIPT 44 /* variable, script, name, uid, gid, home, caller uid */ +#define MSG_ERROR_REMOVE_USER_FROM_GROUP 45 /* account, uid, group, gid, caller uid */ +#define MSG_NOT_OWNED_BY_USER 46 /* file, account, uid, caller uid */ +#define MSG_HOME_DIR_REMOVED 47 /* account, uid, home, caller uid */ +#define MSG_ERROR_REMOVING_USER 48 /* account, uid, caller uid */ +#define MSG_USER_DELETED 49 /* account, uid, caller uid */ +#define MSG_ERROR_RENAME_USER_IN_GROUP 50 /* account, uid, group, gid, caller uid */ +#define MSG_USER_RENAMED_IN_GROUP 51 /* account, old account, uid, group, gid, caller uid */ +#define MSG_ERROR_MODIFYING_USER 52 /* account, uid, caller uid */ +#define MSG_ACCOUNT_IN_USE 53 /* account, uid, caller uid */ +#define MSG_USER_NAME_CHANGED 54 /* new account, old account, uid, caller uid */ +#define MSG_USER_ID_CHANGED 55 /* account, new id, old id, caller id */ +#define MSG_GECOS_CHANGED 56 /* account, id, new gecos, old gecos, caller id */ +#define MSG_PRIMARY_GROUP_CHANGED 57 /* account, id, new gid, old gid, caller id */ +#define MSG_HOME_DIR_CHANGED 58 /* account, id, new home, old home, caller id */ +#define MSG_SHELL_CHANGED 59 /* account, id, new shell, old shell, caller id */ +#define MSG_INACTIVE_DAYS_CHANGED 60 /* account, id, inactive days, old value, caller id */ +#define MSG_EXPIRE_DATE_CHANGED 61 /* account, id, expire date, old date, caller id */ +#define MSG_DROP_PRIVILEGE_FAILED 62 /* errno, caller id */ +#define MSG_MAIL_FILE_CREATED 63 /* account, caller id */ +#define MSG_MINIMUM_AGE 64 /* account, uid, min, old min, caller id */ +#define MSG_MAXIMUM_AGE 65 /* account, uid, max, old max, caller id */ +#define MSG_WARNING_DAYS 66 /* account, uid, warn, old warn, caller id */ +#define MSG_INACTIVE_DAYS 67 /* account, uid, inactive, old inactive, caller id */ +#define MSG_LAST_CHANGE_DATE 68 /* account, uid, change, old change, caller id */ +#define MSG_EXPIRE_DATE 69 /* account, uid, expire, old expire, caller id */ +#define MSG_STDIN_FOR_NONROOT_DENIED 70 /* caller id */ + +#endif diff --git a/lib/logindefs.c b/lib/logindefs.c new file mode 100644 index 0000000..42effde --- /dev/null +++ b/lib/logindefs.c @@ -0,0 +1,281 @@ +/* Copyright (C) 2003, 2004, 2005 Thorsten Kukuk + Author: Thorsten Kukuk + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License version 2 as + published by the Free Software Foundation. + + 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ + +#ifdef HAVE_CONFIG_H +#include +#endif + +#include +#include +#include +#include +#include +#include +#include + +#include "logindefs.h" + +struct item { + char *name; /* name of the option. */ + char *value; /* value of the option. */ + struct item *next; /* pointer to next option. */ + char *path; /* name of config file for this option. */ +}; + +static struct item *list = NULL; + +void +free_getlogindefs_data (void) +{ + struct item *ptr; + + ptr = list; + while (ptr != NULL) + { + struct item *tmp; + tmp = ptr->next; + free (ptr->path); + free (ptr->name); + free (ptr->value); + free (ptr); + ptr = tmp; + } + + list = NULL; +} + +/* Add a new entry to the list. */ +static void +store (const char *name, const char *value, const char *path) +{ + struct item *new = malloc (sizeof (struct item)); + + if (new == NULL) + abort (); + + if (name == NULL) + abort (); + + assert (name); + new->name = strdup (name); + new->value = strdup (value?:""); + assert (path); + new->path = strdup (path); + new->next = list; + list = new; +} + +/* search a special entry in the list and return the value. */ +static const char * +search (const char *name) +{ + struct item *ptr; + + ptr = list; + while (ptr != NULL) + { + if (strcasecmp (name, ptr->name) == 0) + return ptr->value; + ptr = ptr->next; + } + + return NULL; +} + +/* search a special entry in the list and return the filename + from where we got it. */ +static const char * +search_config (const char *name) +{ + struct item *ptr; + + ptr = list; + while (ptr != NULL) + { + if (strcasecmp (name, ptr->name) == 0) + return ptr->path; + ptr = ptr->next; + } + + /* Should not happen, we found the entry already. */ + assert (NULL); + return NULL; +} + +/* Load the config file */ +static void +load_defaults_internal (const char *filename) +{ + FILE *fp; + char *buf = NULL; + size_t buflen = 0; + + fp = fopen (filename, "r"); + if (NULL == fp) + return; + + while (!feof (fp)) + { + char *tmp, *cp; +#if defined(HAVE_GETLINE) + ssize_t n = getline (&buf, &buflen, fp); +#elif defined (HAVE_GETDELIM) + ssize_t n = getdelim (&buf, &buflen, '\n', fp); +#else + ssize_t n; + + if (buf == NULL) + { + buflen = 8096; + buf = malloc (buflen); + } + buf[0] = '\0'; + fgets (buf, buflen - 1, fp); + if (buf != NULL) + n = strlen (buf); + else + n = 0; +#endif /* HAVE_GETLINE / HAVE_GETDELIM */ + cp = buf; + + if (n < 1) + break; + + tmp = strchr (cp, '#'); /* remove comments */ + if (tmp) + *tmp = '\0'; + while (isspace ((int)*cp)) /* remove spaces and tabs */ + ++cp; + if (*cp == '\0') /* ignore empty lines */ + continue; + + if (cp[strlen (cp) - 1] == '\n') + cp[strlen (cp) - 1] = '\0'; + + tmp = strsep (&cp, " \t="); + if (cp != NULL) + while (isspace ((int)*cp) || *cp == '=') + ++cp; + + store (tmp, cp, filename); + } + fclose (fp); + + if (buf) + free (buf); +} + +static void +load_defaults (void) +{ + load_defaults_internal ("/etc/default/passwd"); + load_defaults_internal ("/etc/login.defs"); +} + +int +getlogindefs_bool (const char *name, int dflt) +{ + const char *val; + + if (list == NULL) + load_defaults (); + + val = search (name); + + if (val == NULL) + return dflt; + + return (strcasecmp (val, "yes") == 0); +} + +long +getlogindefs_num (const char *name, long dflt) +{ + const char *val; + char *cp; + long retval; + + if (list == NULL) + load_defaults (); + + val = search (name); + + if (val == NULL) + return dflt; + + retval = strtol (val, &cp, 0); + if (*cp != '\0' || + ((retval == LONG_MAX || retval == LONG_MIN) && errno == ERANGE)) + { + fprintf (stderr, + "%s: %s contains invalid numerical value: %s!\n", + search_config (name), name, val); + retval = dflt; + } + return retval; +} + +unsigned long +getlogindefs_unum (const char *name, unsigned long dflt) +{ + const char *val; + char *cp; + unsigned long retval; + + if (list == NULL) + load_defaults (); + + val = search (name); + + if (val == NULL) + return dflt; + + retval = strtoul (val, &cp, 0); + if (*cp != '\0' || (retval == ULONG_MAX && errno == ERANGE)) + { + fprintf (stderr, + "%s: %s contains invalid numerical value: %s!\n", + search_config (name), name, val); + retval = dflt; + } + return retval; +} + +const char * +getlogindefs_str (const char *name, const char *dflt) +{ + const char *retval; + + if (list == NULL) + load_defaults (); + + retval = search (name); + + return retval ?: dflt; +} + +#if defined(TEST) + +int +main () +{ + printf ("CYPT=%s\n", getlogindefs_str ("cRypt", "no")); + printf ("LOG_UNKFAIL_ENAB=%s\n", getlogindefs_str ("log_unkfail_enab","")); + printf ("DOESNOTEXIST=%s\n", getlogindefs_str ("DOESNOTEXIST","yes")); + return 0; +} + +#endif diff --git a/lib/logindefs.h b/lib/logindefs.h new file mode 100644 index 0000000..0dc70b6 --- /dev/null +++ b/lib/logindefs.h @@ -0,0 +1,29 @@ +/* Copyright (C) 2003 Thorsten Kukuk + Author: Thorsten Kukuk + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License version 2 as + published by the Free Software Foundation. + + 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ + +#ifndef _LOGINDEFS_H_ + +#define _LOGINDEFS_H_ 1 + +extern int getlogindefs_bool (const char *name, int dflt); +extern long getlogindefs_num (const char *name, long dflt); +extern unsigned long getlogindefs_unum (const char *name, unsigned long dflt); +extern const char *getlogindefs_str (const char *name, const char *dflt); + +/* Free all data allocated by getlogindefs_* calls before. */ +extern void free_getlogindefs_data (void); + +#endif /* _LOGINDEFS_H_ */ diff --git a/lib/msg_table.h b/lib/msg_table.h new file mode 100644 index 0000000..315707e --- /dev/null +++ b/lib/msg_table.h @@ -0,0 +1,93 @@ +/* Copyright (C) 2004, 2005, 2008 Thorsten Kukuk + Author: Thorsten Kukuk + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License version 2 as + published by the Free Software Foundation. + + 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ + +typedef struct msg_table_entry { + const char *msg; + int result; +} msg_table_entry_t; + +static msg_table_entry_t msg_table[] = { + /* 0 */ {"NULL", 0}, + /* 1 */ {"path specification denied - by=%u", 0}, + {"permission denied - account=%s, id=%u, by=%u", 0}, + {"password aging information displayed - account=%s, uid=%u, by=%u", 1}, + {"group is unknown - group=%s, by=%u", 0}, + {"user changing the password for group - group=%s, by=%u", 1}, + {"password change aborted - for=%s, by=%u", 0}, + {"password modification exceeded max tries, aborted - group=%s, by=%u", 0}, + {"failed to change group password - group=%s, by=%u", 0}, + {"group password removed - group=%s, gid=%u, by=%u", 1}, + /* 10 */ {"group password changed - group=%s, gid=%u, by=%u", 1}, + {"can't get unique gid in range %u - %u", 0}, + {"GID %u is not unique - by=%u", 0}, + {"invalid name - group=%s, by=%u", 0}, + {"cannot lock group file: already locked", 0}, + {"group already exists - group=%s, by=%u", 0}, + {"failed to add new group - group=%s, gid=%u, by=%u", 0}, + {"new group added - group=%s, gid=%u, by=%u", 1}, + {"GID `%u' is primary group of `%s' - by=%u", 1}, + {"cannot remove user's primary group - group=%s, by=%u", 0}, + /* 20 */ {"failed to delete group - group=%s, gid=%u, by=%u", 0}, + {"group deleted - group=%s, gid=%u, by=%u", 1}, + {"cannot lock password file: already locked", 0}, + {"failed to modify group - group=%s, gid=%u, by=%u", 0}, + {"account removed from group - account=%s, group=%s, gid=%u, by=%u", 1}, + {"account added to group - account=%s, group=%s, gid=%u, by=%u", 1}, + {"group name changed - group=%s, old group=%s, gid=%u, by=%u", 1}, + {"group gid changed - group=%s, gid=%u, old gid=%u, by=%u", 1}, + {"password status display for all users denied - by=%u", 0}, + {"password status displayed for all users - by=%u", 1}, + /* 30 */ {"account is unknown - account=%s, by=%u", 0}, + /* 31 */ {"password change denied - account=%s, uid=%u, by=%u", 0}, + /* 32 */ {"password status displayed - account=%s, uid=%u, by=%u", 1}, + /* 33 */ {"password change failed, pam error %d - account=%s, uid=%u, by=%u", 0}, + /* 34 */ {"password changed - account=%s, uid=%u, by=%u", 1}, + /* 35 */ {"can't get unique uid in range %u - %u", 0}, + /* 36 */ {"cannot determine account name - uid=%u", 0}, + /* 37 */ {"defaults changed - gid=%u, home=%s, shell=%s, inactive=%li, expire=%s, by=%u", 1}, + /* 38 */ {"updating default config file `%s' faild - by=%u", 0}, + /* 39 */ {"UID %u is not unique - by=%u", 0}, + /* 40 */ {"invalid name - account=%s, by=%u", 0}, + {"account already exists - account=%s, by=%u", 0}, + {"new account added - account=%s, uid=%u, gid=%u, home=%s, shell=%s, by=%u", 1}, + {"home directory created - account=%s, uid=%u, home=%s, by=%u", 1}, + {"running %s command - script=%s, account=%s, uid=%u, gid=%u, home=%s, by=%u", 1}, + {"error removing account from group - account=%s, uid=%u, group=%s, gid=%u, by=%u", 0}, + {"`%s' is not owned by user, not removed - account=%s, uid=%u, by %u", 0}, + {"home directory deleted - account=%s, uid=%u, home=%s, by=%u", 1}, + {"failed to delete account - account=%s, uid=%u, by=%u", 0}, + {"account deleted - account=%s, uid=%u, by=%u", 1}, + /* 50 */ {"error renaming account in group - account=%s, uid=%u, group=%s, gid=%u, by=%u", 0}, + /* 51 */ {"account name renamed in group - new=%s, old=%s, uid=%u, group=%s, gid=%u, by=%u", 1}, + /* 52 */ {"failed to modify account - account=%s, uid=%u, by=%u", 0}, + /* 53 */ {"account is currently in use - account=%s, uid=%u, by=%u", 0}, + /* 54 */ {"account name changed - new=%s, old=%s, uid=%u, by=%u", 1}, + /* 55 */ {"UID changed - account=%s, new id=%u, old id=%u, by=%u", 1}, + /* 56 */ {"account GECOS changed - account=%s, uid=%u, GECOS='%s', old GECOS='%s', by=%u", 1}, + /* 57 */ {"default group changed - account=%s, uid=%u, gid=%u, old gid=%u, by=%u", 1}, + /* 58 */ {"home directory changed - account=%s, uid=%u, home=%s, old home=%s, by=%u", 1}, + /* 59 */ {"shell changed - account=%s, uid=%u, shell=%s, old shell=%s, by=%u", 1}, + /* 60 */ {"inactive days changed - account=%s, uid=%u, inactive=%li, old=%li, by=%u", 1}, + /* 61 */ {"expiration date changed - account=%s, uid=%u, expire=%s, old date=%s, by=%u", 1}, + /* 62 */ {"failed to drop privileges, errno=%d - by=%u", 0}, + /* 63 */ {"mail spool file created - account=%s, by=%u", 1}, + /* 64 */ {"password minimum age changed - account=%s, uid=%u, min=%li, old min=%li, by=%u", 1}, + /* 65 */ {"password maximum age changed - account=%s, uid=%u, max=%li, old max=%li, by=%u", 1}, + /* 66 */ {"password warning days changed - account=%s, uid=%u, warn=%li, old warn=%li, by=%u", 1}, + /* 67 */ {"password inactive days changed - account=%s, uid=%u, inactive=%li, old inactive=%li, by=%u", 1}, + /* 68 */ {"password last change date changed - account=%s, uid=%u, change=%s, old change=%s, by=%u", 1}, + /* 69 */ {"password expiration date changed - account=%s, uid=%u, expire=%s, old expire=%s, by=%u", 1}, + /* 70 */ {"user tried to set the password from stdin - by=%u", 0}}; diff --git a/lib/nispasswd.h b/lib/nispasswd.h new file mode 100644 index 0000000..9667bb5 --- /dev/null +++ b/lib/nispasswd.h @@ -0,0 +1,124 @@ +#ifndef _NISPASSWD_H_ +#define _NISPASSWD_H_ + +#include + +enum nispasswd_status { + NPD_SUCCESS = 0, + NPD_TRYAGAIN = 1, + NPD_PARTIALSUCCESS = 2, + NPD_FAILED = 3, +}; +typedef enum nispasswd_status nispasswd_status; + +enum nispasswd_code { + NPD_NOTMASTER = 0, + NPD_NOSUCHENTRY = 1, + NPD_IDENTINVALID = 2, + NPD_NOPASSWD = 3, + NPD_NOSHDWINFO = 4, + NPD_SHDWCORRUPT = 5, + NPD_NOTAGED = 6, + NPD_CKGENFAILED = 7, + NPD_VERFINVALID = 8, + NPD_PASSINVALID = 9, + NPD_ENCRYPTFAIL = 10, + NPD_DECRYPTFAIL = 11, + NPD_KEYSUPDATED = 12, + NPD_KEYNOTREENC = 13, + NPD_PERMDENIED = 14, + NPD_SRVNOTRESP = 15, + NPD_NISERROR = 16, + NPD_SYSTEMERR = 17, + NPD_BUFTOOSMALL = 18, + NPD_INVALIDARGS = 19, +}; +typedef enum nispasswd_code nispasswd_code; + +enum nispasswd_field { + NPD_PASSWD = 0, + NPD_GECOS = 1, + NPD_SHELL = 2, + NPD_SECRETKEY = 3, +}; +typedef enum nispasswd_field nispasswd_field; + +struct nispasswd_error { + nispasswd_field npd_field; + nispasswd_code npd_code; + struct nispasswd_error *next; +}; +typedef struct nispasswd_error nispasswd_error; + +struct passwd_info { + char *pw_gecos; + char *pw_shell; +}; +typedef struct passwd_info passwd_info; + +struct npd_request { + char *username; + char *domain; + char *key_type; + struct { + u_int user_pub_key_len; + u_char *user_pub_key_val; + } user_pub_key; + struct { + u_int npd_authpass_len; + u_char *npd_authpass_val; + } npd_authpass; + u_int ident; +}; +typedef struct npd_request npd_request; +#define __NPD_MAXPASSBYTES 12 + +typedef char passbuf[__NPD_MAXPASSBYTES]; + +struct npd_newpass { + u_int npd_xrandval; + passbuf pass; +}; +typedef struct npd_newpass npd_newpass; + +struct npd_update { + u_int ident; + npd_newpass xnewpass; + passwd_info pass_info; +}; +typedef struct npd_update npd_update; + +struct nispasswd_verf { + u_int npd_xid; + u_int npd_xrandval; +}; +typedef struct nispasswd_verf nispasswd_verf; + +struct nispasswd_authresult { + nispasswd_status status; + union { + nispasswd_verf npd_verf; + nispasswd_code npd_err; + } nispasswd_authresult_u; +}; +typedef struct nispasswd_authresult nispasswd_authresult; + +struct nispasswd_updresult { + nispasswd_status status; + union { + nispasswd_error reason; + nispasswd_code npd_err; + } nispasswd_updresult_u; +}; +typedef struct nispasswd_updresult nispasswd_updresult; + +#define NISPASSWD_PROG 100303 +#define NISPASSWD_VERS 1 + +#define NISPASSWD_AUTHENTICATE 1 +extern bool_t nispasswd_authenticate_1_svc(npd_request *, nispasswd_authresult *, struct svc_req *); +#define NISPASSWD_UPDATE 2 +extern bool_t nispasswd_update_1_svc(npd_update *, nispasswd_updresult *, struct svc_req *); +extern int nispasswd_prog_1_freeresult (SVCXPRT *, xdrproc_t, caddr_t); + +#endif /* !_NISPASSWD_H_ */ diff --git a/lib/nsw.c b/lib/nsw.c new file mode 100644 index 0000000..20f6478 --- /dev/null +++ b/lib/nsw.c @@ -0,0 +1,183 @@ +/* Copyright (C) 2002, 2003 Thorsten Kukuk + Author: Thorsten Kukuk + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License version 2 as + published by the Free Software Foundation. + + 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ + +#ifdef HAVE_CONFIG_H +#include +#endif + +#include +#include +#include +#include +#include + +#include "nsw.h" + +#define PATH_NSWCONF "/etc/nsswitch.conf" + +static FILE *nssfile = NULL; + +static int +setnswent (void) +{ + if (nssfile) + fclose (nssfile); + + nssfile = fopen (PATH_NSWCONF, "r"); + + return (nssfile == NULL ? -1 : 0); +} + +static void +endnswent (void) +{ + if (nssfile) + { + fclose (nssfile); + nssfile = NULL; + } +} + +static struct nsw * +getnswent (void) +{ + struct nsw *nswb; + char buf[1024]; + char *cp, *tmp; + int count; + + if (!nssfile) + setnswent (); + + + if (nssfile == NULL) + return NULL; + + nswb = calloc (1, sizeof (struct nsw)); + + do { + cp = fgets (buf, sizeof (buf), nssfile); + if (cp == NULL) + return NULL; + + tmp = strchr (cp, '#'); + if (tmp) + *tmp = '\0'; + + while (isspace (*cp)) + cp++; + } + while (*cp == '\0'); + + tmp = cp; + + cp = strchr (cp, ':'); + if (!cp) + return NULL; + + *cp++ = '\0'; + nswb->name = strdup (tmp); + + while (isspace (*cp)) + cp++; + + count = 3; + nswb->orders = malloc ((count + 1) * sizeof (char *)); + for (nswb->orderc = 0; *cp; nswb->orderc++) + { + tmp = cp; + + while (!isspace (*cp) && *cp != '\0') + ++cp; + + if (*cp) + *cp++ = '\0'; + + if (nswb->orderc >= count) + { + count += 3; + nswb->orders = realloc (nswb->orders, (count + 1) * sizeof (char *)); + } + + nswb->orders[nswb->orderc] = strdup (tmp); + + while (isspace (*cp)) + cp++; + } + + nswb->orders[nswb->orderc] = NULL; + + return nswb; +} + +void +nsw_free (struct nsw *ptr) +{ + int i; + + free (ptr->name); + for (i = 0; i < ptr->orderc; ++i) + free (ptr->orders[i]); + + if (ptr->orders) + free (ptr->orders); + free (ptr); + + return; +} + +/* If we don't have a nsswitch.conf file, return + dummy entry "service: files". */ +static struct nsw * +create_dummy_files (const char *name) +{ + struct nsw *nswp = calloc (1, sizeof (struct nsw)); + if (nswp == NULL) + return NULL; + + nswp->name = strdup (name); + nswp->orderc = 1; + nswp->orders = calloc (2, sizeof (char *)); + nswp->orders[0] = strdup ("files"); + nswp->orders[1] = NULL; + + return nswp; +} + + +struct nsw * +_getnswbyname (const char *name) +{ + struct nsw *result; + + if (setnswent () != 0) + return create_dummy_files (name); + + while ((result = getnswent ()) != NULL) + { + if (strcmp (name, result->name) == 0) + { + endnswent (); + return result; + } + else + nsw_free (result); + } + + endnswent (); + + return NULL; +} diff --git a/lib/nsw.h b/lib/nsw.h new file mode 100644 index 0000000..d302f1d --- /dev/null +++ b/lib/nsw.h @@ -0,0 +1,29 @@ +/* Copyright (C) 2002 Thorsten Kukuk + Author: Thorsten Kukuk + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License version 2 as + published by the Free Software Foundation. + + 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ + +#ifndef __NSW_H__ +#define __NSW_H__ + +struct nsw { + char *name; + int orderc; + char **orders; +}; + +extern struct nsw *_getnswbyname (const char *name); +extern void nsw_free (struct nsw *ptr); + +#endif /* __NSW_H__ */ diff --git a/lib/parse_crypt_arg.c b/lib/parse_crypt_arg.c new file mode 100644 index 0000000..1f76ae6 --- /dev/null +++ b/lib/parse_crypt_arg.c @@ -0,0 +1,151 @@ +/* Copyright (C) 2004, 2005 Thorsten Kukuk + Author: Thorsten Kukuk + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License version 2 as + published by the Free Software Foundation. + + 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ + + +#if HAVE_CONFIG_H +# include +#endif + +#include +#include +#include +#include +#include +#include +#if defined(HAVE_XCRYPT_H) +#include +#elif defined(HAVE_CRYPT_H) +#include +#endif + +#include "i18n.h" +#include "parse_crypt_arg.h" + +#ifndef RANDOM_DEVICE +#define RANDOM_DEVICE "/dev/urandom" +#endif + +#if defined(HAVE_XCRYPT_GENSALT_R) +static int +read_loop (int fd, char *buffer, int count) +{ + int offset, block; + + offset = 0; + while (count > 0) + { + block = read(fd, &buffer[offset], count); + + if (block < 0) + { + if (errno == EINTR) + continue; + return block; + } + if (!block) + return offset; + + offset += block; + count -= block; + } + + return offset; +} +#endif + +char * +#if defined(HAVE_XCRYPT_GENSALT_R) +make_crypt_salt (const char *crypt_prefix, int crypt_rounds) +#else +make_crypt_salt (const char *crypt_prefix __attribute__ ((unused)), + int crypt_rounds __attribute__ ((unused))) +#endif +{ +#if defined(HAVE_XCRYPT_GENSALT_R) +#define CRYPT_GENSALT_OUTPUT_SIZE (7 + 22 + 1) + int fd; + char entropy[16]; + char *retval; + char output[CRYPT_GENSALT_OUTPUT_SIZE]; + + fd = open (RANDOM_DEVICE, O_RDONLY); + if (fd < 0) + { + fprintf (stderr, _("Can't open %s for reading: %s\n"), + RANDOM_DEVICE, strerror (errno)); + return NULL; + } + + if (read_loop (fd, entropy, sizeof(entropy)) != sizeof(entropy)) + { + close (fd); + fprintf (stderr, _("Unable to obtain entropy from %s\n"), + RANDOM_DEVICE); + return NULL; + } + + close (fd); + + retval = xcrypt_gensalt_r (crypt_prefix, crypt_rounds, entropy, + sizeof (entropy), output, sizeof(output)); + + memset (entropy, 0, sizeof (entropy)); + + if (!retval) + { + fprintf (stderr, + _("Unable to generate a salt, check your crypt settings.\n")); + return NULL; + } + + return strdup (retval); +#else +#define ascii_to_bin(c) ((c)>='a'?(c-59):(c)>='A'?((c)-53):(c)-'.') +#define bin_to_ascii(c) ((c)>=38?((c)-38+'a'):(c)>=12?((c)-12+'A'):(c)+'.') + + time_t tm; + char salt[3]; + + time (&tm); + salt[0] = bin_to_ascii(tm & 0x3f); + salt[1] = bin_to_ascii((tm >> 6) & 0x3f); + salt[2] = '\0'; + + return strdup (salt); +#endif +} + +crypt_t +parse_crypt_arg (const char *arg) +{ + if (strcasecmp (arg, "des") == 0) + return DES; + else if (strcasecmp (arg, "md5") == 0) + return MD5; + else if (strcasecmp (arg, "blowfish") == 0 || + strcasecmp (arg, "bf") == 0) + { +#if defined(HAVE_XCRYPT_GENSALT_R) + return BLOWFISH; +#else + fprintf (stderr, _("No support for blowfish compiled in, using MD5.\n")); + return MD5; +#endif + } + + fprintf (stderr, _("No support for %s available, using DES.\n"), optarg); + return DES; +} diff --git a/lib/parse_crypt_arg.h b/lib/parse_crypt_arg.h new file mode 100644 index 0000000..61ed464 --- /dev/null +++ b/lib/parse_crypt_arg.h @@ -0,0 +1,28 @@ +/* Copyright (C) 2004 Thorsten Kukuk + Author: Thorsten Kukuk + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License version 2 as + published by the Free Software Foundation. + + 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ + +#ifndef __PARSE_CRYPT_ARG_H__ +#define __PARSE_CRYPT_ARG_H__ + +enum crypt_t {DES, MD5, BLOWFISH}; +typedef enum crypt_t crypt_t; + +extern crypt_t parse_crypt_arg (const char *arg); + +extern char *make_crypt_salt (const char *crypt_prefix, int crypt_rounds); + +#endif + diff --git a/lib/parse_grent.c b/lib/parse_grent.c new file mode 100644 index 0000000..4cf5ea2 --- /dev/null +++ b/lib/parse_grent.c @@ -0,0 +1,189 @@ +/* Copyright (C) 2004, 2011 Thorsten Kukuk + Author: Thorsten Kukuk + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License version 2 as + published by the Free Software Foundation. + + 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ + + +#ifdef HAVE_CONFIG_H +#include +#endif + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "read-files.h" + +#define ISCOLON(c) ((c) == ':') + +#define STRING_FIELD(variable, terminator_p, swallow) \ + { \ + variable = line; \ + while (*line != '\0' && !terminator_p (*line)) \ + ++line; \ + if (*line != '\0') \ + { \ + *line = '\0'; \ + do \ + ++line; \ + while (swallow && terminator_p (*line)); \ + } \ + else if (strict) \ + return 0; \ + } + +#define INT_FIELD(variable, terminator_p, swallow, base, convert) \ + { \ + char *endp; \ + variable = convert (strtoul (line, &endp, base)); \ + if (endp == line) \ + return 0; \ + else if (terminator_p (*endp)) \ + do \ + ++endp; \ + while (swallow && terminator_p (*endp)); \ + else if (*endp != '\0') \ + return 0; \ + line = endp; \ + } + +#define INT_FIELD_MAYBE_NULL(variable, terminator_p, swallow, base, convert, default) \ + { \ + char *endp; \ + if (*line == '\0') \ + /* We expect some more input, so don't allow the string to end here. */ \ + return 0; \ + variable = convert (strtoul (line, &endp, base)); \ + if (endp == line) \ + variable = default; \ + if (terminator_p (*endp)) \ + do \ + ++endp; \ + while (swallow && terminator_p (*endp)); \ + else if (*endp != '\0') \ + return 0; \ + line = endp; \ + } + +static char ** +parse_list (char *line, char *data, size_t datalen, int *errnop) +{ + void *eol; + char **list, **p; + + if (line >= data && line < data + datalen) + /* Find the end of the line buffer, we will use the space in DATA after + it for storing the vector of pointers. */ + eol = strchr (line, '\0') + 1; + else + /* LINE does not point within DATA->linebuffer, so that space is + not being used for scratch space right now. We can use all of + it for the pointer vector storage. */ + eol = data; + /* Adjust the pointer so it is aligned for storing pointers. */ + eol = (char *) eol + __alignof__ (char *) - 1; + eol = (char *) eol - ((char *) eol - (char *) 0) % __alignof__ (char *); + /* We will start the storage here for the vector of pointers. */ + list = (char **) eol; + + p = list; + while (1) + { + char *elt; + + if ((size_t) ((char *) &p[1] - (char *) data) > datalen) + { + /* We cannot fit another pointer in the buffer. */ + *errnop = ERANGE; + return NULL; + } + if (*line == '\0') + break; + + /* Skip leading white space. This might not be portable but useful. */ + while (isspace (*line)) + ++line; + + elt = line; + while (1) + { + if (*line == '\0' || *line == ',') + { + /* End of the next entry. */ + if (line > elt) + /* We really found some data. */ + *p++ = elt; + + /* Terminate string if necessary. */ + if (*line != '\0') + *line++ = '\0'; + break; + } + ++line; + } + } + *p = NULL; + + return list; +} + + +int +parse_grent (char *line, struct group *result, + char *buffer, size_t buflen, int *errnop, int strict) +{ + size_t linelen; + char *p = strpbrk (line, "\n"); + if (p != NULL) + *p = '\0'; + linelen = strlen (line); + if (linelen >= buflen) + { + *errnop = ERANGE; + return -1; + } + strcpy (buffer, line); + line = buffer; + STRING_FIELD (result->gr_name, ISCOLON, 0); + if (line[0] == '\0' && !strict + && (result->gr_name[0] == '+' || result->gr_name[0] == '-')) + { + result->gr_passwd = NULL; + result->gr_gid = 0; + } + else + { + STRING_FIELD (result->gr_passwd, ISCOLON, 0); + if (result->gr_name[0] == '+' || result->gr_name[0] == '-') + INT_FIELD_MAYBE_NULL (result->gr_gid, ISCOLON, 0, 10, , 0) + else + INT_FIELD (result->gr_gid, ISCOLON, 0, 10,) + } + { + char **list = parse_list (line, buffer + (linelen + 1), + buflen - (linelen + 1), errnop); + if (list) + result->gr_mem = list; + else + return -1; /* -1 indicates we ran out of space. */ + } + + return 1; +} diff --git a/lib/parse_pwent.c b/lib/parse_pwent.c new file mode 100644 index 0000000..543cb8d --- /dev/null +++ b/lib/parse_pwent.c @@ -0,0 +1,202 @@ +/* Copyright (C) 2004, 2011 Thorsten Kukuk + Author: Thorsten Kukuk + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License version 2 as + published by the Free Software Foundation. + + 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ + + +#ifdef HAVE_CONFIG_H +#include +#endif + +#include +#include +#include +#include +#include +#include +#include + +#include "read-files.h" + +#define ISCOLON(c) ((c) == ':') + +#define STRING_FIELD(variable, terminator_p, swallow) \ + { \ + variable = line; \ + while (*line != '\0' && !terminator_p (*line)) \ + ++line; \ + if (*line != '\0') \ + { \ + *line = '\0'; \ + do \ + ++line; \ + while (swallow && terminator_p (*line)); \ + } \ + else if (strict) \ + return 0; \ + } + +#define INT_FIELD(variable, terminator_p, swallow, base, convert) \ + { \ + char *endp; \ + variable = convert (strtoul (line, &endp, base)); \ + if (endp == line) \ + return 0; \ + else if (terminator_p (*endp)) \ + do \ + ++endp; \ + while (swallow && terminator_p (*endp)); \ + else if (*endp != '\0') \ + return 0; \ + line = endp; \ + } + +#define INT_FIELD_MAYBE_NULL(variable, terminator_p, swallow, base, convert, default) \ + { \ + char *endp; \ + if (*line == '\0') \ + /* We expect some more input, so don't allow the string to end here. */ \ + return 0; \ + variable = convert (strtoul (line, &endp, base)); \ + if (endp == line) \ + variable = default; \ + if (terminator_p (*endp)) \ + do \ + ++endp; \ + while (swallow && terminator_p (*endp)); \ + else if (*endp != '\0') \ + return 0; \ + line = endp; \ + } + +int +parse_pwent (char *line, struct passwd *result, int strict) +{ + char *p = strpbrk (line, "\n"); + if (p != NULL) + *p = '\0'; + STRING_FIELD (result->pw_name, ISCOLON, 0); + if (line[0] == '\0' && !strict + && (result->pw_name[0] == '+' || result->pw_name[0] == '-')) + { + /* This a special case. We allow lines containing only a `+' sign + since this is used for nss_compat. All other services will + reject this entry later. Initialize all other fields now. */ + result->pw_passwd = NULL; + result->pw_uid = 0; + result->pw_gid = 0; + result->pw_gecos = NULL; + result->pw_dir = NULL; + result->pw_shell = NULL; + } + else + { + STRING_FIELD (result->pw_passwd, ISCOLON, 0); + if (result->pw_name[0] == '+' || result->pw_name[0] == '-') + { + INT_FIELD_MAYBE_NULL (result->pw_uid, ISCOLON, 0, 10, , 0) + INT_FIELD_MAYBE_NULL (result->pw_gid, ISCOLON, 0, 10, , 0) + } + else + { + INT_FIELD (result->pw_uid, ISCOLON, 0, 10,) + INT_FIELD (result->pw_gid, ISCOLON, 0, 10,) + } + STRING_FIELD (result->pw_gecos, ISCOLON, 0); + STRING_FIELD (result->pw_dir, ISCOLON, 0); + result->pw_shell = line; + } + return 1; +} + + +/* Predicate which always returns false, needed below. */ +#undef FALSE +#define FALSE(arg) 0 + +int +parse_spent (char *line, struct spwd *result, int strict) +{ + char *p = strpbrk (line, "\n"); + if (p != NULL) + *p = '\0'; + + result->sp_namp = line; + while (*line != '\0' && !ISCOLON (*line)) + ++line; + if (*line != '\0') + { + *line = '\0'; + ++line; + } + + if (line[0] == '\0' + && (result->sp_namp[0] == '+' || result->sp_namp[0] == '-')) + { + result->sp_pwdp = NULL; + result->sp_lstchg = 0; + result->sp_min = 0; + result->sp_max = 0; + result->sp_warn = -1l; + result->sp_inact = -1l; + result->sp_expire = -1l; + result->sp_flag = ~0ul; + } + else + { + result->sp_pwdp = line; + while (*line != '\0' && !ISCOLON (*line)) + ++line; + if (*line != '\0') + { + *line = '\0'; + ++line; + } + else if (strict) + return 0; + INT_FIELD_MAYBE_NULL (result->sp_lstchg, ISCOLON, 0, 10, (long int), + (long int) -1); + INT_FIELD_MAYBE_NULL (result->sp_min, ISCOLON, 0, 10, (long int), + (long int) -1); + INT_FIELD_MAYBE_NULL (result->sp_max, ISCOLON, 0, 10, (long int), + (long int) -1); + while (isspace (*line)) + ++line; + if (*line == '\0') + { + /* The old form. */ + result->sp_warn = -1l; + result->sp_inact = -1l; + result->sp_expire = -1l; + result->sp_flag = ~0ul; + if (strict) + return 0; + } + else + { + INT_FIELD_MAYBE_NULL (result->sp_warn, ISCOLON, 0, 10, (long int), + (long int) -1); + INT_FIELD_MAYBE_NULL (result->sp_inact, ISCOLON, 0, 10, (long int), + (long int) -1); + INT_FIELD_MAYBE_NULL (result->sp_expire, ISCOLON, 0, 10, (long int), + (long int) -1); + if (*line != '\0') + INT_FIELD_MAYBE_NULL (result->sp_flag, FALSE, 0, 10, + (unsigned long int), ~0ul) + else + result->sp_flag = ~0ul; + } + } + return 1; +} diff --git a/lib/passwd_nisplus.c b/lib/passwd_nisplus.c new file mode 100644 index 0000000..096b438 --- /dev/null +++ b/lib/passwd_nisplus.c @@ -0,0 +1,617 @@ +/* Copyright (C) 2002, 2005 Thorsten Kukuk + Author: Thorsten Kukuk + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License version 2 as + published by the Free Software Foundation. + + 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ + + +#ifdef HAVE_CONFIG_H +#include +#endif + +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include + +#include "i18n.h" +#include "public.h" +#include "nispasswd.h" + +/* This is in glibc, but not in the headers */ +extern int key_get_conv (char *pkey, des_block *deskey); + +static bool_t +__pam_xdr_nispasswd_status (XDR *xdrs, nispasswd_status *objp) +{ + if (!xdr_enum(xdrs, (enum_t *)objp)) + return (FALSE); + return (TRUE); +} + +static bool_t +__pam_xdr_nispasswd_code (XDR *xdrs, nispasswd_code *objp) +{ + if (!xdr_enum(xdrs, (enum_t *)objp)) { + return (FALSE); + } + return (TRUE); +} + +static bool_t +__pam_xdr_nispasswd_field (XDR *xdrs, nispasswd_field *objp) +{ + if (!xdr_enum(xdrs, (enum_t *)objp)) { + return (FALSE); + } + return (TRUE); +} + +static bool_t +__pam_xdr_nispasswd_error (XDR *xdrs, nispasswd_error *objp) +{ + if (!__pam_xdr_nispasswd_field(xdrs, &objp->npd_field)) { + return (FALSE); + } + if (!__pam_xdr_nispasswd_code(xdrs, &objp->npd_code)) { + return (FALSE); + } + if (!xdr_pointer(xdrs, (char **)&objp->next, sizeof(nispasswd_error), + (xdrproc_t)__pam_xdr_nispasswd_error)) { + return (FALSE); + } + return (TRUE); +} + +static bool_t +__pam_xdr_passwd_info (XDR *xdrs, passwd_info *objp) +{ + if (!xdr_string(xdrs, &objp->pw_gecos, ~0)) { + return (FALSE); + } + if (!xdr_string(xdrs, &objp->pw_shell, ~0)) { + return (FALSE); + } + return (TRUE); +} + +static bool_t +__pam_xdr_npd_request(XDR *xdrs, npd_request *objp) +{ + if (!xdr_string(xdrs, &objp->username, ~0)) { + return (FALSE); + } + if (!xdr_string(xdrs, &objp->domain, ~0)) { + return (FALSE); + } + if (!xdr_string(xdrs, &objp->key_type, ~0)) { + return (FALSE); + } + if (!xdr_array(xdrs, (char **)&objp->user_pub_key.user_pub_key_val, + (u_int *)&objp->user_pub_key.user_pub_key_len, ~0, + sizeof(u_char), (xdrproc_t)xdr_u_char)) + return (FALSE); + + if (!xdr_array(xdrs, (char **)&objp->npd_authpass.npd_authpass_val, + (u_int *)&objp->npd_authpass.npd_authpass_len, ~0, + sizeof(u_char), (xdrproc_t)xdr_u_char)) + return (FALSE); + + if (!xdr_u_int (xdrs, &objp->ident)) + return (FALSE); + + return (TRUE); +} + + +static bool_t +__pam_xdr_passbuf (XDR *xdrs, passbuf objp) +{ + if (!xdr_opaque(xdrs, objp, __NPD_MAXPASSBYTES)) { + return (FALSE); + } + return (TRUE); +} + +static bool_t +__pam_xdr_npd_newpass (XDR *xdrs, npd_newpass *objp) +{ + if (!xdr_u_int(xdrs, &objp->npd_xrandval)) { + return (FALSE); + } + if (!__pam_xdr_passbuf(xdrs, objp->pass)) { + return (FALSE); + } + return (TRUE); +} + +static bool_t +__pam_xdr_npd_update (XDR *xdrs, npd_update *objp) +{ + if (!xdr_u_int(xdrs, &objp->ident)) { + return (FALSE); + } + if (!__pam_xdr_npd_newpass(xdrs, &objp->xnewpass)) { + return (FALSE); + } + if (!__pam_xdr_passwd_info(xdrs, &objp->pass_info)) { + return (FALSE); + } + return (TRUE); +} + +static bool_t +__pam_xdr_nispasswd_verf (XDR *xdrs, nispasswd_verf *objp) +{ + if (!xdr_u_int (xdrs, &objp->npd_xid)) { + return (FALSE); + } + if (!xdr_u_int (xdrs, &objp->npd_xrandval)) { + return (FALSE); + } + return (TRUE); +} + +static bool_t +__pam_xdr_nispasswd_authresult (XDR *xdrs, nispasswd_authresult *objp) +{ + if (!__pam_xdr_nispasswd_status(xdrs, &objp->status)) { + return (FALSE); + } + switch (objp->status) { + case NPD_SUCCESS: + case NPD_TRYAGAIN: + if (!__pam_xdr_nispasswd_verf(xdrs, + &objp->nispasswd_authresult_u.npd_verf)) + return FALSE; + break; + default: + if (!__pam_xdr_nispasswd_code(xdrs, + &objp->nispasswd_authresult_u.npd_err)) + return (FALSE); + break; + } + return (TRUE); +} + +static bool_t +__pam_xdr_nispasswd_updresult (XDR *xdrs, nispasswd_updresult *objp) +{ + if (!__pam_xdr_nispasswd_status (xdrs, &objp->status)) + return (FALSE); + switch (objp->status) + { + case NPD_PARTIALSUCCESS: + if (!__pam_xdr_nispasswd_error (xdrs, + &objp->nispasswd_updresult_u.reason)) + return (FALSE); + break; + case NPD_FAILED: + if (!__pam_xdr_nispasswd_code (xdrs, + &objp->nispasswd_updresult_u.npd_err)) + return (FALSE); + break; + default: + break; + } + return (TRUE); +} + +static const char * +npderr2str (nispasswd_code error) +{ + switch (error) + { + case NPD_NOTMASTER: + return "Server is not master of this domain"; + case NPD_NOSUCHENTRY: + return "No passwd entry exists for this user"; + case NPD_IDENTINVALID: + return "Identifier invalid"; + case NPD_NOPASSWD: + return "No password stored"; + case NPD_NOSHDWINFO: + return "No shadow information stored"; + case NPD_SHDWCORRUPT: + return "Shadow information corrupted"; + case NPD_NOTAGED: + return "Passwd has not aged sufficiently"; + case NPD_CKGENFAILED: + return "Common key could not be generated"; + case NPD_VERFINVALID: + return "Verifier mismatch"; + case NPD_PASSINVALID: + return "All auth attempts incorrect"; + case NPD_ENCRYPTFAIL: + return "Encryption failed"; + case NPD_DECRYPTFAIL: + return "Decryption failed"; + case NPD_KEYSUPDATED: + return "New key-pair generated for user"; + case NPD_KEYNOTREENC: + return "Could not reencrypt secret key"; + case NPD_PERMDENIED: + return "Permission denied"; + case NPD_SRVNOTRESP: + return "Server not responding"; + case NPD_NISERROR: + return "NIS+ server error"; + case NPD_SYSTEMERR: + return "System error"; + case NPD_BUFTOOSMALL: + return "Buffer too small"; + case NPD_INVALIDARGS: + return "Invalid args to function"; + default: + return "Unknown error!"; + } +} + + +#define NISENTRYVAL(col,obj) \ + ((obj)->EN_data.en_cols.en_cols_val[(col)].ec_value.ec_value_val) +#define NISENTRYLEN(col,obj) \ + ((obj)->EN_data.en_cols.en_cols_val[(col)].ec_value.ec_value_len) +#define NISENTRYFLAG(col,res) \ + ((obj)->EN_data.en_cols.en_cols_val[(col)].ec_flags) + +static int +update_npd (nis_object *obj, user_t *data) +{ + nis_server **server; + CLIENT *clnt; + struct timeval timeout; + char oldpwd[17]; + npd_request request; + npd_update update; + nispasswd_authresult result; + nispasswd_updresult updresult; + char pkey_host[HEXKEYBYTES + 1]; + char pkey_user[HEXKEYBYTES + 1]; + char skey_data[HEXKEYBYTES + 1]; + char usernetname[MAXNETNAMELEN + 1], servernetname[MAXNETNAMELEN + 1]; + des_block CK; + const char *masterhost; + des_block cryptbuf; + char ivec[8]; + u_int32_t *ixdr; + int error; + char *cp; + + /* build netname for user or if caller == root, host */ + if (getuid () == 0 && strncmp (NISENTRYVAL(0,obj), "root", + NISENTRYLEN(0,obj)) == 0) + { + char hostname[MAXHOSTNAMELEN + 1]; + + if (gethostname (hostname, MAXHOSTNAMELEN) != 0) + { + fprintf (stderr, _("Could not determine hostname!\n")); + return -1; + } + host2netname (usernetname, hostname, NULL); + } + else + user2netname (usernetname, getuid (), NULL); + + /* get old password for decrypting secret key and further use. */ + memset (oldpwd, '\0', sizeof (oldpwd)); + strncpy (oldpwd, data->oldclearpwd, sizeof (oldpwd) -1); + if (!getsecretkey (usernetname, skey_data, oldpwd)) + { + if (!getsecretkey (usernetname, skey_data, + getpass ("Enter RPC secure password: "))) + { + fprintf (stderr, _("Can't find %s's secret key\n"), usernetname); + return -1; + } + } + + /* fill in request struct */ + memset (&request, '\0', sizeof (request)); + request.ident = 0; + request.key_type = strdup ("DES"); + request.domain = strdup (nis_domain_of (obj->zo_domain)); + request.username = strndup (NISENTRYVAL(0,obj), NISENTRYLEN(0,obj)); + + /* get publickey of the user */ + memset (pkey_user, '\0', sizeof (pkey_user)); + if (getpublickey (usernetname, pkey_user) == 0 || pkey_user[0] == '\0') + { + fprintf (stderr, _("Could not get public key for %s!\n"), usernetname); + return -1; + } + request.user_pub_key.user_pub_key_len = HEXKEYBYTES; + request.user_pub_key.user_pub_key_val = (unsigned char *) pkey_user; + /* get publickey of the server running rpc.nispasswdd. For that, + we have to find the name of the master server for the user domain. */ + server = nis_getservlist (request.domain); + if (server[0] == NULL) + { + fprintf (stderr, _("Could not determine the NIS+ root server!\n")); + return -1; + } + masterhost = strdup (server[0]->name); + cp = strchr (masterhost, '.'); + *cp = '\0'; + nis_freeservlist (server); + host2netname (servernetname, masterhost, NULL); + memset (pkey_host, '\0', sizeof (pkey_host)); + if (getpublickey (servernetname, pkey_host) == 0 || pkey_host[0] == '\0') + { + fprintf (stderr, _("Could not get public key for %s!\n"), servernetname); + return -1; + } + + /* Generate common DES key from public server key and secret user key */ + if (key_get_conv (pkey_host, &CK) != 0) + { + fprintf (stderr, _("Could not create conversion key!\n")); + return -1; + } + + /* encrypt old clear password. Don't know why Sun needs 16 byte, + normaly a password could only be 8 byte. And later in the protocol + SUN allows only 12 byte. */ + memset (ivec, 0, 8); + error = cbc_crypt ((char *) &CK, oldpwd, + 16, DES_ENCRYPT | DES_HW, ivec); + if (DES_FAILED (error)) + { + fprintf (stderr, _("DES encryption failure\n")); + return -1; + } + request.npd_authpass.npd_authpass_len = 16; + request.npd_authpass.npd_authpass_val = (unsigned char *) oldpwd; + + /* Try to authenticate us and the server. + XXX This should be done in a loop, + since the server could be bussy or the password wrong */ + clnt = clnt_create (masterhost, NISPASSWD_PROG, NISPASSWD_VERS, "tcp"); + if (clnt == NULL) + { + fprintf (stderr, _("rpc.nispasswd not running on %s?\n"), masterhost); + return -1; + } + memset ((char *) &result, 0, sizeof (result)); + timeout.tv_sec = 25; + timeout.tv_usec = 0; + error = clnt_call (clnt, NISPASSWD_AUTHENTICATE, + (xdrproc_t) __pam_xdr_npd_request, (caddr_t) &request, + (xdrproc_t) __pam_xdr_nispasswd_authresult, + (caddr_t) &result, timeout); + + if (error) + { + clnt_perrno (error); + fputs ("\n", stderr); + return -1; + } + + if (result.status != NPD_SUCCESS) + { + if (result.status == NPD_TRYAGAIN) + fprintf (stderr, _("ERROR: password incorrect, try again\n")); + else + fprintf (stderr, _("ERROR: %s\n password not changed\n"), + npderr2str (result.nispasswd_authresult_u.npd_err)); + return -1; + } + + /* Decrypt the ID and the random value. Not easy, since Sparc's are + big endian, i?86 little endian, we have to revert to big endian + for decrypt */ + memset (&cryptbuf, '\0', sizeof (cryptbuf)); + ixdr = &cryptbuf.key.high; + IXDR_PUT_U_INT32 (ixdr, result.nispasswd_authresult_u.npd_verf.npd_xid); + IXDR_PUT_U_INT32 (ixdr, result.nispasswd_authresult_u.npd_verf.npd_xrandval); + error = ecb_crypt ((char *) &CK, (char *) &cryptbuf, 8, + DES_DECRYPT | DES_HW); + if (DES_FAILED (error)) + { + fprintf (stderr, _("DES decryption failure!\n")); + return -1; + } + + /* fill out update request */ + memset (&update, 0, sizeof (update)); + update.ident = ntohl (cryptbuf.key.high); + update.xnewpass.npd_xrandval = cryptbuf.key.low; + memset (update.xnewpass.pass, '\0', __NPD_MAXPASSBYTES); + strncpy (update.xnewpass.pass, data->oldclearpwd, + __NPD_MAXPASSBYTES); + + if (data->new_gecos) + update.pass_info.pw_gecos = strdup (data->new_gecos); + else + update.pass_info.pw_gecos = ""; + + if (data->new_shell) + update.pass_info.pw_shell = strdup (data->new_shell); + else + update.pass_info.pw_shell = ""; + + memset (ivec, 0, 8); + error = cbc_crypt ((char *) &CK, (char *) &update.xnewpass, + 16, DES_ENCRYPT | DES_HW, ivec); + if (DES_FAILED (error)) + { + fprintf (stderr, _("DES decryption failure!\n")); + return -1; + } + + /* update.xnewpass.npd_xrandval will be changed in XDR again */ + update.xnewpass.npd_xrandval = ntohl (update.xnewpass.npd_xrandval); + + memset ((char *) &updresult, 0, sizeof (updresult)); + timeout.tv_sec = 25; + timeout.tv_usec = 0; + error = clnt_call (clnt, NISPASSWD_UPDATE, (xdrproc_t) __pam_xdr_npd_update, + (caddr_t) &update, + (xdrproc_t) __pam_xdr_nispasswd_updresult, + (caddr_t) &updresult, timeout); + if (error) + { + clnt_perrno (error); + fprintf (stderr, "\n"); + return -1; + } + clnt_destroy (clnt); + if (updresult.status != NPD_SUCCESS) + { + if (updresult.status == NPD_FAILED) + { + fprintf (stderr, _("ERROR: %s\n password not changed\n"), + npderr2str (updresult.nispasswd_updresult_u.npd_err)); + } + else if (updresult.status == NPD_PARTIALSUCCESS) + { + nispasswd_error *err; + fputs ("ERROR: Only partial success\n", stderr); + err = &updresult.nispasswd_updresult_u.reason; + while (err != NULL) + { + switch (err->npd_field) + { + case NPD_PASSWD: + fprintf (stderr, "\tpassword field: %s\n", + npderr2str (err->npd_code)); + break; + case NPD_GECOS: + fprintf (stderr, "\tgecos field: %s\n", + npderr2str (err->npd_code)); + case NPD_SHELL: + fprintf (stderr, "\tshell field: %s\n", + npderr2str (err->npd_code)); + break; + case NPD_SECRETKEY: + fprintf (stderr, "\tsecret key: %s\n", + npderr2str (err->npd_code)); + break; + } + err = err->next; + } + } + else + { + fprintf (stderr, _("ERROR: Unknown error, don't know what happened\n")); + } + return -1; + } + + fprintf (stderr, _("NIS+ password information changed for %s\n"), + request.username); + fprintf (stderr, _("NIS+ credential information changed for %s\n"), + request.username); + + nis_free_object (obj); + return 0; +} + + +/* Update password in NIS+ passwd table, do not use rpc.nispasswdd */ +static int +update_nisd (nis_object *obj, user_t *data) +{ + char buf[strlen (obj->zo_name) + strlen (obj->zo_domain) + 10]; + nis_result *result; + + if (data->new_gecos) + { + free (NISENTRYVAL(4,obj)); + NISENTRYVAL(4,obj) = strdup (data->new_gecos); + NISENTRYFLAG(4,obj) = NISENTRYFLAG(4,obj) | EN_MODIFIED; + NISENTRYLEN(4,obj) = strlen (NISENTRYVAL(4,obj)); + } + + if (data->new_shell) + { + free (NISENTRYVAL(6,obj)); + + NISENTRYVAL(6,obj) = strdup (data->new_shell); + NISENTRYFLAG(6,obj) = NISENTRYFLAG(6,obj) | EN_MODIFIED; + NISENTRYLEN(6,obj) = strlen (NISENTRYVAL(6,obj)); + } + + sprintf (buf, "%s.%s", obj->zo_name, obj->zo_domain); + result = nis_modify_entry (buf, obj, 0); + if (result->status != NIS_SUCCESS) + { + fprintf (stderr, "nispasswd: Password information update failed\n"); + fprintf (stderr, " %s\n", nis_sperrno (result->status)); + nis_freeresult (result); + return 1; + } + else + nis_freeresult (result); + + nis_free_object (obj); + return 0; +} + +int +npd_upd_pwd (const char *domainname, user_t *data) +{ + nis_result *result; + nis_object *obj; + char domain[NIS_MAXNAMELEN + 1]; + char *buf = NULL; + char *group; + + if (strlen (domainname) == 0) + strncpy (domain, nis_local_directory (), NIS_MAXNAMELEN); + else + strncpy (domain, domainname, NIS_MAXNAMELEN); + domain[NIS_MAXNAMELEN] = '\0'; + + /* Get group of passwd table */ + buf = alloca (strlen (data->pw.pw_name) + strlen (domain) + 30); + sprintf (buf, "passwd.org_dir.%s", domain); + result = nis_lookup (buf, 0); + if (result->status != NIS_SUCCESS) + { + fprintf (stderr, _("NIS+ passwd table not found: %s\n"), + nis_sperrno (result->status)); + return -1; + } + + group = alloca (strlen (NIS_RES_OBJECT(result)->zo_group) + 1); + strcpy (group, NIS_RES_OBJECT(result)->zo_group); + nis_freeresult (result); + + /* Get old NIS+ passwd information for caller or parameter. */ + sprintf (buf, "[name=%s],passwd.org_dir.%s", data->pw.pw_name, domain); + + result = nis_list (buf, 0, NULL, NULL); + + if (result->status != NIS_SUCCESS) + { + fprintf (stderr, _("User not found in NIS+ table.\n")); + return -1; + } + + obj = nis_clone_object (result->objects.objects_val, NULL); + nis_freeresult (result); + + if (nis_ismember (nis_local_principal (), group)) + return update_nisd (obj, data); + else + return update_npd (obj, data); +} diff --git a/lib/print_error.c b/lib/print_error.c new file mode 100644 index 0000000..9553f1d --- /dev/null +++ b/lib/print_error.c @@ -0,0 +1,32 @@ +/* Copyright (C) 2003, 2005 Thorsten Kukuk + Author: Thorsten Kukuk + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License version 2 as + published by the Free Software Foundation. + + 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include + +#include "i18n.h" +#include "public.h" + +void +print_error (const char *program) +{ + fprintf (stderr, + _("Try `%s --help' or `%s --usage' for more information.\n"), + program, program); +} diff --git a/lib/print_version.c b/lib/print_version.c new file mode 100644 index 0000000..1df83af --- /dev/null +++ b/lib/print_version.c @@ -0,0 +1,37 @@ +/* Copyright (C) 2003, 2005 Thorsten Kukuk + Author: Thorsten Kukuk + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License version 2 as + published by the Free Software Foundation. + + 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include + +#include "i18n.h" +#include "public.h" + +/* Print the version information. */ +void +print_version (const char *program, const char *years) +{ + fprintf (stdout, "%s (%s) %s\n", program, PACKAGE, VERSION); + fprintf (stdout, _("\ +Copyright (C) %s Thorsten Kukuk.\n\ +This is free software; see the source for copying conditions. There is NO\n\ +warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n\ +"), years); + /* fprintf (stdout, _("Written by %s.\n"), "Thorsten Kukuk"); */ +} diff --git a/lib/public.h b/lib/public.h new file mode 100644 index 0000000..36ae73a --- /dev/null +++ b/lib/public.h @@ -0,0 +1,125 @@ +/* Copyright (C) 2002, 2003, 2004, 2005 Thorsten Kukuk + Author: Thorsten Kukuk + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License version 2 as + published by the Free Software Foundation. + + 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ + +#ifndef __PUBLIC_H__ +#define __PUBLIC_H__ + +#include +#include +#include +#include +#include + +#ifdef WITH_SELINUX +#include +#endif + +#ifndef __attribute_warn_unused_result__ +#define __attribute_warn_unused_result__ +#endif + +#define DAY (24L*3600L) +#define SCALE DAY + +enum service_t {S_NONE, S_LOCAL, S_YP, S_NISPLUS, S_LDAP}; +typedef enum service_t service_t; + +enum todo_t {DO_MODIFY, DO_CREATE, DO_DELETE, DO_CREATE_SHADOW, + DO_DELETE_SHADOW}; +typedef enum todo_t todo_t; + +struct user_t { + todo_t todo; + char *pwdbuffer; + size_t pwdbuflen; + struct passwd pw; + char *spwbuffer; + size_t spwbuflen; + struct spwd sp; + int use_shadow; + enum service_t service; + char *new_name; + char *newpassword; + char *oldclearpwd; + int have_new_uid; + uid_t new_uid; + int have_new_gid; + gid_t new_gid; + char *new_shell; + char *new_gecos; + char *new_home; + int sp_changed; + struct spwd spn; + char *binddn; +}; +typedef struct user_t user_t; + +struct faillog +{ + short fail_cnt; + short fail_max; + char fail_line[12]; + time_t fail_time; + long fail_locktime; +}; +typedef struct faillog faillog; + +extern void init_environment (void); +extern void print_error (const char *program); +extern void print_version (const char *program, const char *years); + +extern char *date2str (time_t date); +extern long int str2date (const char *str); + +extern int strtoid (const char *arg, uint32_t *idptr) __attribute_warn_unused_result__; + +extern int check_name (const char *name) __attribute_warn_unused_result__; +extern int check_home (const char *home) __attribute_warn_unused_result__; + +extern int npd_upd_pwd (const char *domainname, user_t *data) __attribute_warn_unused_result__; +extern char *get_value (const char *oldf, const char *prompt) __attribute_warn_unused_result__; +extern char *getnismaster (void) __attribute_warn_unused_result__; +extern void free_user_t (user_t *data); +extern user_t *do_getpwnam (const char *user, const char *use_service) __attribute_warn_unused_result__; +extern int lock_database (void) __attribute_warn_unused_result__; +extern int write_user_data (user_t *data, int is_locked) __attribute_warn_unused_result__; +extern const char *nsw2str (service_t service); +extern int do_authentication (const char *prog, const char *caller, + user_t *pw_data) __attribute_warn_unused_result__; +extern int get_old_clear_password (user_t *pw_data); +extern int call_script (const char *variable, const char *name, uid_t uid, + gid_t gid, const char *home, const char *program) __attribute_warn_unused_result__; +extern int copy_dir_rec (const char *src, const char *dst, + int preserve_id, uid_t uid, gid_t gid) __attribute_warn_unused_result__; +extern int remove_dir_rec (const char *tree); +extern int chown_dir_rec (const char *src, uid_t old_uid, uid_t new_uid, + gid_t old_gid, gid_t new_gid) __attribute_warn_unused_result__; +extern int is_logged_in (const char *user) __attribute_warn_unused_result__; + +extern int copy_xattr (const char *from, const char *to) __attribute_warn_unused_result__; + +extern char **remove_gr_mem (const char *name, char **gr_mem); + + +#ifdef WITH_SELINUX +extern int selinux_check_access (const char *__chuser, + unsigned int __selaccess) __attribute_warn_unused_result__; +extern int set_default_context (const char *filename, + char **prev_context) __attribute_warn_unused_result__; +extern int restore_default_context (char *prev_context) __attribute_warn_unused_result__; +#endif + +#endif /* __PUBLIC_H__ */ diff --git a/lib/read-files-group.c b/lib/read-files-group.c new file mode 100644 index 0000000..9f686fa --- /dev/null +++ b/lib/read-files-group.c @@ -0,0 +1,253 @@ +/* Copyright (C) 2002, 2003 Thorsten Kukuk + Author: Thorsten Kukuk + + This code based havy on the NSS files module of glibc 2.3.2. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License version 2 as + published by the Free Software Foundation. + + 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ + + +#ifdef HAVE_CONFIG_H +#include +#endif + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#define __libc_lock_t pthread_mutex_t + +#include "read-files.h" + +static enum { none, getent, getby }last_use; + +/* XXX merge with read-files.c */ +static enum nss_status +internal_setent (FILE **stream, const char *file) +{ + enum nss_status status = NSS_STATUS_SUCCESS; + + if (*stream == NULL) + { + char *filename = alloca (strlen (files_etc_dir) + strlen (file) + 1); + strcpy (filename, files_etc_dir); + strcat (filename, file); + + *stream = fopen (filename, "r"); + + if (*stream == NULL) + status = errno == EAGAIN ? NSS_STATUS_TRYAGAIN : NSS_STATUS_UNAVAIL; + else + { + int result, flags; + + result = flags = fcntl (fileno (*stream), F_GETFD, 0); + if (result >= 0) + { + flags |= 1; + result = fcntl (fileno (*stream), F_SETFD, flags); + } + + if (result < 0) + { + fclose (*stream); + stream = NULL; + status = NSS_STATUS_UNAVAIL; + } + } + } + else + rewind (*stream); + + return status; +} + +/* XXX merge with read-files.c */ +static void +internal_endent (FILE **stream) +{ + if (*stream != NULL) + { + fclose (*stream); + stream = NULL; + } +} + +static enum nss_status +internal_getgrent (FILE *stream, struct group *result, + char *buffer, size_t buflen, int *errnop) +{ + char *p; + char *data = (void *) buffer; + int linebuflen = buffer + buflen - data; + int parse_result; + + if (buflen < sizeof *data + 2) + { + *errnop = ERANGE; + return NSS_STATUS_TRYAGAIN; + } + + do { + ((unsigned char *) data)[linebuflen - 1] = '\xff'; + + p = fgets (data, linebuflen, stream); + if (p == NULL) + { + *errnop = ENOENT; + return NSS_STATUS_NOTFOUND; + } + else if (((unsigned char *) data)[linebuflen - 1] != 0xff) + { + *errnop = ERANGE; + return NSS_STATUS_TRYAGAIN; + } + + /* Skip leading blanks. */ + while (isspace (*p)) + ++p; + } + while (*p == '\0' || *p == '#' + || !(parse_result = parse_grent (p, result, buffer, + buflen, errnop, 0))); + + + return parse_result == -1 ? NSS_STATUS_TRYAGAIN : NSS_STATUS_SUCCESS; +} + +enum nss_status +files_getgrnam_r (const char *name, struct group *result, + char *buffer, size_t buflen, int *errnop) +{ + /* Locks the static variables in this file. */ + __libc_lock_define_initialized (static, lock) + enum nss_status status; + FILE *stream = NULL; + + __libc_lock_lock (lock); + + status = internal_setent (&stream, "/group"); + if (status == NSS_STATUS_SUCCESS) + { + last_use = getby; + while ((status = internal_getgrent (stream, result, buffer, buflen, + errnop)) == NSS_STATUS_SUCCESS) + { + if (name[0] != '+' && name[0] != '-' + && ! strcmp (name, result->gr_name)) + break; + } + internal_endent (&stream); + } + + __libc_lock_unlock (lock); + + return status; +} + +enum nss_status +files_getgrgid_r (gid_t gid, struct group *result, char *buffer, + size_t buflen, int *errnop) +{ + /* Locks the static variables in this file. */ + __libc_lock_define_initialized (static, lock) + enum nss_status status; + FILE *stream = NULL; + + __libc_lock_lock (lock); + + status = internal_setent (&stream, "/group"); + if (status == NSS_STATUS_SUCCESS) + { + last_use = getby; + while ((status = internal_getgrent (stream, result, buffer, buflen, + errnop)) == NSS_STATUS_SUCCESS) + { + if (gid == result->gr_gid && result->gr_name[0] != '+' && + result->gr_name[0] != '-') + break; + } + internal_endent (&stream); + } + + __libc_lock_unlock (lock); + + return status; +} + +__libc_lock_define_initialized (static, lock); +static FILE *stream; +static fpos_t position; + +/* Return the next entry from the database file, doing locking. */ +enum nss_status +files_getgrent_r (struct group *result, char *buffer, + size_t buflen, int *errnop) +{ + /* Return next entry in host file. */ + enum nss_status status = NSS_STATUS_SUCCESS; + + __libc_lock_lock (lock); + + /* Be prepared that the set*ent function was not called before. */ + if (stream == NULL) + { + status = internal_setent (&stream, "/group"); + + if (status == NSS_STATUS_SUCCESS && fgetpos (stream, &position) < 0) + { + fclose (stream); + stream = NULL; + status = NSS_STATUS_UNAVAIL; + } + } + + if (status == NSS_STATUS_SUCCESS) + { + /* If the last use was not by the getent function we need the + position the stream. */ + if (last_use != getent) + { + if (fsetpos (stream, &position) < 0) + status = NSS_STATUS_UNAVAIL; + else + last_use = getent; + } + + if (status == NSS_STATUS_SUCCESS) + { + status = internal_getgrent (stream, result, buffer, buflen, errnop); + + /* Remember this position if we were successful. If the + operation failed we give the user a chance to repeat the + operation (perhaps the buffer was too small). */ + if (status == NSS_STATUS_SUCCESS) + fgetpos (stream, &position); + else + /* We must make sure we reposition the stream the next call. */ + last_use = none; + } + } + + __libc_lock_unlock (lock); + + return status; +} diff --git a/lib/read-files.c b/lib/read-files.c new file mode 100644 index 0000000..7eec401 --- /dev/null +++ b/lib/read-files.c @@ -0,0 +1,380 @@ +/* Copyright (C) 2002, 2003, 2004 Thorsten Kukuk + Author: Thorsten Kukuk + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License version 2 as + published by the Free Software Foundation. + + 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ + + +#ifdef HAVE_CONFIG_H +#include +#endif + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#define __libc_lock_t pthread_mutex_t + +#include "read-files.h" + +static enum { none, getent, getby }last_use; + +static enum nss_status +internal_setent (FILE **stream, const char *file) +{ + enum nss_status status = NSS_STATUS_SUCCESS; + + if (*stream == NULL) + { + char *filename = alloca (strlen (files_etc_dir) + strlen (file) + 1); + strcpy (filename, files_etc_dir); + strcat (filename, file); + + *stream = fopen (filename, "r"); + + if (*stream == NULL) + status = errno == EAGAIN ? NSS_STATUS_TRYAGAIN : NSS_STATUS_UNAVAIL; + else + { + int result, flags; + + result = flags = fcntl (fileno (*stream), F_GETFD, 0); + if (result >= 0) + { + flags |= 1; + result = fcntl (fileno (*stream), F_SETFD, flags); + } + + if (result < 0) + { + fclose (*stream); + stream = NULL; + status = NSS_STATUS_UNAVAIL; + } + } + } + else + rewind (*stream); + + return status; +} + +static void +internal_endent (FILE **stream) +{ + if (*stream != NULL) + { + fclose (*stream); + stream = NULL; + } +} + +static enum nss_status +internal_getspent (FILE *stream, struct spwd *result, + char *buffer, size_t buflen, int *errnop) +{ + char *p; + char *data = (void *) buffer; + int linebuflen = buffer + buflen - data; + int parse_result; + + if (buflen < sizeof *data + 2) + { + *errnop = ERANGE; + return NSS_STATUS_TRYAGAIN; + } + + do { + ((unsigned char *) data)[linebuflen - 1] = '\xff'; + + p = fgets (data, linebuflen, stream); + if (p == NULL) + { + *errnop = ENOENT; + return NSS_STATUS_NOTFOUND; + } + else if (((unsigned char *) data)[linebuflen - 1] != 0xff) + { + *errnop = ERANGE; + return NSS_STATUS_TRYAGAIN; + } + + /* Skip leading blanks. */ + while (isspace (*p)) + ++p; + } + while (*p == '\0' || *p == '#' + || !(parse_result = parse_spent (p, result, 0))); + + + return parse_result == -1 ? NSS_STATUS_TRYAGAIN : NSS_STATUS_SUCCESS; +} + +static enum nss_status +internal_getpwent (FILE *stream, struct passwd *result, + char *buffer, size_t buflen, int *errnop) +{ + char *p; + char *data = (void *) buffer; + int linebuflen = buffer + buflen - data; + int parse_result; + + if (buflen < sizeof *data + 2) + { + *errnop = ERANGE; + return NSS_STATUS_TRYAGAIN; + } + + do { + ((unsigned char *) data)[linebuflen - 1] = '\xff'; + + p = fgets (data, linebuflen, stream); + if (p == NULL) + { + *errnop = ENOENT; + return NSS_STATUS_NOTFOUND; + } + else if (((unsigned char *) data)[linebuflen - 1] != 0xff) + { + *errnop = ERANGE; + return NSS_STATUS_TRYAGAIN; + } + + /* Skip leading blanks. */ + while (isspace (*p)) + ++p; + } + while (*p == '\0' || *p == '#' + || !(parse_result = parse_pwent (p, result, 0))); + + + return parse_result == -1 ? NSS_STATUS_TRYAGAIN : NSS_STATUS_SUCCESS; +} + +enum nss_status +files_getspnam_r (const char *name, struct spwd *result, + char *buffer, size_t buflen, int *errnop) +{ + /* Locks the static variables in this file. */ + __libc_lock_define_initialized (static, lock) + enum nss_status status; + FILE *stream = NULL; + + __libc_lock_lock (lock); + + status = internal_setent (&stream, "/shadow"); + if (status == NSS_STATUS_SUCCESS) + { + last_use = getby; + while ((status = internal_getspent (stream, result, buffer, buflen, + errnop)) == NSS_STATUS_SUCCESS) + { + if (name[0] != '+' && name[0] != '-' + && ! strcmp (name, result->sp_namp)) + break; + } + internal_endent (&stream); + } + + __libc_lock_unlock (lock); + + return status; +} + +enum nss_status +files_getpwnam_r (const char *name, struct passwd *result, + char *buffer, size_t buflen, int *errnop) +{ + /* Locks the static variables in this file. */ + __libc_lock_define_initialized (static, lock) + enum nss_status status; + FILE *stream = NULL; + + __libc_lock_lock (lock); + + status = internal_setent (&stream, "/passwd"); + if (status == NSS_STATUS_SUCCESS) + { + last_use = getby; + while ((status = internal_getpwent (stream, result, buffer, buflen, + errnop)) == NSS_STATUS_SUCCESS) + { + if (name[0] != '+' && name[0] != '-' + && ! strcmp (name, result->pw_name)) + break; + } + internal_endent (&stream); + } + + __libc_lock_unlock (lock); + + return status; +} + +enum nss_status +files_getpwuid_r (uid_t uid, struct passwd *result, char *buffer, + size_t buflen, int *errnop) +{ + /* Locks the static variables in this file. */ + __libc_lock_define_initialized (static, lock) + enum nss_status status; + FILE *stream = NULL; + + __libc_lock_lock (lock); + + status = internal_setent (&stream, "/passwd"); + if (status == NSS_STATUS_SUCCESS) + { + last_use = getby; + while ((status = internal_getpwent (stream, result, buffer, buflen, + errnop)) == NSS_STATUS_SUCCESS) + { + if (uid == result->pw_uid && result->pw_name[0] != '+' && + result->pw_name[0] != '-') + break; + } + internal_endent (&stream); + } + + __libc_lock_unlock (lock); + + return status; +} + +/* Return the next entry from the database file, doing locking. */ +enum nss_status +files_getpwent_r (struct passwd *result, char *buffer, + size_t buflen, int *errnop) +{ + /* Some static variables */ + __libc_lock_define_initialized (static, lock) + static FILE *stream; + static fpos_t position; + + /* Return next entry in host file. */ + enum nss_status status = NSS_STATUS_SUCCESS; + + __libc_lock_lock (lock); + + /* Be prepared that the set*ent function was not called before. */ + if (stream == NULL) + { + status = internal_setent (&stream, "/passwd"); + + if (status == NSS_STATUS_SUCCESS && fgetpos (stream, &position) < 0) + { + fclose (stream); + stream = NULL; + status = NSS_STATUS_UNAVAIL; + } + } + + if (status == NSS_STATUS_SUCCESS) + { + /* If the last use was not by the getent function we need the + position the stream. */ + if (last_use != getent) + { + if (fsetpos (stream, &position) < 0) + status = NSS_STATUS_UNAVAIL; + else + last_use = getent; + } + + if (status == NSS_STATUS_SUCCESS) + { + status = internal_getpwent (stream, result, buffer, buflen, errnop); + + /* Remember this position if we were successful. If the + operation failed we give the user a chance to repeat the + operation (perhaps the buffer was too small). */ + if (status == NSS_STATUS_SUCCESS) + fgetpos (stream, &position); + else + /* We must make sure we reposition the stream the next call. */ + last_use = none; + } + } + + __libc_lock_unlock (lock); + + return status; +} + +/* Return the next entry from the database file, doing locking. */ +enum nss_status +files_getspent_r (struct spwd *result, char *buffer, + size_t buflen, int *errnop) +{ + /* Some static variables */ + __libc_lock_define_initialized (static, lock) + static FILE *stream; + static fpos_t position; + + /* Return next entry in host file. */ + enum nss_status status = NSS_STATUS_SUCCESS; + + __libc_lock_lock (lock); + + /* Be prepared that the set*ent function was not called before. */ + if (stream == NULL) + { + status = internal_setent (&stream, "/shadow"); + + if (status == NSS_STATUS_SUCCESS && fgetpos (stream, &position) < 0) + { + fclose (stream); + stream = NULL; + status = NSS_STATUS_UNAVAIL; + } + } + + if (status == NSS_STATUS_SUCCESS) + { + /* If the last use was not by the getent function we need the + position the stream. */ + if (last_use != getent) + { + if (fsetpos (stream, &position) < 0) + status = NSS_STATUS_UNAVAIL; + else + last_use = getent; + } + + if (status == NSS_STATUS_SUCCESS) + { + status = internal_getspent (stream, result, buffer, buflen, errnop); + + /* Remember this position if we were successful. If the + operation failed we give the user a chance to repeat the + operation (perhaps the buffer was too small). */ + if (status == NSS_STATUS_SUCCESS) + fgetpos (stream, &position); + else + /* We must make sure we reposition the stream the next call. */ + last_use = none; + } + } + + __libc_lock_unlock (lock); + + return status; +} diff --git a/lib/read-files.h b/lib/read-files.h new file mode 100644 index 0000000..3b5b50c --- /dev/null +++ b/lib/read-files.h @@ -0,0 +1,50 @@ +/* Copyright (C) 2003 Thorsten Kukuk + Author: Thorsten Kukuk + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License version 2 as + published by the Free Software Foundation. + + 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ + +#ifndef __READ_FILES_H__ +#define __READ_FILES_H__ + +#include +#include +#include +#include + +extern char *files_etc_dir; + +enum nss_status files_getpwnam_r (const char *name, struct passwd *result, + char *buffer, size_t buflen, int *errnop); +enum nss_status files_getpwuid_r (uid_t uid, struct passwd *result, + char *buffer, size_t buflen, int *errnop); +enum nss_status files_getspnam_r (const char *name, struct spwd *result, + char *buffer, size_t buflen, int *errnop); +enum nss_status files_getpwent_r (struct passwd *result, char *buffer, + size_t buflen, int *errnop); +enum nss_status files_getspent_r (struct spwd *result, char *buffer, + size_t buflen, int *errnop); + +enum nss_status files_getgrnam_r (const char *name, struct group *result, + char *buffer, size_t buflen, int *errnop); +enum nss_status files_getgrgid_r (uid_t uid, struct group *result, + char *buffer, size_t buflen, int *errnop); +enum nss_status files_getgrent_r (struct group *result, char *buffer, + size_t buflen, int *errnop); + +int parse_pwent (char *line, struct passwd *result, int strict); +int parse_spent (char *line, struct spwd *result, int strict); +int parse_grent (char *line, struct group *result, + char *buffer, size_t buflen, int *errnop, int strict); + +#endif /* __PUBLIC_H__ */ diff --git a/lib/remove_dir_rec.c b/lib/remove_dir_rec.c new file mode 100644 index 0000000..2b15ee5 --- /dev/null +++ b/lib/remove_dir_rec.c @@ -0,0 +1,91 @@ +/* Copyright (C) 2003, 2005 Thorsten Kukuk + Author: Thorsten Kukuk + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License version 2 as + published by the Free Software Foundation. + + 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include +#include +#include +#include +#include +#include +#include + +#include "i18n.h" +#include "public.h" + +/* Recursive removeal of a directory and subdirectories. Return values: + -1: Error occured. + 0: No error. +*/ +int +remove_dir_rec (const char *tree) +{ + struct dirent *entry; + DIR *dir = opendir (tree); + int retval = 0; + + if (dir == NULL) + return -1; + + while ((entry = readdir (dir)) != NULL) + { + /* Skip "." and ".." directory entries. */ + if (strcmp (entry->d_name, ".") == 0 || + strcmp (entry->d_name, "..") == 0) + continue; + else + { + char srcfile[strlen (tree) + strlen (entry->d_name) + 2]; + struct stat st; + char *cp; + + /* create source and destination filename with full path. */ + cp = stpcpy (srcfile, tree); + *cp++ = '/'; + strcpy (cp, entry->d_name); + + if (lstat (srcfile, &st) != 0) + continue; + + if (S_ISDIR(st.st_mode)) + { + if (remove_dir_rec (srcfile) != 0) + retval = -1; + + } + else if (unlink (srcfile) != 0) + { + fprintf (stderr, _("Cannot remove file `%s': %s\n"), + srcfile, strerror (errno)); + retval = -1; + } + } + } + + if (rmdir (tree) != 0) + { + fprintf (stderr, _("Cannot remove directory `%s': %s\n"), + tree, strerror (errno)); + retval = -1; + } + + closedir (dir); + + return retval; +} diff --git a/lib/remove_gr_mem.c b/lib/remove_gr_mem.c new file mode 100644 index 0000000..3a3d10c --- /dev/null +++ b/lib/remove_gr_mem.c @@ -0,0 +1,48 @@ +/* Copyright (C) 2004 Thorsten Kukuk + Author: Thorsten Kukuk + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License version 2 as + published by the Free Software Foundation. + + 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include +#include +#include "public.h" + +char ** +remove_gr_mem (const char *name, char **gr_mem) +{ + char **groups; + unsigned int i, j; + + for (i = 0; gr_mem[i]; i++) ; + ++i; /* for trailing NULL pointer */ + + groups = malloc (i * sizeof (char *)); + for (i = 0, j = 0; gr_mem[i]; i++) + { + if (strcmp (name, gr_mem[i]) != 0) + { + groups[j] = strdup (gr_mem[i]); + ++j; + } + } + + groups[j] = NULL; + + return groups; +} + diff --git a/lib/selinux_utils.c b/lib/selinux_utils.c new file mode 100644 index 0000000..e72da0e --- /dev/null +++ b/lib/selinux_utils.c @@ -0,0 +1,132 @@ +/* Copyright (C) 2003, 2004, 2005 Thorsten Kukuk + Author: Thorsten Kukuk + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License version 2 as + published by the Free Software Foundation. + + 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ + + +#ifdef HAVE_CONFIG_H +#include +#endif + +#ifdef WITH_SELINUX + +#include +#include +#include +#include +#include +#include +#include + +#include "i18n.h" +#include "public.h" + +int +selinux_check_access (const char *chuser, unsigned int selaccess) +{ + int status = -1; + security_context_t user_context; + + if (getprevcon (&user_context) == 0) + { + context_t c = context_new (user_context); + const char *user = context_user_get (c); + + if (strcmp (chuser, user) == 0) + status = 0; + else + { + struct av_decision avd; + int retval = security_compute_av (user_context, + user_context, + SECCLASS_PASSWD, + selaccess, + &avd); + + if ((retval == 0) && + ((selaccess & avd.allowed) == selaccess)) + status = 0; + } + context_free (c); + freecon (user_context); + } + return status; +} + +int +set_default_context (const char *filename, char **prev_context) +{ + security_context_t scontext = NULL; + + if (is_selinux_enabled () <= 0) + return 0; + + if (prev_context == NULL) + return -1; + + if (getfilecon (filename, &scontext) < 0) + { + fprintf (stderr, _("Couldn't get security context `%s': %s\n"), + filename, strerror (errno)); + return -1; + } + + if (getfscreatecon (prev_context) < 0) + { + freecon (scontext); + fprintf (stderr, _("Couldn't get default security context: %s\n"), + strerror (errno)); + return -1; + } + + if (setfscreatecon (scontext) < 0 ) + { + freecon (scontext); + fprintf (stderr, + _("Couldn't set default security context to `%s': %s\n"), + scontext, strerror (errno)); + return -1; + } + + freecon (scontext); + + return 0; +} + +int +restore_default_context (security_context_t prev_context) +{ + int retval = 0; + + if (is_selinux_enabled () > 0) + { + if (setfscreatecon (prev_context) < 0 ) + { + fprintf (stderr, + _("Couldn't reset default security context to `%s': %s\n"), + prev_context, strerror (errno)); + retval = -1; + } + + if (prev_context) + { + freecon (prev_context); + prev_context = NULL; + } + } + + return retval; +} + +#endif diff --git a/lib/str2date.c b/lib/str2date.c new file mode 100644 index 0000000..b562730 --- /dev/null +++ b/lib/str2date.c @@ -0,0 +1,48 @@ +/* Copyright (C) 2003, 2004 Thorsten Kukuk + Author: Thorsten Kukuk + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License version 2 as + published by the Free Software Foundation. + + 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#define _XOPEN_SOURCE 600 + +#include +#include +#include + +#include "public.h" + +/* convert a string to a time_t value and return it as number + of days since 1.1.1970. */ +long int +str2date (const char *str) +{ + struct tm tp; + char *cp; + time_t result; + + memset (&tp, 0, sizeof tp); + cp = strptime (str, "%Y-%m-%d", &tp); + if (!cp || *cp != '\0') + return -1; + + result = mktime (&tp); + if (result == (time_t) -1) + return -1; + + return (result + (DAY/2)) / DAY; +} diff --git a/lib/strtoid.c b/lib/strtoid.c new file mode 100644 index 0000000..d0ccc42 --- /dev/null +++ b/lib/strtoid.c @@ -0,0 +1,46 @@ +/* Copyright (C) 2004 Thorsten Kukuk + Author: Thorsten Kukuk + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License version 2 as + published by the Free Software Foundation. + + 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include +#include +#include + +#include "public.h" + +/* convert string into a UID/GID. */ +int +strtoid (const char *arg, uint32_t *idptr) +{ + long long val; + char *cp; + + val = strtoll (arg, &cp, 10); + if (*cp != '\0' || + ((val == LONG_LONG_MAX || val == LONG_LONG_MIN) && errno == ERANGE) + || val > (UINT_MAX - 1) || val < 0) /* invalid number */ + /* (UINT_MAX -1), because we cannot chown a file to + UINT_MAX, which is equal to -1, which mean chown will + not change the file owner at all. */ + return -1; + + *idptr = val; + + return 0; +} diff --git a/lib/use_slp.c b/lib/use_slp.c new file mode 100644 index 0000000..b454647 --- /dev/null +++ b/lib/use_slp.c @@ -0,0 +1,234 @@ +/* Copyright (C) 2004, 2005 Thorsten Kukuk + Author: Thorsten Kukuk + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License version 2 as + published by the Free Software Foundation. + + 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ + +#if defined(HAVE_CONFIG_H) +#include "config.h" +#endif + +#ifdef USE_SLP + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "use_slp.h" +#include "dbg_log.h" + +/* This is the minimum we'll use, irrespective of config setting. + definately don't set to less than about 30 seconds. */ +#define SLP_MIN_TIMEOUT 120 + +static void +pwdutilsSLPRegReport (SLPHandle hslp __attribute__ ((unused)), + SLPError errcode, void* cookie) +{ + /* return the error code in the cookie */ + *(SLPError*)cookie = errcode; +} + +/* the URL we use to register. */ +static char *url = NULL; + +static char hostname[1024]; +static char *hname; +static struct hostent *hp = NULL; +static int saved_port; +static int saved_timeout; +static char *saved_descr = NULL; + +static void +do_refresh (int sig __attribute__ ((unused))) +{ + if (debug_level) + dbg_log ("Service registration almost expired, refreshing it"); + register_slp (saved_port, saved_timeout, saved_descr); +} + +int +register_slp (int port, int slp_timeout, const char *slp_descr) +{ + SLPError err; + SLPError callbackerr; + SLPHandle hslp; + char *attr; + int timeout; + + saved_port = port; + saved_timeout = slp_timeout; + if (saved_descr == NULL && slp_descr != NULL) + saved_descr = strdup (slp_descr); + + if (url != NULL) + { + free (url); + url = NULL; + } + else + { + gethostname (hostname, sizeof (hostname)); + if (isdigit (hostname[0])) + { + char addr[INADDRSZ]; + if (inet_pton (AF_INET, hostname, &addr)) + hp = gethostbyaddr (addr, sizeof (addr), AF_INET); + } + else + hp = gethostbyname (hostname); + hname = hp->h_name; + } + + if (slp_timeout == 0) + timeout = SLP_LIFETIME_MAXIMUM; /* don't expire, ever */ + else if (SLP_MIN_TIMEOUT > slp_timeout) + timeout = SLP_MIN_TIMEOUT; /* use a reasonable minimum */ + else if (SLP_LIFETIME_MAXIMUM <= slp_timeout) + timeout = (SLP_LIFETIME_MAXIMUM - 1); /* as long as possible */ + else + timeout = slp_timeout; + + if (asprintf (&url, "service:rpasswdd://%s:%i/", hname, port) < 0) + { + dbg_log ("Out of memory"); + return -1; + } + + if (slp_descr) + { + if (asprintf (&attr, "(description=%s)", slp_descr) < 0) + { + dbg_log ("Out of memory"); + return -1; + } + } + else + attr = strdup (""); + + err = SLPOpen ("en", SLP_FALSE, &hslp); + if(err != SLP_OK) + { + dbg_log ("Error opening slp handle %i", err); + return -1; + } + + /* Register a service with SLP */ + err = SLPReg (hslp, url, SLP_LIFETIME_MAXIMUM, 0, + attr, + SLP_TRUE, + pwdutilsSLPRegReport, + &callbackerr); + + free (attr); + + /* err may contain an error code that occurred as the slp library */ + /* _prepared_ to make the call. */ + if ((err != SLP_OK) || (callbackerr != SLP_OK)) + { + dbg_log ("Error registering service with slp %i", err); + return -1; + } + + /* callbackerr may contain an error code (that was assigned through */ + /* the callback cookie) that occurred as slp packets were sent on */ + /* the wire */ + if( callbackerr != SLP_OK) + { + dbg_log ("Error registering service with slp %i", + callbackerr); + return callbackerr; + } + + /* Now that we're done using slp, close the slp handle */ + SLPClose (hslp); + + /* Set up a timer to refresh the service records */ + if (timeout != SLP_LIFETIME_MAXIMUM) + { + struct sigaction act; + + act.sa_handler = do_refresh; + if (sigaction (SIGALRM, &act, NULL) != 0) + dbg_log ("SLP: error establishing signal handler\n"); + + alarm (timeout - 15); + } + + return 0; +} + +int +deregister_slp () +{ + SLPError err; + SLPError callbackerr; + SLPHandle hslp; + + if (url == NULL) + { + dbg_log ("URL not registerd!"); + return -1; + } + + err = SLPOpen ("en", SLP_FALSE, &hslp); + if(err != SLP_OK) + { + dbg_log ("Error opening slp handle %i", err); + return -1; + } + + /* Disable possibel alarm call. */ + alarm (0); + + /* DeRegister a service with SLP */ + err = SLPDereg (hslp, url, pwdutilsSLPRegReport, &callbackerr); + + free (url); + url = NULL; + + + /* err may contain an error code that occurred as the slp library */ + /* _prepared_ to make the call. */ + if ((err != SLP_OK) || (callbackerr != SLP_OK)) + { + dbg_log ("Error unregistering service with slp %i", err); + return -1; + } + + /* callbackerr may contain an error code (that was assigned through */ + /* the callback cookie) that occurred as slp packets were sent on */ + /* the wire */ + if( callbackerr != SLP_OK) + { + dbg_log ("Error registering service with slp %i", + callbackerr); + return callbackerr; + } + + /* Now that we're done using slp, close the slp handle */ + SLPClose (hslp); + + return 0; +} + +#endif diff --git a/lib/use_slp.h b/lib/use_slp.h new file mode 100644 index 0000000..90014e2 --- /dev/null +++ b/lib/use_slp.h @@ -0,0 +1,23 @@ +/* Copyright (C) 2004 Thorsten Kukuk + Author: Thorsten Kukuk + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License version 2 as + published by the Free Software Foundation. + + 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ + +#ifndef __USE_SLP_H__ +#define __USE_SLP_H__ + +int register_slp (int port, int timeout, const char *descr); +int deregister_slp (void); + +#endif diff --git a/lib/user.c b/lib/user.c new file mode 100644 index 0000000..2bf2bd7 --- /dev/null +++ b/lib/user.c @@ -0,0 +1,1108 @@ +/* Copyright (C) 2002, 2003, 2004, 2005, 2009, 2010, 2011 Thorsten Kukuk + Author: Thorsten Kukuk + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License version 2 as + published by the Free Software Foundation. + + 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ + + +#ifdef HAVE_CONFIG_H +#include +#endif + +#include +#include +#include +#include +#include +#include +#include + +#ifdef USE_LDAP +#ifdef HAVE_LDAP_H +#include +#endif +#include "libldap.h" +#endif + +#include "nsw.h" +#include "i18n.h" +#include "public.h" +#include "yppasswd.h" +#include "read-files.h" + +char *files_etc_dir = "/etc"; + +const char * +nsw2str (service_t service) +{ + switch (service) + { + case S_LOCAL: + return "files"; + break; + case S_YP: + return "NIS"; + break; + case S_NISPLUS: + return "NIS+"; + break; +#ifdef USE_LDAP + case S_LDAP: + return "LDAP"; + break; +#endif + default: + return "unknown"; + break; + } +} + +char * +getnismaster (void) +{ + + char *master, *domainname; + int port, err; + + yp_get_default_domain (&domainname); + + if ((err = yp_master (domainname, "passwd.byname", &master)) != 0) + { + fprintf (stderr, _("Can't find the NIS master server: %s\n"), + yperr_string (err)); + return NULL; + } + port = getrpcport (master, YPPASSWDPROG, YPPASSWDPROC_UPDATE, IPPROTO_UDP); + if (port == 0) + { + fprintf (stderr, _("rpc.yppasswdd not running on NIS master %s.\n"), master); + return NULL; + } + if (port >= IPPORT_RESERVED) + { + fprintf (stderr, + _("rpc.yppasswdd running on illegal port on NIS master %s.\n"), + master); + return NULL; + } + + return master; +} + +void +free_user_t (user_t *data) +{ + if (data == NULL) + return; + + if (data->pwdbuffer) + free (data->pwdbuffer); + if (data->spwbuffer) + free (data->spwbuffer); + if (data->newpassword) + free (data->newpassword); + if (data->new_name) + free (data->new_name); + if (data->new_shell) + free (data->new_shell); + if (data->new_gecos) + free (data->new_gecos); + if (data->new_home) + free (data->new_home); + if (data->oldclearpwd) + free (data->oldclearpwd); + if (data->binddn) + free (data->binddn); + free (data); +} + +user_t * +do_getpwnam (const char *user, const char *use_service) +{ + enum nss_status (*nss_getpwnam_r)(const char *name, struct passwd *pwd, + char *buffer, size_t buflen, int *errnop); + enum nss_status (*nss_getspnam_r)(const char *name, struct spwd *sp, + char *buffer, size_t buflen, int *errnop); + enum nss_status status; + void *nss_handle = NULL; + user_t *data; + struct nsw *nswp; + int i; + + data = calloc (1, sizeof (user_t)); + if (data == NULL) + return NULL; + + data->service = S_NONE; + + /* UNIX passwords area */ + if (use_service) + { + nswp = calloc (1, sizeof (struct nsw)); + if (nswp == NULL) + return data; + + nswp->name = strdup ("passwd"); + nswp->orderc = 1; + nswp->orders = calloc (2, sizeof (char *)); + nswp->orders[0] = strdup (use_service); + nswp->orders[1] = NULL; + } + else + nswp = _getnswbyname ("passwd"); + if (nswp == NULL) + return data; + + for (i = 0; i < nswp->orderc; ++i) + { + const char *cmpptr = nswp->orders[i]; + + again: + + if (nswp->orders[i][0] == '[') + continue; + if (strcasecmp ("files", cmpptr) == 0 || + strcasecmp ("compat", cmpptr) == 0) + { + nss_getpwnam_r = files_getpwnam_r; + /* Get password file entry... */ + do { + errno = 0; + data->pwdbuflen += 1024; + data->pwdbuffer = realloc (data->pwdbuffer, data->pwdbuflen); + status = (*nss_getpwnam_r)(user, &data->pw, data->pwdbuffer, + data->pwdbuflen, &errno); + } while (status == NSS_STATUS_TRYAGAIN && errno == ERANGE); + + if (status != NSS_STATUS_SUCCESS) + { + free (data->pwdbuffer); + data->pwdbuffer = NULL; + data->pwdbuflen = 0; + if (strcasecmp ("compat", cmpptr) == 0) + { + struct nsw *nswp2 = _getnswbyname ("passwd_compat"); + + if (nswp2 == NULL) + cmpptr = "nis"; + else + { + char *cp = alloca (strlen (nswp2->orders[0]) + 1); + strcpy (cp, nswp2->orders[0]); + cmpptr = cp; + nsw_free (nswp2); + } + goto again; + } + } + else + { + data->service = S_LOCAL; + break; + } + } + else if (strcasecmp ("nis", cmpptr) == 0 || + strcasecmp ("yp", cmpptr) == 0) + { + nss_handle = dlopen ("libnss_nis.so.2", RTLD_NOW); + if (!nss_handle) + continue; + nss_getpwnam_r = dlsym (nss_handle, "_nss_nis_getpwnam_r"); + if (dlerror () != NULL) + { + dlclose (nss_handle); + continue; + } + + /* Get NIS passwd entry... */ + do { + errno = 0; + data->pwdbuflen += 1024; + data->pwdbuffer = realloc (data->pwdbuffer, data->pwdbuflen); + status = (*nss_getpwnam_r)(user, &data->pw, data->pwdbuffer, + data->pwdbuflen, &errno); + } while (status == NSS_STATUS_TRYAGAIN && errno == ERANGE); + + if (status != NSS_STATUS_SUCCESS) + { + dlclose (nss_handle); + free (data->pwdbuffer); + data->pwdbuffer = NULL; + data->pwdbuflen = 0; + } + else + { + data->service = S_YP; + break; + } + } + else if (strcasecmp ("nisplus", cmpptr) == 0 || + strcasecmp ("nis+", cmpptr) == 0) + { + nss_handle = dlopen ("libnss_nisplus.so.2", RTLD_NOW); + if (!nss_handle) + continue; + nss_getpwnam_r = dlsym (nss_handle, "_nss_nisplus_getpwnam_r"); + if (dlerror () != NULL) + { + dlclose (nss_handle); + continue; + } + + /* Get password NIS+ entry... */ + do { + errno = 0; + data->pwdbuflen += 1024; + data->pwdbuffer = realloc (data->pwdbuffer, data->pwdbuflen); + status = (*nss_getpwnam_r)(user, &data->pw, data->pwdbuffer, + data->pwdbuflen, &errno); + } while (status == NSS_STATUS_TRYAGAIN && errno == ERANGE); + + if (status != NSS_STATUS_SUCCESS) + { + dlclose (nss_handle); + free (data->pwdbuffer); + data->pwdbuffer = NULL; + data->pwdbuflen = 0; + } + else + { + data->service = S_NISPLUS; + break; + } + } +#ifdef USE_LDAP + else if (strcasecmp ("ldap", cmpptr) == 0) + { + nss_handle = dlopen ("libnss_ldap.so.2", RTLD_NOW); + if (!nss_handle) + continue; + nss_getpwnam_r = dlsym (nss_handle, "_nss_ldap_getpwnam_r"); + if (dlerror () != NULL) + { + dlclose (nss_handle); + continue; + } + + /* Get LDAP passwd entry... */ + do { + errno = 0; + data->pwdbuflen += 1024; + data->pwdbuffer = realloc (data->pwdbuffer, data->pwdbuflen); + status = (*nss_getpwnam_r)(user, &data->pw, data->pwdbuffer, + data->pwdbuflen, &errno); + } while (status == NSS_STATUS_TRYAGAIN && errno == ERANGE); + + if (status != NSS_STATUS_SUCCESS) + { + dlclose (nss_handle); + free (data->pwdbuffer); + data->pwdbuffer = NULL; + data->pwdbuflen = 0; + } + else + { + data->service = S_LDAP; + break; + } + } +#endif + } + + nsw_free (nswp); + + if (data->service == S_NONE) + return data; + + nss_getspnam_r = NULL; + status = NSS_STATUS_NOTFOUND; + + if (data->service == S_LOCAL) + { + nss_getspnam_r = files_getspnam_r; + } + else if (data->service == S_YP) + { + nss_getspnam_r = dlsym (nss_handle, "_nss_nis_getspnam_r"); + if (dlerror () != NULL) + { + data->service = S_NONE; + free (data->pwdbuffer); + data->pwdbuffer = NULL; + data->pwdbuflen = 0; + dlclose (nss_handle); + return data; + } + } + else if (data->service == S_NISPLUS) + { + nss_getspnam_r = dlsym (nss_handle, "_nss_nisplus_getspnam_r"); + if (dlerror () != NULL) + { + data->service = S_NONE; + free (data->pwdbuffer); + data->pwdbuffer = NULL; + data->pwdbuflen = 0; + dlclose (nss_handle); + return data; + } + } +#ifdef USE_LDAP + else if (data->service == S_LDAP) + { + nss_getspnam_r = dlsym (nss_handle, "_nss_ldap_getspnam_r"); + if (dlerror () != NULL) + { + data->service = S_NONE; + free (data->pwdbuffer); + data->pwdbuffer = NULL; + data->pwdbuflen = 0; + dlclose (nss_handle); + return data; + } + } +#endif + + if (nss_getspnam_r) + { + do { + errno = 0; + data->spwbuflen += 1024; + data->spwbuffer = realloc (data->spwbuffer, data->spwbuflen); + status = (*nss_getspnam_r)(user, &data->sp, data->spwbuffer, + data->spwbuflen, &errno); + } while (status == NSS_STATUS_TRYAGAIN && errno == ERANGE); + } + + if (data->service != S_LOCAL && data->service != S_NONE) + dlclose (nss_handle); + + if (status == NSS_STATUS_SUCCESS) + { + data->use_shadow = TRUE; + data->spn = data->sp; + data->sp_changed = FALSE; + } + else + memset (&(data->sp), 0, sizeof (struct spwd)); + + return data; +} + +int +write_user_data (user_t *data, int is_locked) +{ + int retval = 0; + + if (data->service == S_LOCAL) + { + if (!is_locked && lock_database() != 0) + { + fputs (_("Cannot lock password file: already locked.\n"), stderr); + retval = -1; + } + else if ((data->newpassword && !data->use_shadow) || + data->new_shell || data->new_gecos || data->new_home || + data->have_new_uid || data->have_new_gid || data->new_name || + data->todo == DO_CREATE || data->todo == DO_DELETE) + { + /* Only run through /etc/passwd if we really have something to + change. */ + const char *file_tmp = "/passwd.tmpXXXXXX"; + char *passwd_tmp = alloca (strlen (files_etc_dir) + strlen (file_tmp) + 1); + char *passwd_orig = alloca (strlen (files_etc_dir) + 8); + char *passwd_old = alloca (strlen (files_etc_dir) + 12); + struct stat passwd_stat; + struct passwd *pw; /* passwd struct obtained from fgetpwent() */ + FILE *oldpf, *newpf; + int gotit, newpf_fd; + char *cp; + + cp = stpcpy (passwd_tmp, files_etc_dir); + strcpy (cp, file_tmp); + cp = stpcpy (passwd_orig, files_etc_dir); + strcpy (cp, "/passwd"); + cp = stpcpy (passwd_old, passwd_orig); + strcpy (cp, ".old"); + + if ((oldpf = fopen (passwd_orig, "r")) == NULL) + { + fprintf (stderr, _("Can't open `%s': %m\n"), passwd_orig); + retval = -1; + goto error_passwd; + } + if (fstat (fileno (oldpf), &passwd_stat) < 0) + { + fprintf (stderr, _("Can't stat `%s': %m\n"), passwd_orig); + fclose (oldpf); + retval = -1; + goto error_passwd; + } + +#ifdef WITH_SELINUX + security_context_t prev_context; + if (set_default_context (passwd_orig, &prev_context) < 0) + { + fclose (oldpf); + retval = -1; + goto error_passwd; + } +#endif + /* Open a temp passwd file */ + newpf_fd = mkstemp (passwd_tmp); +#ifdef WITH_SELINUX + if (restore_default_context (prev_context) < 0) + { + if (newpf_fd >= 0) + close (newpf_fd); + fclose (oldpf); + retval = -1; + goto error_passwd; + } +#endif + if (newpf_fd == -1) + { + fprintf (stderr, _("Can't create `%s': %m\n"), + passwd_orig); + fclose (oldpf); + retval = -1; + goto error_passwd; + } + if (fchmod (newpf_fd, passwd_stat.st_mode) < 0) + { + fprintf (stderr, + _("Cannot change permissions for `%s': %s\n"), + passwd_tmp, strerror (errno)); + fclose (oldpf); + close (newpf_fd); + unlink (passwd_tmp); + retval = -1; + goto error_passwd; + } + if (fchown (newpf_fd, passwd_stat.st_uid, passwd_stat.st_gid) < 0) + { + fprintf (stderr, + _("Cannot change owner/group for `%s': %s\n"), + passwd_tmp, strerror (errno)); + fclose (oldpf); + close (newpf_fd); + unlink (passwd_tmp); + retval = -1; + goto error_passwd; + } + if (copy_xattr (passwd_orig, passwd_tmp) != 0) + { + fclose (oldpf); + close (newpf_fd); + unlink (passwd_tmp); + retval = -1; + goto error_passwd; + } + newpf = fdopen (newpf_fd, "w+"); + if (newpf == NULL) + { + fprintf (stderr, _("Can't open `%s': %m\n"), passwd_tmp); + fclose (oldpf); + close (newpf_fd); + unlink (passwd_tmp); + retval = -1; + goto error_passwd; + } + + gotit = 0; + + /* Loop over all passwd entries */ + while ((pw = fgetpwent (oldpf)) != NULL) + { + if (data->todo == DO_CREATE) + { + /* insert the new user before we find a user with a + higher UID or before we find a +/- character. */ + if (!gotit && + (/* data->pw.pw_uid < pw->pw_uid || XXX not yet? */ + pw->pw_name[0] == '+' || + pw->pw_name[0] == '-')) + { + /* write the passwd entry to tmp file */ + if (putpwent (&data->pw, newpf) < 0) + { + fprintf (stderr, + _("Error while writing `%s': %m\n"), + passwd_tmp); + fclose (oldpf); + fclose (newpf); + retval = -1; + goto error_passwd; + } + gotit = 1; + } + } + else if (data->todo == DO_DELETE) + { + if (data->pw.pw_uid == pw->pw_uid && + data->pw.pw_gid == pw->pw_gid && + strcmp (data->pw.pw_name, pw->pw_name) == 0) + { + gotit = 1; + continue; + } + } + else + { + /* check if this is the uid we want to change. A few + sanity checks added for consistency. */ + if (data->pw.pw_uid == pw->pw_uid && + data->pw.pw_gid == pw->pw_gid && + strcmp (data->pw.pw_name, pw->pw_name) == 0 && + !gotit) + { + if (data->newpassword && !data->use_shadow) + pw->pw_passwd = data->newpassword; + if (data->new_name) + pw->pw_name = data->new_name; + if (data->new_shell) + pw->pw_shell = data->new_shell; + if (data->new_gecos) + pw->pw_gecos = data->new_gecos; + if (data->new_home) + pw->pw_dir = data->new_home; + if (data->have_new_uid) + pw->pw_uid = data->new_uid; + if (data->have_new_gid) + pw->pw_gid = data->new_gid; + gotit = 1; + } + } + + /* write the passwd entry to tmp file */ + if (putpwent (pw, newpf) < 0) + { + fprintf (stderr, + _("Error while writing `%s': %m\n"), passwd_tmp); + fclose (oldpf); + fclose (newpf); + retval = -1; + goto error_passwd; + } + } + + if (data->todo == DO_CREATE && !gotit) + { + /* write the passwd entry to tmp file */ + if (putpwent (&data->pw, newpf) < 0) + { + fprintf (stderr, + _("Error while writing `%s': %m\n"), passwd_tmp); + fclose (oldpf); + fclose (newpf); + retval = -1; + goto error_passwd; + } + } + else if (data->todo == DO_DELETE && !gotit) + { + fprintf (stderr, + _("User not found (and not deleted): %s\n"), + data->pw.pw_name); + retval = -1; + } + + if (fclose (oldpf) != 0) + { + fprintf (stderr, + _("Error while closing `%s': %m\n"), passwd_orig); + fclose (newpf); + retval = -1; + goto error_passwd; + } + + if (fflush (newpf) != 0) + { + fprintf (stderr, + _("Error while writing to disk `%s': %m\n"), + passwd_tmp); + fclose (newpf); + retval = -1; + goto error_passwd; + } + + if (fsync (fileno(newpf)) != 0) + { + fprintf (stderr, + _("Error while syncing to disk `%s': %m\n"), + passwd_tmp); + fclose (newpf); + retval = -1; + goto error_passwd; + } + + + if (fclose (newpf) != 0) + { + fprintf (stderr, + _("Error while closing `%s': %m\n"), passwd_tmp); + retval = -1; + goto error_passwd; + } + + unlink (passwd_old); + if (link (passwd_orig, passwd_old) < 0) + fprintf (stderr, + _("Warning: cannot create backup file `%s': %m\n"), + passwd_old); + if (rename (passwd_tmp, passwd_orig) < 0) + { + fprintf (stderr, + _("Error while renaming `%s': %m\n"), passwd_tmp); + retval = -1; + goto error_passwd; + } + error_passwd: + unlink (passwd_tmp); + } + + /* If we use shadow data, check if we need to change here + something, too. But do this only, if there no error occured + before. */ + if (data->use_shadow && retval == 0 && + (data->todo == DO_CREATE || data->todo == DO_CREATE_SHADOW || + data->todo == DO_DELETE || data->todo == DO_DELETE_SHADOW || + data->new_name || data->newpassword || data->sp_changed)) + { + const char *file_tmp = "/shadow.tmpXXXXXX"; + char *shadow_tmp = alloca (strlen (files_etc_dir) + + strlen (file_tmp) + 1); + char *shadow_orig = alloca (strlen (files_etc_dir) + 8); + char *shadow_old = alloca (strlen (files_etc_dir) + 12); + struct stat shadow_stat; + struct spwd *sp; /* shadow struct obtained from fgetspent() */ + FILE *oldpf, *newpf; + int gotit, newpf_fd; + char *cp; + + cp = stpcpy (shadow_tmp, files_etc_dir); + strcpy (cp, file_tmp); + cp = stpcpy (shadow_orig, files_etc_dir); + strcpy (cp, "/shadow"); + cp = stpcpy (shadow_old, shadow_orig); + strcpy (cp, ".old"); + + /* Open the shadow file for reading. We can't use getspent and + friends here, because they go through the YP maps, too. */ + if ((oldpf = fopen (shadow_orig, "r")) == NULL) + { + fprintf (stderr, _("Can't open `%s': %m\n"), shadow_orig); + retval = -1; + goto error_shadow; + } + if (fstat (fileno (oldpf), &shadow_stat) < 0) + { + fprintf (stderr, _("Can't stat `%s': %m\n"), shadow_orig); + fclose (oldpf); + retval = -1; + goto error_shadow; + } + +#ifdef WITH_SELINUX + security_context_t prev_context; + if (set_default_context (shadow_orig, &prev_context) < 0) + { + fclose (oldpf); + retval = -1; + goto error_shadow; + } +#endif + /* Open a temp shadow file */ + newpf_fd = mkstemp (shadow_tmp); +#ifdef WITH_SELINUX + if (restore_default_context (prev_context) < 0) + { + if (newpf_fd >= 0) + close (newpf_fd); + fclose (oldpf); + retval = -1; + goto error_shadow; + } +#endif + if (newpf_fd == -1) + { + fprintf (stderr, _("Can't create `%s': %m\n"), + shadow_orig); + fclose (oldpf); + retval = -1; + goto error_shadow; + } + if (fchmod (newpf_fd, shadow_stat.st_mode) < 0) + { + fprintf (stderr, + _("Cannot change permissions for `%s': %s\n"), + shadow_tmp, strerror (errno)); + fclose (oldpf); + close (newpf_fd); + unlink (shadow_tmp); + retval = -1; + goto error_shadow; + } + if (fchown (newpf_fd, shadow_stat.st_uid, shadow_stat.st_gid) < 0) + { + fprintf (stderr, + _("Cannot change owner/group for `%s': %s\n"), + shadow_tmp, strerror (errno)); + fclose (oldpf); + close (newpf_fd); + unlink (shadow_tmp); + retval = -1; + goto error_shadow; + } + if (copy_xattr (shadow_orig, shadow_tmp) != 0) + { + fclose (oldpf); + close (newpf_fd); + unlink (shadow_tmp); + retval = -1; + goto error_shadow; + } + newpf = fdopen (newpf_fd, "w+"); + if (newpf == NULL) + { + fprintf (stderr, _("Can't open `%s': %m\n"), shadow_tmp); + fclose (oldpf); + close (newpf_fd); + unlink (shadow_tmp); + retval = -1; + goto error_shadow; + } + + gotit = 0; + + /* Loop over all passwd entries */ + while ((sp = fgetspent (oldpf)) != NULL) + { + if (data->todo == DO_CREATE || + data->todo == DO_CREATE_SHADOW) + { + /* insert the new user before we find a +/- character + or an old entry from a deleted user. */ + if (!gotit && + (sp->sp_namp[0] == '+' || sp->sp_namp[0] == '-' || + strcmp (sp->sp_namp, data->sp.sp_namp) == 0)) + { + /* write the passwd entry to tmp file */ + if (putspent (&data->sp, newpf) < 0) + { + fprintf (stderr, _("Error while writing `%s': %m\n"), + shadow_tmp); + fclose (oldpf); + fclose (newpf); + retval = -1; + goto error_shadow; + } + gotit = 1; + } + } + else if (data->todo == DO_DELETE || + data->todo == DO_DELETE_SHADOW) + { + if (strcmp (data->pw.pw_name, sp->sp_namp) == 0) + { + gotit = 1; + continue; + } + } + else + /* check if this is the uid we want to change. A few + sanity checks added for consistency. */ + if (!gotit && strcmp (data->pw.pw_name, sp->sp_namp) == 0) + { + if (data->newpassword) + sp->sp_pwdp = data->newpassword; + + if (data->new_name) + sp->sp_namp = data->new_name; + + if (data->sp_changed) + { + /* if they have changed, they are different. If not, + they are equal, so copying them doesn't matter. */ + sp->sp_max = data->spn.sp_max; + sp->sp_min = data->spn.sp_min; + sp->sp_warn = data->spn.sp_warn; + sp->sp_inact = data->spn.sp_inact; + sp->sp_lstchg = data->spn.sp_lstchg; + sp->sp_expire = data->spn.sp_expire; + } + + gotit = 1; + } + + /* Write the entry only if we don't create a new + account or if this is not a duplicate of the new + user account. */ + if ((data->todo != DO_CREATE && + data->todo != DO_CREATE_SHADOW) || + strcmp (sp->sp_namp, data->sp.sp_namp) != 0) + { + /* write the passwd entry to tmp file */ + if (putspent (sp, newpf) < 0) + { + fprintf (stderr, _(" Error while writing `%s': %m\n"), + shadow_tmp); + fclose (oldpf); + fclose (newpf); + retval = -1; + goto error_shadow; + } + } + } + if ((data->todo == DO_CREATE || data->todo == DO_CREATE_SHADOW) + && !gotit) + { + /* Add the new user at the end. */ + if (putspent (&data->sp, newpf) < 0) + { + fprintf (stderr, _("Error while writing `%s': %m\n"), + shadow_tmp); + fclose (oldpf); + fclose (newpf); + retval = -1; + goto error_shadow; + } + } + if (fclose (oldpf) != 0) + { + fprintf (stderr, _("Error while closing `%s': %m\n"), + shadow_orig); + fclose (newpf); + retval = -1; + goto error_shadow; + } + + if (fflush (newpf) != 0) + { + fprintf (stderr, + _("Error while writing to disk `%s': %m\n"), + shadow_tmp); + fclose (newpf); + retval = -1; + goto error_shadow; + } + + if (fsync (fileno(newpf)) != 0) + { + fprintf (stderr, + _("Error while syncing to disk `%s': %m\n"), + shadow_tmp); + fclose (newpf); + retval = -1; + goto error_shadow; + } + + if (fclose (newpf) != 0) + { + fprintf (stderr, _("Error while closing `%s': %m\n"), + shadow_tmp); + retval = -1; + goto error_shadow; + } + unlink (shadow_old); + if (link (shadow_orig, shadow_old) < 0) + fprintf (stderr, _("Warning: cannot create backup file `%s': %m\n"), + shadow_old); + if (rename (shadow_tmp, shadow_orig) < 0) + { + fprintf (stderr, _("Error while renaming `%s': %m\n"), + shadow_tmp); + retval = -1; + goto error_shadow; + } + error_shadow: + unlink (shadow_tmp); + } + + /* Don't unlock if program itself helds lock. */ + if (!is_locked) + ulckpwdf (); + } + else if (data->service == S_YP) + { + struct yppasswd yppwd; + CLIENT *clnt; + char *master = getnismaster(); + struct timeval TIMEOUT = {25, 0}; /* total timeout */ + int error, status; + + /* Changing shadow information is not supported. */ + if (data->sp_changed) + return -1; + + if (master == NULL) + return -1; + + /* Initialize password information */ + memset (&yppwd, '\0', sizeof (yppwd)); + yppwd.newpw.pw_passwd = data->pw.pw_passwd; + yppwd.newpw.pw_name = data->pw.pw_name; + yppwd.newpw.pw_uid = data->pw.pw_uid; + yppwd.newpw.pw_gid = data->pw.pw_gid; + if (data->new_gecos) + yppwd.newpw.pw_gecos = data->new_gecos; + else + yppwd.newpw.pw_gecos = data->pw.pw_gecos; + yppwd.newpw.pw_dir = data->pw.pw_dir; + if (data->new_shell) + yppwd.newpw.pw_shell = data->new_shell; + else + yppwd.newpw.pw_shell = data->pw.pw_shell; + if (data->oldclearpwd != NULL) + yppwd.oldpass = data->oldclearpwd; + else + yppwd.oldpass = (char *)""; + + clnt = clnt_create (master, YPPASSWDPROG, YPPASSWDVERS, "udp"); + clnt->cl_auth = authunix_create_default (); + memset (&status, '\0', sizeof (status)); + error = clnt_call (clnt, YPPASSWDPROC_UPDATE, + (xdrproc_t) xdr_yppasswd, (caddr_t) &yppwd, + (xdrproc_t) xdr_int, (caddr_t) &status, TIMEOUT); + if (error || status) + { + if (error) + clnt_perrno (error); + else + fprintf (stderr, _("Error while changing the NIS data.\n")); + retval = -1; + } + } + else if (data->service == S_NISPLUS) + { + retval = npd_upd_pwd ("", data); + if (retval != 0) + { + fprintf (stderr, _("Error while changing the NIS+ data.\n")); + retval = -1; + } + } +#ifdef USE_LDAP + else if (data->service == S_LDAP) + { + ldap_session_t *session = NULL; + + session = create_ldap_session (LDAP_PATH_CONF); + + if (session == NULL) + retval = -1; + else + { + if (data->todo == DO_CREATE) + retval = ldap_create_user (session, &(data->pw), &(data->sp), + data->binddn, data->oldclearpwd); + else if (data->todo == DO_DELETE) + retval = ldap_delete_user (session, data->pw.pw_name, + data->binddn, data->oldclearpwd); + else + { + /* XXX retval will be overwritten!!! */ + if (data->new_shell) + retval = ldap_update_user (session, data->pw.pw_name, + data->binddn, data->oldclearpwd, + "loginShell", data->new_shell); + if (data->new_gecos) + retval = ldap_update_user (session, data->pw.pw_name, + data->binddn, data->oldclearpwd, + "gecos", data->new_gecos); + if (data->new_name) + retval = ldap_update_user (session, data->pw.pw_name, + data->binddn, data->oldclearpwd, + "uid", data->new_name); + if (data->have_new_uid) + { + char buf[100]; + + snprintf (buf, sizeof (buf), "%u", data->new_uid); + retval = ldap_update_user (session, data->pw.pw_name, + data->binddn, data->oldclearpwd, + "uidNumber", buf); + } + if (data->have_new_gid) + { + char buf[100]; + + snprintf (buf, sizeof (buf), "%u", data->new_gid); + retval = ldap_update_user (session, data->pw.pw_name, + data->binddn, data->oldclearpwd, + "gidNumber", buf); + } + if (data->new_home) + retval = ldap_update_user (session, data->pw.pw_name, + data->binddn, data->oldclearpwd, + "homeDirectory", data->new_home); + + if (data->sp_changed) + { + char buf[200]; + + snprintf (buf, sizeof (buf), "%ld", data->spn.sp_min); + retval = ldap_update_user (session, data->pw.pw_name, + data->binddn, data->oldclearpwd, + "shadowMin", buf); + snprintf (buf, sizeof (buf),"%ld", data->spn.sp_max); + retval = ldap_update_user (session, data->pw.pw_name, + data->binddn, data->oldclearpwd, + "shadowMax", buf); + snprintf (buf, sizeof (buf),"%ld", data->spn.sp_warn); + retval = ldap_update_user (session, data->pw.pw_name, + data->binddn, data->oldclearpwd, + "shadowWarning", buf); + snprintf (buf, sizeof (buf),"%ld", data->spn.sp_inact); + retval = ldap_update_user (session, data->pw.pw_name, + data->binddn, data->oldclearpwd, + "shadowInactive", buf); + snprintf (buf, sizeof (buf),"%ld", data->spn.sp_lstchg); + retval = ldap_update_user (session, data->pw.pw_name, + data->binddn, data->oldclearpwd, + "shadowLastChange", buf); + snprintf (buf, sizeof (buf),"%ld", data->spn.sp_expire); + retval = ldap_update_user (session, data->pw.pw_name, + data->binddn, data->oldclearpwd, + "shadowExpire", buf); + } + + if (data->newpassword) + { + const char *cryptstr = "{crypt}"; + char buffer[strlen (data->newpassword) + + strlen (cryptstr) + 1]; + snprintf (buffer, sizeof (buffer), "%s%s", cryptstr, + data->newpassword); + retval = ldap_update_user (session, data->pw.pw_name, + data->binddn, data->oldclearpwd, + "userPassword", buffer); + } + } + if (retval != 0) + fprintf (stderr, + _("LDAP information update failed: %s\n"), + ldap_err2string (retval)); + + close_ldap_session (session); + } + } +#endif + else + { + fprintf (stderr, _("Unknown service %d.\n"), data->service); + retval = -1; + } + + return retval; +} diff --git a/lib/utf8conv.c b/lib/utf8conv.c new file mode 100644 index 0000000..5e61481 --- /dev/null +++ b/lib/utf8conv.c @@ -0,0 +1,109 @@ +/* Copyright (C) 2004 Thorsten Kukuk + Author: Thorsten Kukuk + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License version 2 as + published by the Free Software Foundation. + + 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ + +#if defined(HAVE_CONFIG_H) +#include "config.h" +#endif + +#include +#include +#include +#include +#include +#include + +#include "utf8conv.h" + +static char * +call_iconv (const char *from, const char *to, const char *str) +{ + size_t nconv, srclen, dstlen; + iconv_t ih = iconv_open (to, from); + char *srcstr, *dststr, *resstr; + + if (ih == (iconv_t) -1) + { + /* Something went wrong. */ + if (errno == EINVAL) + fprintf (stderr, "conversion from `%s' to `%s' not available.\n", + from, to); + else + perror ("iconv_open"); + + return NULL; + } + + srcstr = strdupa (str); + srclen = strlen (srcstr); + dstlen = srclen * 4; + dststr = malloc (dstlen); + if (dststr == NULL) + return NULL; + resstr = dststr; + + nconv = iconv (ih, &srcstr, &srclen, &dststr, &dstlen); + if (nconv == (size_t) -1) + { + if (errno != EILSEQ) + perror ("iconv"); + free (resstr); + return strdup (str); + } + *dststr = '\0'; + + if (iconv_close (ih) != 0) + perror ("iconv_close"); + + return resstr; +} + +char * +utf8_to_locale (const char *str) +{ + char *to = nl_langinfo (CODESET); + char *res; + + if (to == NULL || + strcmp (to, "C") == 0 || + strcmp (to, "UTF-8") == 0) + return strdup (str); + + res = call_iconv ("UTF-8", to, str); + + if (res == NULL) + return strdup (str); + + return res; +} + +char * +locale_to_utf8 (const char *str) +{ + char *from = nl_langinfo (CODESET); + char *res; + + if (from == NULL || + strcmp (from, "C") == 0 || + strcmp (from, "UTF-8") == 0) + return strdup (str); + + res = call_iconv (from, "UTF-8", str); + + if (res == NULL) + return strdup (str); + + return res; +} diff --git a/lib/utf8conv.h b/lib/utf8conv.h new file mode 100644 index 0000000..c56bec8 --- /dev/null +++ b/lib/utf8conv.h @@ -0,0 +1,18 @@ +/* Copyright (c) 2004 Thorsten Kukuk + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License version 2 as + published by the Free Software Foundation. + + 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ + +extern char *utf8_to_locale (const char *str); +extern char *locale_to_utf8 (const char *str); + diff --git a/lib/yesno.c b/lib/yesno.c new file mode 100644 index 0000000..23b6bea --- /dev/null +++ b/lib/yesno.c @@ -0,0 +1,50 @@ +/* yesno.c -- read a yes/no response from stdin + Copyright (C) 1990, 1998, 2001, 2003 Free Software Foundation, 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, 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ + +#if HAVE_CONFIG_H +# include +#endif + +#include +#include +#include + +#include "yesno.h" + +/* Read one line from standard input + and return nonzero if that line begins with y or Y, + otherwise return 0. */ + +int +yesno (void) +{ + /* We make some assumptions here: + a) leading white space in the response are not vital + b) the first 128 characters of the answer are enough (the rest can + be ignored) + I cannot think for a situation where this is not ok. --drepper@gnu */ + char buf[128]; + int len = 0; + int c; + + while ((c = getchar ()) != EOF && c != '\n') + if ((len > 0 && len < 127) || (len == 0 && !isspace (c))) + buf[len++] = c; + buf[len] = '\0'; + + return rpmatch (buf) == 1; +} diff --git a/lib/yesno.h b/lib/yesno.h new file mode 100644 index 0000000..ce12749 --- /dev/null +++ b/lib/yesno.h @@ -0,0 +1,23 @@ +/* Copyright (C) 2004 Thorsten Kukuk + Author: Thorsten Kukuk + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License version 2 as + published by the Free Software Foundation. + + 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ + +#ifndef __YESNO_H__ +#define __YESNO_H__ + +extern int yesno (void); + +#endif + diff --git a/lib/yppasswd.h b/lib/yppasswd.h new file mode 100644 index 0000000..186e771 --- /dev/null +++ b/lib/yppasswd.h @@ -0,0 +1,47 @@ +/* Copyright (C) 2002 Thorsten Kukuk + Author: Thorsten Kukuk + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License version 2 as + published by the Free Software Foundation. + + 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ + +#ifndef __YPPASSWD_H__ +#define __YPPASSWD_H__ + +#include + +struct xpasswd { + char *pw_name; + char *pw_passwd; + int pw_uid; + int pw_gid; + char *pw_gecos; + char *pw_dir; + char *pw_shell; +}; +typedef struct xpasswd xpasswd; + +struct yppasswd { + char *oldpass; + xpasswd newpw; +}; +typedef struct yppasswd yppasswd; + +#define YPPASSWDPROG ((u_long)100009) +#define YPPASSWDVERS ((u_long)1) + +#define YPPASSWDPROC_UPDATE ((u_long)1) + +extern bool_t xdr_xpasswd (XDR *, xpasswd*); +extern bool_t xdr_yppasswd (XDR *, yppasswd*); + +#endif /* !__YPPASSWD_H__ */ diff --git a/lib/yppasswd_xdr.c b/lib/yppasswd_xdr.c new file mode 100644 index 0000000..c6fc9de --- /dev/null +++ b/lib/yppasswd_xdr.c @@ -0,0 +1,52 @@ +/* Copyright (C) 2002 Thorsten Kukuk + Author: Thorsten Kukuk + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License version 2 as + published by the Free Software Foundation. + + 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ + +#ifdef HAVE_CONFIG_H +#include +#endif + +#include +#include "yppasswd.h" + +static bool_t +xdr_passwd (XDR *xdrs, xpasswd *objp) +{ + if (!xdr_string (xdrs, &objp->pw_name, ~0)) + return FALSE; + if (!xdr_string (xdrs, &objp->pw_passwd, ~0)) + return FALSE; + if (!xdr_int (xdrs, &objp->pw_uid)) + return FALSE; + if (!xdr_int (xdrs, &objp->pw_gid)) + return FALSE; + if (!xdr_string (xdrs, &objp->pw_gecos, ~0)) + return FALSE; + if (!xdr_string (xdrs, &objp->pw_dir, ~0)) + return FALSE; + if (!xdr_string (xdrs, &objp->pw_shell, ~0)) + return FALSE; + return TRUE; +} + +bool_t +xdr_yppasswd (XDR *xdrs, yppasswd *objp) +{ + if (!xdr_string (xdrs, &objp->oldpass, ~0)) + return FALSE; + if (!xdr_passwd (xdrs, &objp->newpw)) + return FALSE; + return TRUE; +} diff --git a/ltmain.sh b/ltmain.sh new file mode 100755 index 0000000..b36c4ad --- /dev/null +++ b/ltmain.sh @@ -0,0 +1,8406 @@ +# Generated from ltmain.m4sh. + +# ltmain.sh (GNU libtool) 2.2.6 +# Written by Gordon Matzigkeit , 1996 + +# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, 2006, 2007 2008 Free Software Foundation, Inc. +# This is free software; see the source for copying conditions. There is NO +# warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + +# GNU Libtool 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. +# +# As a special exception to the GNU General Public License, +# if you distribute this file as part of a program or library that +# is built using GNU Libtool, you may include this file under the +# same distribution terms that you use for the rest of that program. +# +# GNU Libtool 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 GNU Libtool; see the file COPYING. If not, a copy +# can be downloaded from http://www.gnu.org/licenses/gpl.html, +# or obtained by writing to the Free Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + +# Usage: $progname [OPTION]... [MODE-ARG]... +# +# Provide generalized library-building support services. +# +# --config show all configuration variables +# --debug enable verbose shell tracing +# -n, --dry-run display commands without modifying any files +# --features display basic configuration information and exit +# --mode=MODE use operation mode MODE +# --preserve-dup-deps don't remove duplicate dependency libraries +# --quiet, --silent don't print informational messages +# --tag=TAG use configuration variables from tag TAG +# -v, --verbose print informational messages (default) +# --version print version information +# -h, --help print short or long help message +# +# MODE must be one of the following: +# +# clean remove files from the build directory +# compile compile a source file into a libtool object +# execute automatically set library path, then run a program +# finish complete the installation of libtool libraries +# install install libraries or executables +# link create a library or an executable +# uninstall remove libraries from an installed directory +# +# MODE-ARGS vary depending on the MODE. +# Try `$progname --help --mode=MODE' for a more detailed description of MODE. +# +# When reporting a bug, please describe a test case to reproduce it and +# include the following information: +# +# host-triplet: $host +# shell: $SHELL +# compiler: $LTCC +# compiler flags: $LTCFLAGS +# linker: $LD (gnu? $with_gnu_ld) +# $progname: (GNU libtool) 2.2.6 +# automake: $automake_version +# autoconf: $autoconf_version +# +# Report bugs to . + +PROGRAM=ltmain.sh +PACKAGE=libtool +VERSION=2.2.6 +TIMESTAMP="" +package_revision=1.3012 + +# Be Bourne compatible +if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then + emulate sh + NULLCMD=: + # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which + # is contrary to our usage. Disable this feature. + alias -g '${1+"$@"}'='"$@"' + setopt NO_GLOB_SUBST +else + case `(set -o) 2>/dev/null` in *posix*) set -o posix;; esac +fi +BIN_SH=xpg4; export BIN_SH # for Tru64 +DUALCASE=1; export DUALCASE # for MKS sh + +# NLS nuisances: We save the old values to restore during execute mode. +# Only set LANG and LC_ALL to C if already set. +# These must not be set unconditionally because not all systems understand +# e.g. LANG=C (notably SCO). +lt_user_locale= +lt_safe_locale= +for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES +do + eval "if test \"\${$lt_var+set}\" = set; then + save_$lt_var=\$$lt_var + $lt_var=C + export $lt_var + lt_user_locale=\"$lt_var=\\\$save_\$lt_var; \$lt_user_locale\" + lt_safe_locale=\"$lt_var=C; \$lt_safe_locale\" + fi" +done + +$lt_unset CDPATH + + + + + +: ${CP="cp -f"} +: ${ECHO="echo"} +: ${EGREP="/usr/bin/grep -E"} +: ${FGREP="/usr/bin/grep -F"} +: ${GREP="/usr/bin/grep"} +: ${LN_S="ln -s"} +: ${MAKE="make"} +: ${MKDIR="mkdir"} +: ${MV="mv -f"} +: ${RM="rm -f"} +: ${SED="/opt/local/bin/gsed"} +: ${SHELL="${CONFIG_SHELL-/bin/sh}"} +: ${Xsed="$SED -e 1s/^X//"} + +# Global variables: +EXIT_SUCCESS=0 +EXIT_FAILURE=1 +EXIT_MISMATCH=63 # $? = 63 is used to indicate version mismatch to missing. +EXIT_SKIP=77 # $? = 77 is used to indicate a skipped test to automake. + +exit_status=$EXIT_SUCCESS + +# Make sure IFS has a sensible default +lt_nl=' +' +IFS=" $lt_nl" + +dirname="s,/[^/]*$,," +basename="s,^.*/,," + +# func_dirname_and_basename file append nondir_replacement +# perform func_basename and func_dirname in a single function +# call: +# dirname: Compute the dirname of FILE. If nonempty, +# add APPEND to the result, otherwise set result +# to NONDIR_REPLACEMENT. +# value returned in "$func_dirname_result" +# basename: Compute filename of FILE. +# value retuned in "$func_basename_result" +# Implementation must be kept synchronized with func_dirname +# and func_basename. For efficiency, we do not delegate to +# those functions but instead duplicate the functionality here. +func_dirname_and_basename () +{ + # Extract subdirectory from the argument. + func_dirname_result=`$ECHO "X${1}" | $Xsed -e "$dirname"` + if test "X$func_dirname_result" = "X${1}"; then + func_dirname_result="${3}" + else + func_dirname_result="$func_dirname_result${2}" + fi + func_basename_result=`$ECHO "X${1}" | $Xsed -e "$basename"` +} + +# Generated shell functions inserted here. + +# Work around backward compatibility issue on IRIX 6.5. On IRIX 6.4+, sh +# is ksh but when the shell is invoked as "sh" and the current value of +# the _XPG environment variable is not equal to 1 (one), the special +# positional parameter $0, within a function call, is the name of the +# function. +progpath="$0" + +# The name of this program: +# In the unlikely event $progname began with a '-', it would play havoc with +# func_echo (imagine progname=-n), so we prepend ./ in that case: +func_dirname_and_basename "$progpath" +progname=$func_basename_result +case $progname in + -*) progname=./$progname ;; +esac + +# Make sure we have an absolute path for reexecution: +case $progpath in + [\\/]*|[A-Za-z]:\\*) ;; + *[\\/]*) + progdir=$func_dirname_result + progdir=`cd "$progdir" && pwd` + progpath="$progdir/$progname" + ;; + *) + save_IFS="$IFS" + IFS=: + for progdir in $PATH; do + IFS="$save_IFS" + test -x "$progdir/$progname" && break + done + IFS="$save_IFS" + test -n "$progdir" || progdir=`pwd` + progpath="$progdir/$progname" + ;; +esac + +# Sed substitution that helps us do robust quoting. It backslashifies +# metacharacters that are still active within double-quoted strings. +Xsed="${SED}"' -e 1s/^X//' +sed_quote_subst='s/\([`"$\\]\)/\\\1/g' + +# Same as above, but do not quote variable references. +double_quote_subst='s/\(["`\\]\)/\\\1/g' + +# Re-`\' parameter expansions in output of double_quote_subst that were +# `\'-ed in input to the same. If an odd number of `\' preceded a '$' +# in input to double_quote_subst, that '$' was protected from expansion. +# Since each input `\' is now two `\'s, look for any number of runs of +# four `\'s followed by two `\'s and then a '$'. `\' that '$'. +bs='\\' +bs2='\\\\' +bs4='\\\\\\\\' +dollar='\$' +sed_double_backslash="\ + s/$bs4/&\\ +/g + s/^$bs2$dollar/$bs&/ + s/\\([^$bs]\\)$bs2$dollar/\\1$bs2$bs$dollar/g + s/\n//g" + +# Standard options: +opt_dry_run=false +opt_help=false +opt_quiet=false +opt_verbose=false +opt_warning=: + +# func_echo arg... +# Echo program name prefixed message, along with the current mode +# name if it has been set yet. +func_echo () +{ + $ECHO "$progname${mode+: }$mode: $*" +} + +# func_verbose arg... +# Echo program name prefixed message in verbose mode only. +func_verbose () +{ + $opt_verbose && func_echo ${1+"$@"} + + # A bug in bash halts the script if the last line of a function + # fails when set -e is in force, so we need another command to + # work around that: + : +} + +# func_error arg... +# Echo program name prefixed message to standard error. +func_error () +{ + $ECHO "$progname${mode+: }$mode: "${1+"$@"} 1>&2 +} + +# func_warning arg... +# Echo program name prefixed warning message to standard error. +func_warning () +{ + $opt_warning && $ECHO "$progname${mode+: }$mode: warning: "${1+"$@"} 1>&2 + + # bash bug again: + : +} + +# func_fatal_error arg... +# Echo program name prefixed message to standard error, and exit. +func_fatal_error () +{ + func_error ${1+"$@"} + exit $EXIT_FAILURE +} + +# func_fatal_help arg... +# Echo program name prefixed message to standard error, followed by +# a help hint, and exit. +func_fatal_help () +{ + func_error ${1+"$@"} + func_fatal_error "$help" +} +help="Try \`$progname --help' for more information." ## default + + +# func_grep expression filename +# Check whether EXPRESSION matches any line of FILENAME, without output. +func_grep () +{ + $GREP "$1" "$2" >/dev/null 2>&1 +} + + +# func_mkdir_p directory-path +# Make sure the entire path to DIRECTORY-PATH is available. +func_mkdir_p () +{ + my_directory_path="$1" + my_dir_list= + + if test -n "$my_directory_path" && test "$opt_dry_run" != ":"; then + + # Protect directory names starting with `-' + case $my_directory_path in + -*) my_directory_path="./$my_directory_path" ;; + esac + + # While some portion of DIR does not yet exist... + while test ! -d "$my_directory_path"; do + # ...make a list in topmost first order. Use a colon delimited + # list incase some portion of path contains whitespace. + my_dir_list="$my_directory_path:$my_dir_list" + + # If the last portion added has no slash in it, the list is done + case $my_directory_path in */*) ;; *) break ;; esac + + # ...otherwise throw away the child directory and loop + my_directory_path=`$ECHO "X$my_directory_path" | $Xsed -e "$dirname"` + done + my_dir_list=`$ECHO "X$my_dir_list" | $Xsed -e 's,:*$,,'` + + save_mkdir_p_IFS="$IFS"; IFS=':' + for my_dir in $my_dir_list; do + IFS="$save_mkdir_p_IFS" + # mkdir can fail with a `File exist' error if two processes + # try to create one of the directories concurrently. Don't + # stop in that case! + $MKDIR "$my_dir" 2>/dev/null || : + done + IFS="$save_mkdir_p_IFS" + + # Bail out if we (or some other process) failed to create a directory. + test -d "$my_directory_path" || \ + func_fatal_error "Failed to create \`$1'" + fi +} + + +# func_mktempdir [string] +# Make a temporary directory that won't clash with other running +# libtool processes, and avoids race conditions if possible. If +# given, STRING is the basename for that directory. +func_mktempdir () +{ + my_template="${TMPDIR-/tmp}/${1-$progname}" + + if test "$opt_dry_run" = ":"; then + # Return a directory name, but don't create it in dry-run mode + my_tmpdir="${my_template}-$$" + else + + # If mktemp works, use that first and foremost + my_tmpdir=`mktemp -d "${my_template}-XXXXXXXX" 2>/dev/null` + + if test ! -d "$my_tmpdir"; then + # Failing that, at least try and use $RANDOM to avoid a race + my_tmpdir="${my_template}-${RANDOM-0}$$" + + save_mktempdir_umask=`umask` + umask 0077 + $MKDIR "$my_tmpdir" + umask $save_mktempdir_umask + fi + + # If we're not in dry-run mode, bomb out on failure + test -d "$my_tmpdir" || \ + func_fatal_error "cannot create temporary directory \`$my_tmpdir'" + fi + + $ECHO "X$my_tmpdir" | $Xsed +} + + +# func_quote_for_eval arg +# Aesthetically quote ARG to be evaled later. +# This function returns two values: FUNC_QUOTE_FOR_EVAL_RESULT +# is double-quoted, suitable for a subsequent eval, whereas +# FUNC_QUOTE_FOR_EVAL_UNQUOTED_RESULT has merely all characters +# which are still active within double quotes backslashified. +func_quote_for_eval () +{ + case $1 in + *[\\\`\"\$]*) + func_quote_for_eval_unquoted_result=`$ECHO "X$1" | $Xsed -e "$sed_quote_subst"` ;; + *) + func_quote_for_eval_unquoted_result="$1" ;; + esac + + case $func_quote_for_eval_unquoted_result in + # Double-quote args containing shell metacharacters to delay + # word splitting, command substitution and and variable + # expansion for a subsequent eval. + # Many Bourne shells cannot handle close brackets correctly + # in scan sets, so we specify it separately. + *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") + func_quote_for_eval_result="\"$func_quote_for_eval_unquoted_result\"" + ;; + *) + func_quote_for_eval_result="$func_quote_for_eval_unquoted_result" + esac +} + + +# func_quote_for_expand arg +# Aesthetically quote ARG to be evaled later; same as above, +# but do not quote variable references. +func_quote_for_expand () +{ + case $1 in + *[\\\`\"]*) + my_arg=`$ECHO "X$1" | $Xsed \ + -e "$double_quote_subst" -e "$sed_double_backslash"` ;; + *) + my_arg="$1" ;; + esac + + case $my_arg in + # Double-quote args containing shell metacharacters to delay + # word splitting and command substitution for a subsequent eval. + # Many Bourne shells cannot handle close brackets correctly + # in scan sets, so we specify it separately. + *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") + my_arg="\"$my_arg\"" + ;; + esac + + func_quote_for_expand_result="$my_arg" +} + + +# func_show_eval cmd [fail_exp] +# Unless opt_silent is true, then output CMD. Then, if opt_dryrun is +# not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP +# is given, then evaluate it. +func_show_eval () +{ + my_cmd="$1" + my_fail_exp="${2-:}" + + ${opt_silent-false} || { + func_quote_for_expand "$my_cmd" + eval "func_echo $func_quote_for_expand_result" + } + + if ${opt_dry_run-false}; then :; else + eval "$my_cmd" + my_status=$? + if test "$my_status" -eq 0; then :; else + eval "(exit $my_status); $my_fail_exp" + fi + fi +} + + +# func_show_eval_locale cmd [fail_exp] +# Unless opt_silent is true, then output CMD. Then, if opt_dryrun is +# not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP +# is given, then evaluate it. Use the saved locale for evaluation. +func_show_eval_locale () +{ + my_cmd="$1" + my_fail_exp="${2-:}" + + ${opt_silent-false} || { + func_quote_for_expand "$my_cmd" + eval "func_echo $func_quote_for_expand_result" + } + + if ${opt_dry_run-false}; then :; else + eval "$lt_user_locale + $my_cmd" + my_status=$? + eval "$lt_safe_locale" + if test "$my_status" -eq 0; then :; else + eval "(exit $my_status); $my_fail_exp" + fi + fi +} + + + + + +# func_version +# Echo version message to standard output and exit. +func_version () +{ + $SED -n '/^# '$PROGRAM' (GNU /,/# warranty; / { + s/^# // + s/^# *$// + s/\((C)\)[ 0-9,-]*\( [1-9][0-9]*\)/\1\2/ + p + }' < "$progpath" + exit $? +} + +# func_usage +# Echo short help message to standard output and exit. +func_usage () +{ + $SED -n '/^# Usage:/,/# -h/ { + s/^# // + s/^# *$// + s/\$progname/'$progname'/ + p + }' < "$progpath" + $ECHO + $ECHO "run \`$progname --help | more' for full usage" + exit $? +} + +# func_help +# Echo long help message to standard output and exit. +func_help () +{ + $SED -n '/^# Usage:/,/# Report bugs to/ { + s/^# // + s/^# *$// + s*\$progname*'$progname'* + s*\$host*'"$host"'* + s*\$SHELL*'"$SHELL"'* + s*\$LTCC*'"$LTCC"'* + s*\$LTCFLAGS*'"$LTCFLAGS"'* + s*\$LD*'"$LD"'* + s/\$with_gnu_ld/'"$with_gnu_ld"'/ + s/\$automake_version/'"`(automake --version) 2>/dev/null |$SED 1q`"'/ + s/\$autoconf_version/'"`(autoconf --version) 2>/dev/null |$SED 1q`"'/ + p + }' < "$progpath" + exit $? +} + +# func_missing_arg argname +# Echo program name prefixed message to standard error and set global +# exit_cmd. +func_missing_arg () +{ + func_error "missing argument for $1" + exit_cmd=exit +} + +exit_cmd=: + + + + + +# Check that we have a working $ECHO. +if test "X$1" = X--no-reexec; then + # Discard the --no-reexec flag, and continue. + shift +elif test "X$1" = X--fallback-echo; then + # Avoid inline document here, it may be left over + : +elif test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t'; then + # Yippee, $ECHO works! + : +else + # Restart under the correct shell, and then maybe $ECHO will work. + exec $SHELL "$progpath" --no-reexec ${1+"$@"} +fi + +if test "X$1" = X--fallback-echo; then + # used as fallback echo + shift + cat </dev/null 2>&1; then + taglist="$taglist $tagname" + + # Evaluate the configuration. Be careful to quote the path + # and the sed script, to avoid splitting on whitespace, but + # also don't use non-portable quotes within backquotes within + # quotes we have to do it in 2 steps: + extractedcf=`$SED -n -e "$sed_extractcf" < "$progpath"` + eval "$extractedcf" + else + func_error "ignoring unknown tag $tagname" + fi + ;; + esac +} + +# Parse options once, thoroughly. This comes as soon as possible in +# the script to make things like `libtool --version' happen quickly. +{ + + # Shorthand for --mode=foo, only valid as the first argument + case $1 in + clean|clea|cle|cl) + shift; set dummy --mode clean ${1+"$@"}; shift + ;; + compile|compil|compi|comp|com|co|c) + shift; set dummy --mode compile ${1+"$@"}; shift + ;; + execute|execut|execu|exec|exe|ex|e) + shift; set dummy --mode execute ${1+"$@"}; shift + ;; + finish|finis|fini|fin|fi|f) + shift; set dummy --mode finish ${1+"$@"}; shift + ;; + install|instal|insta|inst|ins|in|i) + shift; set dummy --mode install ${1+"$@"}; shift + ;; + link|lin|li|l) + shift; set dummy --mode link ${1+"$@"}; shift + ;; + uninstall|uninstal|uninsta|uninst|unins|unin|uni|un|u) + shift; set dummy --mode uninstall ${1+"$@"}; shift + ;; + esac + + # Parse non-mode specific arguments: + while test "$#" -gt 0; do + opt="$1" + shift + + case $opt in + --config) func_config ;; + + --debug) preserve_args="$preserve_args $opt" + func_echo "enabling shell trace mode" + opt_debug='set -x' + $opt_debug + ;; + + -dlopen) test "$#" -eq 0 && func_missing_arg "$opt" && break + execute_dlfiles="$execute_dlfiles $1" + shift + ;; + + --dry-run | -n) opt_dry_run=: ;; + --features) func_features ;; + --finish) mode="finish" ;; + + --mode) test "$#" -eq 0 && func_missing_arg "$opt" && break + case $1 in + # Valid mode arguments: + clean) ;; + compile) ;; + execute) ;; + finish) ;; + install) ;; + link) ;; + relink) ;; + uninstall) ;; + + # Catch anything else as an error + *) func_error "invalid argument for $opt" + exit_cmd=exit + break + ;; + esac + + mode="$1" + shift + ;; + + --preserve-dup-deps) + opt_duplicate_deps=: ;; + + --quiet|--silent) preserve_args="$preserve_args $opt" + opt_silent=: + ;; + + --verbose| -v) preserve_args="$preserve_args $opt" + opt_silent=false + ;; + + --tag) test "$#" -eq 0 && func_missing_arg "$opt" && break + preserve_args="$preserve_args $opt $1" + func_enable_tag "$1" # tagname is set here + shift + ;; + + # Separate optargs to long options: + -dlopen=*|--mode=*|--tag=*) + func_opt_split "$opt" + set dummy "$func_opt_split_opt" "$func_opt_split_arg" ${1+"$@"} + shift + ;; + + -\?|-h) func_usage ;; + --help) opt_help=: ;; + --version) func_version ;; + + -*) func_fatal_help "unrecognized option \`$opt'" ;; + + *) nonopt="$opt" + break + ;; + esac + done + + + case $host in + *cygwin* | *mingw* | *pw32* | *cegcc*) + # don't eliminate duplications in $postdeps and $predeps + opt_duplicate_compiler_generated_deps=: + ;; + *) + opt_duplicate_compiler_generated_deps=$opt_duplicate_deps + ;; + esac + + # Having warned about all mis-specified options, bail out if + # anything was wrong. + $exit_cmd $EXIT_FAILURE +} + +# func_check_version_match +# Ensure that we are using m4 macros, and libtool script from the same +# release of libtool. +func_check_version_match () +{ + if test "$package_revision" != "$macro_revision"; then + if test "$VERSION" != "$macro_version"; then + if test -z "$macro_version"; then + cat >&2 <<_LT_EOF +$progname: Version mismatch error. This is $PACKAGE $VERSION, but the +$progname: definition of this LT_INIT comes from an older release. +$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION +$progname: and run autoconf again. +_LT_EOF + else + cat >&2 <<_LT_EOF +$progname: Version mismatch error. This is $PACKAGE $VERSION, but the +$progname: definition of this LT_INIT comes from $PACKAGE $macro_version. +$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION +$progname: and run autoconf again. +_LT_EOF + fi + else + cat >&2 <<_LT_EOF +$progname: Version mismatch error. This is $PACKAGE $VERSION, revision $package_revision, +$progname: but the definition of this LT_INIT comes from revision $macro_revision. +$progname: You should recreate aclocal.m4 with macros from revision $package_revision +$progname: of $PACKAGE $VERSION and run autoconf again. +_LT_EOF + fi + + exit $EXIT_MISMATCH + fi +} + + +## ----------- ## +## Main. ## +## ----------- ## + +$opt_help || { + # Sanity checks first: + func_check_version_match + + if test "$build_libtool_libs" != yes && test "$build_old_libs" != yes; then + func_fatal_configuration "not configured to build any kind of library" + fi + + test -z "$mode" && func_fatal_error "error: you must specify a MODE." + + + # Darwin sucks + eval std_shrext=\"$shrext_cmds\" + + + # Only execute mode is allowed to have -dlopen flags. + if test -n "$execute_dlfiles" && test "$mode" != execute; then + func_error "unrecognized option \`-dlopen'" + $ECHO "$help" 1>&2 + exit $EXIT_FAILURE + fi + + # Change the help message to a mode-specific one. + generic_help="$help" + help="Try \`$progname --help --mode=$mode' for more information." +} + + +# func_lalib_p file +# True iff FILE is a libtool `.la' library or `.lo' object file. +# This function is only a basic sanity check; it will hardly flush out +# determined imposters. +func_lalib_p () +{ + test -f "$1" && + $SED -e 4q "$1" 2>/dev/null \ + | $GREP "^# Generated by .*$PACKAGE" > /dev/null 2>&1 +} + +# func_lalib_unsafe_p file +# True iff FILE is a libtool `.la' library or `.lo' object file. +# This function implements the same check as func_lalib_p without +# resorting to external programs. To this end, it redirects stdin and +# closes it afterwards, without saving the original file descriptor. +# As a safety measure, use it only where a negative result would be +# fatal anyway. Works if `file' does not exist. +func_lalib_unsafe_p () +{ + lalib_p=no + if test -f "$1" && test -r "$1" && exec 5<&0 <"$1"; then + for lalib_p_l in 1 2 3 4 + do + read lalib_p_line + case "$lalib_p_line" in + \#\ Generated\ by\ *$PACKAGE* ) lalib_p=yes; break;; + esac + done + exec 0<&5 5<&- + fi + test "$lalib_p" = yes +} + +# func_ltwrapper_script_p file +# True iff FILE is a libtool wrapper script +# This function is only a basic sanity check; it will hardly flush out +# determined imposters. +func_ltwrapper_script_p () +{ + func_lalib_p "$1" +} + +# func_ltwrapper_executable_p file +# True iff FILE is a libtool wrapper executable +# This function is only a basic sanity check; it will hardly flush out +# determined imposters. +func_ltwrapper_executable_p () +{ + func_ltwrapper_exec_suffix= + case $1 in + *.exe) ;; + *) func_ltwrapper_exec_suffix=.exe ;; + esac + $GREP "$magic_exe" "$1$func_ltwrapper_exec_suffix" >/dev/null 2>&1 +} + +# func_ltwrapper_scriptname file +# Assumes file is an ltwrapper_executable +# uses $file to determine the appropriate filename for a +# temporary ltwrapper_script. +func_ltwrapper_scriptname () +{ + func_ltwrapper_scriptname_result="" + if func_ltwrapper_executable_p "$1"; then + func_dirname_and_basename "$1" "" "." + func_stripname '' '.exe' "$func_basename_result" + func_ltwrapper_scriptname_result="$func_dirname_result/$objdir/${func_stripname_result}_ltshwrapper" + fi +} + +# func_ltwrapper_p file +# True iff FILE is a libtool wrapper script or wrapper executable +# This function is only a basic sanity check; it will hardly flush out +# determined imposters. +func_ltwrapper_p () +{ + func_ltwrapper_script_p "$1" || func_ltwrapper_executable_p "$1" +} + + +# func_execute_cmds commands fail_cmd +# Execute tilde-delimited COMMANDS. +# If FAIL_CMD is given, eval that upon failure. +# FAIL_CMD may read-access the current command in variable CMD! +func_execute_cmds () +{ + $opt_debug + save_ifs=$IFS; IFS='~' + for cmd in $1; do + IFS=$save_ifs + eval cmd=\"$cmd\" + func_show_eval "$cmd" "${2-:}" + done + IFS=$save_ifs +} + + +# func_source file +# Source FILE, adding directory component if necessary. +# Note that it is not necessary on cygwin/mingw to append a dot to +# FILE even if both FILE and FILE.exe exist: automatic-append-.exe +# behavior happens only for exec(3), not for open(2)! Also, sourcing +# `FILE.' does not work on cygwin managed mounts. +func_source () +{ + $opt_debug + case $1 in + */* | *\\*) . "$1" ;; + *) . "./$1" ;; + esac +} + + +# func_infer_tag arg +# Infer tagged configuration to use if any are available and +# if one wasn't chosen via the "--tag" command line option. +# Only attempt this if the compiler in the base compile +# command doesn't match the default compiler. +# arg is usually of the form 'gcc ...' +func_infer_tag () +{ + $opt_debug + if test -n "$available_tags" && test -z "$tagname"; then + CC_quoted= + for arg in $CC; do + func_quote_for_eval "$arg" + CC_quoted="$CC_quoted $func_quote_for_eval_result" + done + case $@ in + # Blanks in the command may have been stripped by the calling shell, + # but not from the CC environment variable when configure was run. + " $CC "* | "$CC "* | " `$ECHO $CC` "* | "`$ECHO $CC` "* | " $CC_quoted"* | "$CC_quoted "* | " `$ECHO $CC_quoted` "* | "`$ECHO $CC_quoted` "*) ;; + # Blanks at the start of $base_compile will cause this to fail + # if we don't check for them as well. + *) + for z in $available_tags; do + if $GREP "^# ### BEGIN LIBTOOL TAG CONFIG: $z$" < "$progpath" > /dev/null; then + # Evaluate the configuration. + eval "`${SED} -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$z'$/,/^# ### END LIBTOOL TAG CONFIG: '$z'$/p' < $progpath`" + CC_quoted= + for arg in $CC; do + # Double-quote args containing other shell metacharacters. + func_quote_for_eval "$arg" + CC_quoted="$CC_quoted $func_quote_for_eval_result" + done + case "$@ " in + " $CC "* | "$CC "* | " `$ECHO $CC` "* | "`$ECHO $CC` "* | " $CC_quoted"* | "$CC_quoted "* | " `$ECHO $CC_quoted` "* | "`$ECHO $CC_quoted` "*) + # The compiler in the base compile command matches + # the one in the tagged configuration. + # Assume this is the tagged configuration we want. + tagname=$z + break + ;; + esac + fi + done + # If $tagname still isn't set, then no tagged configuration + # was found and let the user know that the "--tag" command + # line option must be used. + if test -z "$tagname"; then + func_echo "unable to infer tagged configuration" + func_fatal_error "specify a tag with \`--tag'" +# else +# func_verbose "using $tagname tagged configuration" + fi + ;; + esac + fi +} + + + +# func_write_libtool_object output_name pic_name nonpic_name +# Create a libtool object file (analogous to a ".la" file), +# but don't create it if we're doing a dry run. +func_write_libtool_object () +{ + write_libobj=${1} + if test "$build_libtool_libs" = yes; then + write_lobj=\'${2}\' + else + write_lobj=none + fi + + if test "$build_old_libs" = yes; then + write_oldobj=\'${3}\' + else + write_oldobj=none + fi + + $opt_dry_run || { + cat >${write_libobj}T <?"'"'"' &()|`$[]' \ + && func_warning "libobj name \`$libobj' may not contain shell special characters." + func_dirname_and_basename "$obj" "/" "" + objname="$func_basename_result" + xdir="$func_dirname_result" + lobj=${xdir}$objdir/$objname + + test -z "$base_compile" && \ + func_fatal_help "you must specify a compilation command" + + # Delete any leftover library objects. + if test "$build_old_libs" = yes; then + removelist="$obj $lobj $libobj ${libobj}T" + else + removelist="$lobj $libobj ${libobj}T" + fi + + # On Cygwin there's no "real" PIC flag so we must build both object types + case $host_os in + cygwin* | mingw* | pw32* | os2* | cegcc*) + pic_mode=default + ;; + esac + if test "$pic_mode" = no && test "$deplibs_check_method" != pass_all; then + # non-PIC code in shared libraries is not supported + pic_mode=default + fi + + # Calculate the filename of the output object if compiler does + # not support -o with -c + if test "$compiler_c_o" = no; then + output_obj=`$ECHO "X$srcfile" | $Xsed -e 's%^.*/%%' -e 's%\.[^.]*$%%'`.${objext} + lockfile="$output_obj.lock" + else + output_obj= + need_locks=no + lockfile= + fi + + # Lock this critical section if it is needed + # We use this script file to make the link, it avoids creating a new file + if test "$need_locks" = yes; then + until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do + func_echo "Waiting for $lockfile to be removed" + sleep 2 + done + elif test "$need_locks" = warn; then + if test -f "$lockfile"; then + $ECHO "\ +*** ERROR, $lockfile exists and contains: +`cat $lockfile 2>/dev/null` + +This indicates that another process is trying to use the same +temporary object file, and libtool could not work around it because +your compiler does not support \`-c' and \`-o' together. If you +repeat this compilation, it may succeed, by chance, but you had better +avoid parallel builds (make -j) in this platform, or get a better +compiler." + + $opt_dry_run || $RM $removelist + exit $EXIT_FAILURE + fi + removelist="$removelist $output_obj" + $ECHO "$srcfile" > "$lockfile" + fi + + $opt_dry_run || $RM $removelist + removelist="$removelist $lockfile" + trap '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' 1 2 15 + + if test -n "$fix_srcfile_path"; then + eval srcfile=\"$fix_srcfile_path\" + fi + func_quote_for_eval "$srcfile" + qsrcfile=$func_quote_for_eval_result + + # Only build a PIC object if we are building libtool libraries. + if test "$build_libtool_libs" = yes; then + # Without this assignment, base_compile gets emptied. + fbsd_hideous_sh_bug=$base_compile + + if test "$pic_mode" != no; then + command="$base_compile $qsrcfile $pic_flag" + else + # Don't build PIC code + command="$base_compile $qsrcfile" + fi + + func_mkdir_p "$xdir$objdir" + + if test -z "$output_obj"; then + # Place PIC objects in $objdir + command="$command -o $lobj" + fi + + func_show_eval_locale "$command" \ + 'test -n "$output_obj" && $RM $removelist; exit $EXIT_FAILURE' + + if test "$need_locks" = warn && + test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then + $ECHO "\ +*** ERROR, $lockfile contains: +`cat $lockfile 2>/dev/null` + +but it should contain: +$srcfile + +This indicates that another process is trying to use the same +temporary object file, and libtool could not work around it because +your compiler does not support \`-c' and \`-o' together. If you +repeat this compilation, it may succeed, by chance, but you had better +avoid parallel builds (make -j) in this platform, or get a better +compiler." + + $opt_dry_run || $RM $removelist + exit $EXIT_FAILURE + fi + + # Just move the object if needed, then go on to compile the next one + if test -n "$output_obj" && test "X$output_obj" != "X$lobj"; then + func_show_eval '$MV "$output_obj" "$lobj"' \ + 'error=$?; $opt_dry_run || $RM $removelist; exit $error' + fi + + # Allow error messages only from the first compilation. + if test "$suppress_opt" = yes; then + suppress_output=' >/dev/null 2>&1' + fi + fi + + # Only build a position-dependent object if we build old libraries. + if test "$build_old_libs" = yes; then + if test "$pic_mode" != yes; then + # Don't build PIC code + command="$base_compile $qsrcfile$pie_flag" + else + command="$base_compile $qsrcfile $pic_flag" + fi + if test "$compiler_c_o" = yes; then + command="$command -o $obj" + fi + + # Suppress compiler output if we already did a PIC compilation. + command="$command$suppress_output" + func_show_eval_locale "$command" \ + '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' + + if test "$need_locks" = warn && + test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then + $ECHO "\ +*** ERROR, $lockfile contains: +`cat $lockfile 2>/dev/null` + +but it should contain: +$srcfile + +This indicates that another process is trying to use the same +temporary object file, and libtool could not work around it because +your compiler does not support \`-c' and \`-o' together. If you +repeat this compilation, it may succeed, by chance, but you had better +avoid parallel builds (make -j) in this platform, or get a better +compiler." + + $opt_dry_run || $RM $removelist + exit $EXIT_FAILURE + fi + + # Just move the object if needed + if test -n "$output_obj" && test "X$output_obj" != "X$obj"; then + func_show_eval '$MV "$output_obj" "$obj"' \ + 'error=$?; $opt_dry_run || $RM $removelist; exit $error' + fi + fi + + $opt_dry_run || { + func_write_libtool_object "$libobj" "$objdir/$objname" "$objname" + + # Unlock the critical section if it was locked + if test "$need_locks" != no; then + removelist=$lockfile + $RM "$lockfile" + fi + } + + exit $EXIT_SUCCESS +} + +$opt_help || { +test "$mode" = compile && func_mode_compile ${1+"$@"} +} + +func_mode_help () +{ + # We need to display help for each of the modes. + case $mode in + "") + # Generic help is extracted from the usage comments + # at the start of this file. + func_help + ;; + + clean) + $ECHO \ +"Usage: $progname [OPTION]... --mode=clean RM [RM-OPTION]... FILE... + +Remove files from the build directory. + +RM is the name of the program to use to delete files associated with each FILE +(typically \`/bin/rm'). RM-OPTIONS are options (such as \`-f') to be passed +to RM. + +If FILE is a libtool library, object or program, all the files associated +with it are deleted. Otherwise, only FILE itself is deleted using RM." + ;; + + compile) + $ECHO \ +"Usage: $progname [OPTION]... --mode=compile COMPILE-COMMAND... SOURCEFILE + +Compile a source file into a libtool library object. + +This mode accepts the following additional options: + + -o OUTPUT-FILE set the output file name to OUTPUT-FILE + -no-suppress do not suppress compiler output for multiple passes + -prefer-pic try to building PIC objects only + -prefer-non-pic try to building non-PIC objects only + -shared do not build a \`.o' file suitable for static linking + -static only build a \`.o' file suitable for static linking + +COMPILE-COMMAND is a command to be used in creating a \`standard' object file +from the given SOURCEFILE. + +The output file name is determined by removing the directory component from +SOURCEFILE, then substituting the C source code suffix \`.c' with the +library object suffix, \`.lo'." + ;; + + execute) + $ECHO \ +"Usage: $progname [OPTION]... --mode=execute COMMAND [ARGS]... + +Automatically set library path, then run a program. + +This mode accepts the following additional options: + + -dlopen FILE add the directory containing FILE to the library path + +This mode sets the library path environment variable according to \`-dlopen' +flags. + +If any of the ARGS are libtool executable wrappers, then they are translated +into their corresponding uninstalled binary, and any of their required library +directories are added to the library path. + +Then, COMMAND is executed, with ARGS as arguments." + ;; + + finish) + $ECHO \ +"Usage: $progname [OPTION]... --mode=finish [LIBDIR]... + +Complete the installation of libtool libraries. + +Each LIBDIR is a directory that contains libtool libraries. + +The commands that this mode executes may require superuser privileges. Use +the \`--dry-run' option if you just want to see what would be executed." + ;; + + install) + $ECHO \ +"Usage: $progname [OPTION]... --mode=install INSTALL-COMMAND... + +Install executables or libraries. + +INSTALL-COMMAND is the installation command. The first component should be +either the \`install' or \`cp' program. + +The following components of INSTALL-COMMAND are treated specially: + + -inst-prefix PREFIX-DIR Use PREFIX-DIR as a staging area for installation + +The rest of the components are interpreted as arguments to that command (only +BSD-compatible install options are recognized)." + ;; + + link) + $ECHO \ +"Usage: $progname [OPTION]... --mode=link LINK-COMMAND... + +Link object files or libraries together to form another library, or to +create an executable program. + +LINK-COMMAND is a command using the C compiler that you would use to create +a program from several object files. + +The following components of LINK-COMMAND are treated specially: + + -all-static do not do any dynamic linking at all + -avoid-version do not add a version suffix if possible + -dlopen FILE \`-dlpreopen' FILE if it cannot be dlopened at runtime + -dlpreopen FILE link in FILE and add its symbols to lt_preloaded_symbols + -export-dynamic allow symbols from OUTPUT-FILE to be resolved with dlsym(3) + -export-symbols SYMFILE + try to export only the symbols listed in SYMFILE + -export-symbols-regex REGEX + try to export only the symbols matching REGEX + -LLIBDIR search LIBDIR for required installed libraries + -lNAME OUTPUT-FILE requires the installed library libNAME + -module build a library that can dlopened + -no-fast-install disable the fast-install mode + -no-install link a not-installable executable + -no-undefined declare that a library does not refer to external symbols + -o OUTPUT-FILE create OUTPUT-FILE from the specified objects + -objectlist FILE Use a list of object files found in FILE to specify objects + -precious-files-regex REGEX + don't remove output files matching REGEX + -release RELEASE specify package release information + -rpath LIBDIR the created library will eventually be installed in LIBDIR + -R[ ]LIBDIR add LIBDIR to the runtime path of programs and libraries + -shared only do dynamic linking of libtool libraries + -shrext SUFFIX override the standard shared library file extension + -static do not do any dynamic linking of uninstalled libtool libraries + -static-libtool-libs + do not do any dynamic linking of libtool libraries + -version-info CURRENT[:REVISION[:AGE]] + specify library version info [each variable defaults to 0] + -weak LIBNAME declare that the target provides the LIBNAME interface + +All other options (arguments beginning with \`-') are ignored. + +Every other argument is treated as a filename. Files ending in \`.la' are +treated as uninstalled libtool libraries, other files are standard or library +object files. + +If the OUTPUT-FILE ends in \`.la', then a libtool library is created, +only library objects (\`.lo' files) may be specified, and \`-rpath' is +required, except when creating a convenience library. + +If OUTPUT-FILE ends in \`.a' or \`.lib', then a standard library is created +using \`ar' and \`ranlib', or on Windows using \`lib'. + +If OUTPUT-FILE ends in \`.lo' or \`.${objext}', then a reloadable object file +is created, otherwise an executable program is created." + ;; + + uninstall) + $ECHO \ +"Usage: $progname [OPTION]... --mode=uninstall RM [RM-OPTION]... FILE... + +Remove libraries from an installation directory. + +RM is the name of the program to use to delete files associated with each FILE +(typically \`/bin/rm'). RM-OPTIONS are options (such as \`-f') to be passed +to RM. + +If FILE is a libtool library, all the files associated with it are deleted. +Otherwise, only FILE itself is deleted using RM." + ;; + + *) + func_fatal_help "invalid operation mode \`$mode'" + ;; + esac + + $ECHO + $ECHO "Try \`$progname --help' for more information about other modes." + + exit $? +} + + # Now that we've collected a possible --mode arg, show help if necessary + $opt_help && func_mode_help + + +# func_mode_execute arg... +func_mode_execute () +{ + $opt_debug + # The first argument is the command name. + cmd="$nonopt" + test -z "$cmd" && \ + func_fatal_help "you must specify a COMMAND" + + # Handle -dlopen flags immediately. + for file in $execute_dlfiles; do + test -f "$file" \ + || func_fatal_help "\`$file' is not a file" + + dir= + case $file in + *.la) + # Check to see that this really is a libtool archive. + func_lalib_unsafe_p "$file" \ + || func_fatal_help "\`$lib' is not a valid libtool archive" + + # Read the libtool library. + dlname= + library_names= + func_source "$file" + + # Skip this library if it cannot be dlopened. + if test -z "$dlname"; then + # Warn if it was a shared library. + test -n "$library_names" && \ + func_warning "\`$file' was not linked with \`-export-dynamic'" + continue + fi + + func_dirname "$file" "" "." + dir="$func_dirname_result" + + if test -f "$dir/$objdir/$dlname"; then + dir="$dir/$objdir" + else + if test ! -f "$dir/$dlname"; then + func_fatal_error "cannot find \`$dlname' in \`$dir' or \`$dir/$objdir'" + fi + fi + ;; + + *.lo) + # Just add the directory containing the .lo file. + func_dirname "$file" "" "." + dir="$func_dirname_result" + ;; + + *) + func_warning "\`-dlopen' is ignored for non-libtool libraries and objects" + continue + ;; + esac + + # Get the absolute pathname. + absdir=`cd "$dir" && pwd` + test -n "$absdir" && dir="$absdir" + + # Now add the directory to shlibpath_var. + if eval "test -z \"\$$shlibpath_var\""; then + eval "$shlibpath_var=\"\$dir\"" + else + eval "$shlibpath_var=\"\$dir:\$$shlibpath_var\"" + fi + done + + # This variable tells wrapper scripts just to set shlibpath_var + # rather than running their programs. + libtool_execute_magic="$magic" + + # Check if any of the arguments is a wrapper script. + args= + for file + do + case $file in + -*) ;; + *) + # Do a test to see if this is really a libtool program. + if func_ltwrapper_script_p "$file"; then + func_source "$file" + # Transform arg to wrapped name. + file="$progdir/$program" + elif func_ltwrapper_executable_p "$file"; then + func_ltwrapper_scriptname "$file" + func_source "$func_ltwrapper_scriptname_result" + # Transform arg to wrapped name. + file="$progdir/$program" + fi + ;; + esac + # Quote arguments (to preserve shell metacharacters). + func_quote_for_eval "$file" + args="$args $func_quote_for_eval_result" + done + + if test "X$opt_dry_run" = Xfalse; then + if test -n "$shlibpath_var"; then + # Export the shlibpath_var. + eval "export $shlibpath_var" + fi + + # Restore saved environment variables + for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES + do + eval "if test \"\${save_$lt_var+set}\" = set; then + $lt_var=\$save_$lt_var; export $lt_var + else + $lt_unset $lt_var + fi" + done + + # Now prepare to actually exec the command. + exec_cmd="\$cmd$args" + else + # Display what would be done. + if test -n "$shlibpath_var"; then + eval "\$ECHO \"\$shlibpath_var=\$$shlibpath_var\"" + $ECHO "export $shlibpath_var" + fi + $ECHO "$cmd$args" + exit $EXIT_SUCCESS + fi +} + +test "$mode" = execute && func_mode_execute ${1+"$@"} + + +# func_mode_finish arg... +func_mode_finish () +{ + $opt_debug + libdirs="$nonopt" + admincmds= + + if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then + for dir + do + libdirs="$libdirs $dir" + done + + for libdir in $libdirs; do + if test -n "$finish_cmds"; then + # Do each command in the finish commands. + func_execute_cmds "$finish_cmds" 'admincmds="$admincmds +'"$cmd"'"' + fi + if test -n "$finish_eval"; then + # Do the single finish_eval. + eval cmds=\"$finish_eval\" + $opt_dry_run || eval "$cmds" || admincmds="$admincmds + $cmds" + fi + done + fi + + # Exit here if they wanted silent mode. + $opt_silent && exit $EXIT_SUCCESS + + $ECHO "X----------------------------------------------------------------------" | $Xsed + $ECHO "Libraries have been installed in:" + for libdir in $libdirs; do + $ECHO " $libdir" + done + $ECHO + $ECHO "If you ever happen to want to link against installed libraries" + $ECHO "in a given directory, LIBDIR, you must either use libtool, and" + $ECHO "specify the full pathname of the library, or use the \`-LLIBDIR'" + $ECHO "flag during linking and do at least one of the following:" + if test -n "$shlibpath_var"; then + $ECHO " - add LIBDIR to the \`$shlibpath_var' environment variable" + $ECHO " during execution" + fi + if test -n "$runpath_var"; then + $ECHO " - add LIBDIR to the \`$runpath_var' environment variable" + $ECHO " during linking" + fi + if test -n "$hardcode_libdir_flag_spec"; then + libdir=LIBDIR + eval flag=\"$hardcode_libdir_flag_spec\" + + $ECHO " - use the \`$flag' linker flag" + fi + if test -n "$admincmds"; then + $ECHO " - have your system administrator run these commands:$admincmds" + fi + if test -f /etc/ld.so.conf; then + $ECHO " - have your system administrator add LIBDIR to \`/etc/ld.so.conf'" + fi + $ECHO + + $ECHO "See any operating system documentation about shared libraries for" + case $host in + solaris2.[6789]|solaris2.1[0-9]) + $ECHO "more information, such as the ld(1), crle(1) and ld.so(8) manual" + $ECHO "pages." + ;; + *) + $ECHO "more information, such as the ld(1) and ld.so(8) manual pages." + ;; + esac + $ECHO "X----------------------------------------------------------------------" | $Xsed + exit $EXIT_SUCCESS +} + +test "$mode" = finish && func_mode_finish ${1+"$@"} + + +# func_mode_install arg... +func_mode_install () +{ + $opt_debug + # There may be an optional sh(1) argument at the beginning of + # install_prog (especially on Windows NT). + if test "$nonopt" = "$SHELL" || test "$nonopt" = /bin/sh || + # Allow the use of GNU shtool's install command. + $ECHO "X$nonopt" | $GREP shtool >/dev/null; then + # Aesthetically quote it. + func_quote_for_eval "$nonopt" + install_prog="$func_quote_for_eval_result " + arg=$1 + shift + else + install_prog= + arg=$nonopt + fi + + # The real first argument should be the name of the installation program. + # Aesthetically quote it. + func_quote_for_eval "$arg" + install_prog="$install_prog$func_quote_for_eval_result" + + # We need to accept at least all the BSD install flags. + dest= + files= + opts= + prev= + install_type= + isdir=no + stripme= + for arg + do + if test -n "$dest"; then + files="$files $dest" + dest=$arg + continue + fi + + case $arg in + -d) isdir=yes ;; + -f) + case " $install_prog " in + *[\\\ /]cp\ *) ;; + *) prev=$arg ;; + esac + ;; + -g | -m | -o) + prev=$arg + ;; + -s) + stripme=" -s" + continue + ;; + -*) + ;; + *) + # If the previous option needed an argument, then skip it. + if test -n "$prev"; then + prev= + else + dest=$arg + continue + fi + ;; + esac + + # Aesthetically quote the argument. + func_quote_for_eval "$arg" + install_prog="$install_prog $func_quote_for_eval_result" + done + + test -z "$install_prog" && \ + func_fatal_help "you must specify an install program" + + test -n "$prev" && \ + func_fatal_help "the \`$prev' option requires an argument" + + if test -z "$files"; then + if test -z "$dest"; then + func_fatal_help "no file or destination specified" + else + func_fatal_help "you must specify a destination" + fi + fi + + # Strip any trailing slash from the destination. + func_stripname '' '/' "$dest" + dest=$func_stripname_result + + # Check to see that the destination is a directory. + test -d "$dest" && isdir=yes + if test "$isdir" = yes; then + destdir="$dest" + destname= + else + func_dirname_and_basename "$dest" "" "." + destdir="$func_dirname_result" + destname="$func_basename_result" + + # Not a directory, so check to see that there is only one file specified. + set dummy $files; shift + test "$#" -gt 1 && \ + func_fatal_help "\`$dest' is not a directory" + fi + case $destdir in + [\\/]* | [A-Za-z]:[\\/]*) ;; + *) + for file in $files; do + case $file in + *.lo) ;; + *) + func_fatal_help "\`$destdir' must be an absolute directory name" + ;; + esac + done + ;; + esac + + # This variable tells wrapper scripts just to set variables rather + # than running their programs. + libtool_install_magic="$magic" + + staticlibs= + future_libdirs= + current_libdirs= + for file in $files; do + + # Do each installation. + case $file in + *.$libext) + # Do the static libraries later. + staticlibs="$staticlibs $file" + ;; + + *.la) + # Check to see that this really is a libtool archive. + func_lalib_unsafe_p "$file" \ + || func_fatal_help "\`$file' is not a valid libtool archive" + + library_names= + old_library= + relink_command= + func_source "$file" + + # Add the libdir to current_libdirs if it is the destination. + if test "X$destdir" = "X$libdir"; then + case "$current_libdirs " in + *" $libdir "*) ;; + *) current_libdirs="$current_libdirs $libdir" ;; + esac + else + # Note the libdir as a future libdir. + case "$future_libdirs " in + *" $libdir "*) ;; + *) future_libdirs="$future_libdirs $libdir" ;; + esac + fi + + func_dirname "$file" "/" "" + dir="$func_dirname_result" + dir="$dir$objdir" + + if test -n "$relink_command"; then + # Determine the prefix the user has applied to our future dir. + inst_prefix_dir=`$ECHO "X$destdir" | $Xsed -e "s%$libdir\$%%"` + + # Don't allow the user to place us outside of our expected + # location b/c this prevents finding dependent libraries that + # are installed to the same prefix. + # At present, this check doesn't affect windows .dll's that + # are installed into $libdir/../bin (currently, that works fine) + # but it's something to keep an eye on. + test "$inst_prefix_dir" = "$destdir" && \ + func_fatal_error "error: cannot install \`$file' to a directory not ending in $libdir" + + if test -n "$inst_prefix_dir"; then + # Stick the inst_prefix_dir data into the link command. + relink_command=`$ECHO "X$relink_command" | $Xsed -e "s%@inst_prefix_dir@%-inst-prefix-dir $inst_prefix_dir%"` + else + relink_command=`$ECHO "X$relink_command" | $Xsed -e "s%@inst_prefix_dir@%%"` + fi + + func_warning "relinking \`$file'" + func_show_eval "$relink_command" \ + 'func_fatal_error "error: relink \`$file'\'' with the above command before installing it"' + fi + + # See the names of the shared library. + set dummy $library_names; shift + if test -n "$1"; then + realname="$1" + shift + + srcname="$realname" + test -n "$relink_command" && srcname="$realname"T + + # Install the shared library and build the symlinks. + func_show_eval "$install_prog $dir/$srcname $destdir/$realname" \ + 'exit $?' + tstripme="$stripme" + case $host_os in + cygwin* | mingw* | pw32* | cegcc*) + case $realname in + *.dll.a) + tstripme="" + ;; + esac + ;; + esac + if test -n "$tstripme" && test -n "$striplib"; then + func_show_eval "$striplib $destdir/$realname" 'exit $?' + fi + + if test "$#" -gt 0; then + # Delete the old symlinks, and create new ones. + # Try `ln -sf' first, because the `ln' binary might depend on + # the symlink we replace! Solaris /bin/ln does not understand -f, + # so we also need to try rm && ln -s. + for linkname + do + test "$linkname" != "$realname" \ + && func_show_eval "(cd $destdir && { $LN_S -f $realname $linkname || { $RM $linkname && $LN_S $realname $linkname; }; })" + done + fi + + # Do each command in the postinstall commands. + lib="$destdir/$realname" + func_execute_cmds "$postinstall_cmds" 'exit $?' + fi + + # Install the pseudo-library for information purposes. + func_basename "$file" + name="$func_basename_result" + instname="$dir/$name"i + func_show_eval "$install_prog $instname $destdir/$name" 'exit $?' + + # Maybe install the static library, too. + test -n "$old_library" && staticlibs="$staticlibs $dir/$old_library" + ;; + + *.lo) + # Install (i.e. copy) a libtool object. + + # Figure out destination file name, if it wasn't already specified. + if test -n "$destname"; then + destfile="$destdir/$destname" + else + func_basename "$file" + destfile="$func_basename_result" + destfile="$destdir/$destfile" + fi + + # Deduce the name of the destination old-style object file. + case $destfile in + *.lo) + func_lo2o "$destfile" + staticdest=$func_lo2o_result + ;; + *.$objext) + staticdest="$destfile" + destfile= + ;; + *) + func_fatal_help "cannot copy a libtool object to \`$destfile'" + ;; + esac + + # Install the libtool object if requested. + test -n "$destfile" && \ + func_show_eval "$install_prog $file $destfile" 'exit $?' + + # Install the old object if enabled. + if test "$build_old_libs" = yes; then + # Deduce the name of the old-style object file. + func_lo2o "$file" + staticobj=$func_lo2o_result + func_show_eval "$install_prog \$staticobj \$staticdest" 'exit $?' + fi + exit $EXIT_SUCCESS + ;; + + *) + # Figure out destination file name, if it wasn't already specified. + if test -n "$destname"; then + destfile="$destdir/$destname" + else + func_basename "$file" + destfile="$func_basename_result" + destfile="$destdir/$destfile" + fi + + # If the file is missing, and there is a .exe on the end, strip it + # because it is most likely a libtool script we actually want to + # install + stripped_ext="" + case $file in + *.exe) + if test ! -f "$file"; then + func_stripname '' '.exe' "$file" + file=$func_stripname_result + stripped_ext=".exe" + fi + ;; + esac + + # Do a test to see if this is really a libtool program. + case $host in + *cygwin* | *mingw*) + if func_ltwrapper_executable_p "$file"; then + func_ltwrapper_scriptname "$file" + wrapper=$func_ltwrapper_scriptname_result + else + func_stripname '' '.exe' "$file" + wrapper=$func_stripname_result + fi + ;; + *) + wrapper=$file + ;; + esac + if func_ltwrapper_script_p "$wrapper"; then + notinst_deplibs= + relink_command= + + func_source "$wrapper" + + # Check the variables that should have been set. + test -z "$generated_by_libtool_version" && \ + func_fatal_error "invalid libtool wrapper script \`$wrapper'" + + finalize=yes + for lib in $notinst_deplibs; do + # Check to see that each library is installed. + libdir= + if test -f "$lib"; then + func_source "$lib" + fi + libfile="$libdir/"`$ECHO "X$lib" | $Xsed -e 's%^.*/%%g'` ### testsuite: skip nested quoting test + if test -n "$libdir" && test ! -f "$libfile"; then + func_warning "\`$lib' has not been installed in \`$libdir'" + finalize=no + fi + done + + relink_command= + func_source "$wrapper" + + outputname= + if test "$fast_install" = no && test -n "$relink_command"; then + $opt_dry_run || { + if test "$finalize" = yes; then + tmpdir=`func_mktempdir` + func_basename "$file$stripped_ext" + file="$func_basename_result" + outputname="$tmpdir/$file" + # Replace the output file specification. + relink_command=`$ECHO "X$relink_command" | $Xsed -e 's%@OUTPUT@%'"$outputname"'%g'` + + $opt_silent || { + func_quote_for_expand "$relink_command" + eval "func_echo $func_quote_for_expand_result" + } + if eval "$relink_command"; then : + else + func_error "error: relink \`$file' with the above command before installing it" + $opt_dry_run || ${RM}r "$tmpdir" + continue + fi + file="$outputname" + else + func_warning "cannot relink \`$file'" + fi + } + else + # Install the binary that we compiled earlier. + file=`$ECHO "X$file$stripped_ext" | $Xsed -e "s%\([^/]*\)$%$objdir/\1%"` + fi + fi + + # remove .exe since cygwin /usr/bin/install will append another + # one anyway + case $install_prog,$host in + */usr/bin/install*,*cygwin*) + case $file:$destfile in + *.exe:*.exe) + # this is ok + ;; + *.exe:*) + destfile=$destfile.exe + ;; + *:*.exe) + func_stripname '' '.exe' "$destfile" + destfile=$func_stripname_result + ;; + esac + ;; + esac + func_show_eval "$install_prog\$stripme \$file \$destfile" 'exit $?' + $opt_dry_run || if test -n "$outputname"; then + ${RM}r "$tmpdir" + fi + ;; + esac + done + + for file in $staticlibs; do + func_basename "$file" + name="$func_basename_result" + + # Set up the ranlib parameters. + oldlib="$destdir/$name" + + func_show_eval "$install_prog \$file \$oldlib" 'exit $?' + + if test -n "$stripme" && test -n "$old_striplib"; then + func_show_eval "$old_striplib $oldlib" 'exit $?' + fi + + # Do each command in the postinstall commands. + func_execute_cmds "$old_postinstall_cmds" 'exit $?' + done + + test -n "$future_libdirs" && \ + func_warning "remember to run \`$progname --finish$future_libdirs'" + + if test -n "$current_libdirs"; then + # Maybe just do a dry run. + $opt_dry_run && current_libdirs=" -n$current_libdirs" + exec_cmd='$SHELL $progpath $preserve_args --finish$current_libdirs' + else + exit $EXIT_SUCCESS + fi +} + +test "$mode" = install && func_mode_install ${1+"$@"} + + +# func_generate_dlsyms outputname originator pic_p +# Extract symbols from dlprefiles and create ${outputname}S.o with +# a dlpreopen symbol table. +func_generate_dlsyms () +{ + $opt_debug + my_outputname="$1" + my_originator="$2" + my_pic_p="${3-no}" + my_prefix=`$ECHO "$my_originator" | sed 's%[^a-zA-Z0-9]%_%g'` + my_dlsyms= + + if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then + if test -n "$NM" && test -n "$global_symbol_pipe"; then + my_dlsyms="${my_outputname}S.c" + else + func_error "not configured to extract global symbols from dlpreopened files" + fi + fi + + if test -n "$my_dlsyms"; then + case $my_dlsyms in + "") ;; + *.c) + # Discover the nlist of each of the dlfiles. + nlist="$output_objdir/${my_outputname}.nm" + + func_show_eval "$RM $nlist ${nlist}S ${nlist}T" + + # Parse the name list into a source file. + func_verbose "creating $output_objdir/$my_dlsyms" + + $opt_dry_run || $ECHO > "$output_objdir/$my_dlsyms" "\ +/* $my_dlsyms - symbol resolution table for \`$my_outputname' dlsym emulation. */ +/* Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION */ + +#ifdef __cplusplus +extern \"C\" { +#endif + +/* External symbol declarations for the compiler. */\ +" + + if test "$dlself" = yes; then + func_verbose "generating symbol list for \`$output'" + + $opt_dry_run || echo ': @PROGRAM@ ' > "$nlist" + + # Add our own program objects to the symbol list. + progfiles=`$ECHO "X$objs$old_deplibs" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP` + for progfile in $progfiles; do + func_verbose "extracting global C symbols from \`$progfile'" + $opt_dry_run || eval "$NM $progfile | $global_symbol_pipe >> '$nlist'" + done + + if test -n "$exclude_expsyms"; then + $opt_dry_run || { + eval '$EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T' + eval '$MV "$nlist"T "$nlist"' + } + fi + + if test -n "$export_symbols_regex"; then + $opt_dry_run || { + eval '$EGREP -e "$export_symbols_regex" "$nlist" > "$nlist"T' + eval '$MV "$nlist"T "$nlist"' + } + fi + + # Prepare the list of exported symbols + if test -z "$export_symbols"; then + export_symbols="$output_objdir/$outputname.exp" + $opt_dry_run || { + $RM $export_symbols + eval "${SED} -n -e '/^: @PROGRAM@ $/d' -e 's/^.* \(.*\)$/\1/p' "'< "$nlist" > "$export_symbols"' + case $host in + *cygwin* | *mingw* | *cegcc* ) + eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' + eval 'cat "$export_symbols" >> "$output_objdir/$outputname.def"' + ;; + esac + } + else + $opt_dry_run || { + eval "${SED} -e 's/\([].[*^$]\)/\\\\\1/g' -e 's/^/ /' -e 's/$/$/'"' < "$export_symbols" > "$output_objdir/$outputname.exp"' + eval '$GREP -f "$output_objdir/$outputname.exp" < "$nlist" > "$nlist"T' + eval '$MV "$nlist"T "$nlist"' + case $host in + *cygwin | *mingw* | *cegcc* ) + eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' + eval 'cat "$nlist" >> "$output_objdir/$outputname.def"' + ;; + esac + } + fi + fi + + for dlprefile in $dlprefiles; do + func_verbose "extracting global C symbols from \`$dlprefile'" + func_basename "$dlprefile" + name="$func_basename_result" + $opt_dry_run || { + eval '$ECHO ": $name " >> "$nlist"' + eval "$NM $dlprefile 2>/dev/null | $global_symbol_pipe >> '$nlist'" + } + done + + $opt_dry_run || { + # Make sure we have at least an empty file. + test -f "$nlist" || : > "$nlist" + + if test -n "$exclude_expsyms"; then + $EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T + $MV "$nlist"T "$nlist" + fi + + # Try sorting and uniquifying the output. + if $GREP -v "^: " < "$nlist" | + if sort -k 3 /dev/null 2>&1; then + sort -k 3 + else + sort +2 + fi | + uniq > "$nlist"S; then + : + else + $GREP -v "^: " < "$nlist" > "$nlist"S + fi + + if test -f "$nlist"S; then + eval "$global_symbol_to_cdecl"' < "$nlist"S >> "$output_objdir/$my_dlsyms"' + else + $ECHO '/* NONE */' >> "$output_objdir/$my_dlsyms" + fi + + $ECHO >> "$output_objdir/$my_dlsyms" "\ + +/* The mapping between symbol names and symbols. */ +typedef struct { + const char *name; + void *address; +} lt_dlsymlist; +" + case $host in + *cygwin* | *mingw* | *cegcc* ) + $ECHO >> "$output_objdir/$my_dlsyms" "\ +/* DATA imports from DLLs on WIN32 con't be const, because + runtime relocations are performed -- see ld's documentation + on pseudo-relocs. */" + lt_dlsym_const= ;; + *osf5*) + echo >> "$output_objdir/$my_dlsyms" "\ +/* This system does not cope well with relocations in const data */" + lt_dlsym_const= ;; + *) + lt_dlsym_const=const ;; + esac + + $ECHO >> "$output_objdir/$my_dlsyms" "\ +extern $lt_dlsym_const lt_dlsymlist +lt_${my_prefix}_LTX_preloaded_symbols[]; +$lt_dlsym_const lt_dlsymlist +lt_${my_prefix}_LTX_preloaded_symbols[] = +{\ + { \"$my_originator\", (void *) 0 }," + + case $need_lib_prefix in + no) + eval "$global_symbol_to_c_name_address" < "$nlist" >> "$output_objdir/$my_dlsyms" + ;; + *) + eval "$global_symbol_to_c_name_address_lib_prefix" < "$nlist" >> "$output_objdir/$my_dlsyms" + ;; + esac + $ECHO >> "$output_objdir/$my_dlsyms" "\ + {0, (void *) 0} +}; + +/* This works around a problem in FreeBSD linker */ +#ifdef FREEBSD_WORKAROUND +static const void *lt_preloaded_setup() { + return lt_${my_prefix}_LTX_preloaded_symbols; +} +#endif + +#ifdef __cplusplus +} +#endif\ +" + } # !$opt_dry_run + + pic_flag_for_symtable= + case "$compile_command " in + *" -static "*) ;; + *) + case $host in + # compiling the symbol table file with pic_flag works around + # a FreeBSD bug that causes programs to crash when -lm is + # linked before any other PIC object. But we must not use + # pic_flag when linking with -static. The problem exists in + # FreeBSD 2.2.6 and is fixed in FreeBSD 3.1. + *-*-freebsd2*|*-*-freebsd3.0*|*-*-freebsdelf3.0*) + pic_flag_for_symtable=" $pic_flag -DFREEBSD_WORKAROUND" ;; + *-*-hpux*) + pic_flag_for_symtable=" $pic_flag" ;; + *) + if test "X$my_pic_p" != Xno; then + pic_flag_for_symtable=" $pic_flag" + fi + ;; + esac + ;; + esac + symtab_cflags= + for arg in $LTCFLAGS; do + case $arg in + -pie | -fpie | -fPIE) ;; + *) symtab_cflags="$symtab_cflags $arg" ;; + esac + done + + # Now compile the dynamic symbol file. + func_show_eval '(cd $output_objdir && $LTCC$symtab_cflags -c$no_builtin_flag$pic_flag_for_symtable "$my_dlsyms")' 'exit $?' + + # Clean up the generated files. + func_show_eval '$RM "$output_objdir/$my_dlsyms" "$nlist" "${nlist}S" "${nlist}T"' + + # Transform the symbol file into the correct name. + symfileobj="$output_objdir/${my_outputname}S.$objext" + case $host in + *cygwin* | *mingw* | *cegcc* ) + if test -f "$output_objdir/$my_outputname.def"; then + compile_command=`$ECHO "X$compile_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"` + finalize_command=`$ECHO "X$finalize_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"` + else + compile_command=`$ECHO "X$compile_command" | $Xsed -e "s%@SYMFILE@%$symfileobj%"` + finalize_command=`$ECHO "X$finalize_command" | $Xsed -e "s%@SYMFILE@%$symfileobj%"` + fi + ;; + *) + compile_command=`$ECHO "X$compile_command" | $Xsed -e "s%@SYMFILE@%$symfileobj%"` + finalize_command=`$ECHO "X$finalize_command" | $Xsed -e "s%@SYMFILE@%$symfileobj%"` + ;; + esac + ;; + *) + func_fatal_error "unknown suffix for \`$my_dlsyms'" + ;; + esac + else + # We keep going just in case the user didn't refer to + # lt_preloaded_symbols. The linker will fail if global_symbol_pipe + # really was required. + + # Nullify the symbol file. + compile_command=`$ECHO "X$compile_command" | $Xsed -e "s% @SYMFILE@%%"` + finalize_command=`$ECHO "X$finalize_command" | $Xsed -e "s% @SYMFILE@%%"` + fi +} + +# func_win32_libid arg +# return the library type of file 'arg' +# +# Need a lot of goo to handle *both* DLLs and import libs +# Has to be a shell function in order to 'eat' the argument +# that is supplied when $file_magic_command is called. +func_win32_libid () +{ + $opt_debug + win32_libid_type="unknown" + win32_fileres=`file -L $1 2>/dev/null` + case $win32_fileres in + *ar\ archive\ import\ library*) # definitely import + win32_libid_type="x86 archive import" + ;; + *ar\ archive*) # could be an import, or static + if eval $OBJDUMP -f $1 | $SED -e '10q' 2>/dev/null | + $EGREP 'file format pe-i386(.*architecture: i386)?' >/dev/null ; then + win32_nmres=`eval $NM -f posix -A $1 | + $SED -n -e ' + 1,100{ + / I /{ + s,.*,import, + p + q + } + }'` + case $win32_nmres in + import*) win32_libid_type="x86 archive import";; + *) win32_libid_type="x86 archive static";; + esac + fi + ;; + *DLL*) + win32_libid_type="x86 DLL" + ;; + *executable*) # but shell scripts are "executable" too... + case $win32_fileres in + *MS\ Windows\ PE\ Intel*) + win32_libid_type="x86 DLL" + ;; + esac + ;; + esac + $ECHO "$win32_libid_type" +} + + + +# func_extract_an_archive dir oldlib +func_extract_an_archive () +{ + $opt_debug + f_ex_an_ar_dir="$1"; shift + f_ex_an_ar_oldlib="$1" + func_show_eval "(cd \$f_ex_an_ar_dir && $AR x \"\$f_ex_an_ar_oldlib\")" 'exit $?' + if ($AR t "$f_ex_an_ar_oldlib" | sort | sort -uc >/dev/null 2>&1); then + : + else + func_fatal_error "object name conflicts in archive: $f_ex_an_ar_dir/$f_ex_an_ar_oldlib" + fi +} + + +# func_extract_archives gentop oldlib ... +func_extract_archives () +{ + $opt_debug + my_gentop="$1"; shift + my_oldlibs=${1+"$@"} + my_oldobjs="" + my_xlib="" + my_xabs="" + my_xdir="" + + for my_xlib in $my_oldlibs; do + # Extract the objects. + case $my_xlib in + [\\/]* | [A-Za-z]:[\\/]*) my_xabs="$my_xlib" ;; + *) my_xabs=`pwd`"/$my_xlib" ;; + esac + func_basename "$my_xlib" + my_xlib="$func_basename_result" + my_xlib_u=$my_xlib + while :; do + case " $extracted_archives " in + *" $my_xlib_u "*) + func_arith $extracted_serial + 1 + extracted_serial=$func_arith_result + my_xlib_u=lt$extracted_serial-$my_xlib ;; + *) break ;; + esac + done + extracted_archives="$extracted_archives $my_xlib_u" + my_xdir="$my_gentop/$my_xlib_u" + + func_mkdir_p "$my_xdir" + + case $host in + *-darwin*) + func_verbose "Extracting $my_xabs" + # Do not bother doing anything if just a dry run + $opt_dry_run || { + darwin_orig_dir=`pwd` + cd $my_xdir || exit $? + darwin_archive=$my_xabs + darwin_curdir=`pwd` + darwin_base_archive=`basename "$darwin_archive"` + darwin_arches=`$LIPO -info "$darwin_archive" 2>/dev/null | $GREP Architectures 2>/dev/null || true` + if test -n "$darwin_arches"; then + darwin_arches=`$ECHO "$darwin_arches" | $SED -e 's/.*are://'` + darwin_arch= + func_verbose "$darwin_base_archive has multiple architectures $darwin_arches" + for darwin_arch in $darwin_arches ; do + func_mkdir_p "unfat-$$/${darwin_base_archive}-${darwin_arch}" + $LIPO -thin $darwin_arch -output "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}" "${darwin_archive}" + cd "unfat-$$/${darwin_base_archive}-${darwin_arch}" + func_extract_an_archive "`pwd`" "${darwin_base_archive}" + cd "$darwin_curdir" + $RM "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}" + done # $darwin_arches + ## Okay now we've a bunch of thin objects, gotta fatten them up :) + darwin_filelist=`find unfat-$$ -type f -name \*.o -print -o -name \*.lo -print | $SED -e "$basename" | sort -u` + darwin_file= + darwin_files= + for darwin_file in $darwin_filelist; do + darwin_files=`find unfat-$$ -name $darwin_file -print | $NL2SP` + $LIPO -create -output "$darwin_file" $darwin_files + done # $darwin_filelist + $RM -rf unfat-$$ + cd "$darwin_orig_dir" + else + cd $darwin_orig_dir + func_extract_an_archive "$my_xdir" "$my_xabs" + fi # $darwin_arches + } # !$opt_dry_run + ;; + *) + func_extract_an_archive "$my_xdir" "$my_xabs" + ;; + esac + my_oldobjs="$my_oldobjs "`find $my_xdir -name \*.$objext -print -o -name \*.lo -print | $NL2SP` + done + + func_extract_archives_result="$my_oldobjs" +} + + + +# func_emit_wrapper_part1 [arg=no] +# +# Emit the first part of a libtool wrapper script on stdout. +# For more information, see the description associated with +# func_emit_wrapper(), below. +func_emit_wrapper_part1 () +{ + func_emit_wrapper_part1_arg1=no + if test -n "$1" ; then + func_emit_wrapper_part1_arg1=$1 + fi + + $ECHO "\ +#! $SHELL + +# $output - temporary wrapper script for $objdir/$outputname +# Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION +# +# The $output program cannot be directly executed until all the libtool +# libraries that it depends on are installed. +# +# This wrapper script should never be moved out of the build directory. +# If it is, it will not operate correctly. + +# Sed substitution that helps us do robust quoting. It backslashifies +# metacharacters that are still active within double-quoted strings. +Xsed='${SED} -e 1s/^X//' +sed_quote_subst='$sed_quote_subst' + +# Be Bourne compatible +if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then + emulate sh + NULLCMD=: + # Zsh 3.x and 4.x performs word splitting on \${1+\"\$@\"}, which + # is contrary to our usage. Disable this feature. + alias -g '\${1+\"\$@\"}'='\"\$@\"' + setopt NO_GLOB_SUBST +else + case \`(set -o) 2>/dev/null\` in *posix*) set -o posix;; esac +fi +BIN_SH=xpg4; export BIN_SH # for Tru64 +DUALCASE=1; export DUALCASE # for MKS sh + +# The HP-UX ksh and POSIX shell print the target directory to stdout +# if CDPATH is set. +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH + +relink_command=\"$relink_command\" + +# This environment variable determines our operation mode. +if test \"\$libtool_install_magic\" = \"$magic\"; then + # install mode needs the following variables: + generated_by_libtool_version='$macro_version' + notinst_deplibs='$notinst_deplibs' +else + # When we are sourced in execute mode, \$file and \$ECHO are already set. + if test \"\$libtool_execute_magic\" != \"$magic\"; then + ECHO=\"$qecho\" + file=\"\$0\" + # Make sure echo works. + if test \"X\$1\" = X--no-reexec; then + # Discard the --no-reexec flag, and continue. + shift + elif test \"X\`{ \$ECHO '\t'; } 2>/dev/null\`\" = 'X\t'; then + # Yippee, \$ECHO works! + : + else + # Restart under the correct shell, and then maybe \$ECHO will work. + exec $SHELL \"\$0\" --no-reexec \${1+\"\$@\"} + fi + fi\ +" + $ECHO "\ + + # Find the directory that this script lives in. + thisdir=\`\$ECHO \"X\$file\" | \$Xsed -e 's%/[^/]*$%%'\` + test \"x\$thisdir\" = \"x\$file\" && thisdir=. + + # Follow symbolic links until we get to the real thisdir. + file=\`ls -ld \"\$file\" | ${SED} -n 's/.*-> //p'\` + while test -n \"\$file\"; do + destdir=\`\$ECHO \"X\$file\" | \$Xsed -e 's%/[^/]*\$%%'\` + + # If there was a directory component, then change thisdir. + if test \"x\$destdir\" != \"x\$file\"; then + case \"\$destdir\" in + [\\\\/]* | [A-Za-z]:[\\\\/]*) thisdir=\"\$destdir\" ;; + *) thisdir=\"\$thisdir/\$destdir\" ;; + esac + fi + + file=\`\$ECHO \"X\$file\" | \$Xsed -e 's%^.*/%%'\` + file=\`ls -ld \"\$thisdir/\$file\" | ${SED} -n 's/.*-> //p'\` + done +" +} +# end: func_emit_wrapper_part1 + +# func_emit_wrapper_part2 [arg=no] +# +# Emit the second part of a libtool wrapper script on stdout. +# For more information, see the description associated with +# func_emit_wrapper(), below. +func_emit_wrapper_part2 () +{ + func_emit_wrapper_part2_arg1=no + if test -n "$1" ; then + func_emit_wrapper_part2_arg1=$1 + fi + + $ECHO "\ + + # Usually 'no', except on cygwin/mingw when embedded into + # the cwrapper. + WRAPPER_SCRIPT_BELONGS_IN_OBJDIR=$func_emit_wrapper_part2_arg1 + if test \"\$WRAPPER_SCRIPT_BELONGS_IN_OBJDIR\" = \"yes\"; then + # special case for '.' + if test \"\$thisdir\" = \".\"; then + thisdir=\`pwd\` + fi + # remove .libs from thisdir + case \"\$thisdir\" in + *[\\\\/]$objdir ) thisdir=\`\$ECHO \"X\$thisdir\" | \$Xsed -e 's%[\\\\/][^\\\\/]*$%%'\` ;; + $objdir ) thisdir=. ;; + esac + fi + + # Try to get the absolute directory name. + absdir=\`cd \"\$thisdir\" && pwd\` + test -n \"\$absdir\" && thisdir=\"\$absdir\" +" + + if test "$fast_install" = yes; then + $ECHO "\ + program=lt-'$outputname'$exeext + progdir=\"\$thisdir/$objdir\" + + if test ! -f \"\$progdir/\$program\" || + { file=\`ls -1dt \"\$progdir/\$program\" \"\$progdir/../\$program\" 2>/dev/null | ${SED} 1q\`; \\ + test \"X\$file\" != \"X\$progdir/\$program\"; }; then + + file=\"\$\$-\$program\" + + if test ! -d \"\$progdir\"; then + $MKDIR \"\$progdir\" + else + $RM \"\$progdir/\$file\" + fi" + + $ECHO "\ + + # relink executable if necessary + if test -n \"\$relink_command\"; then + if relink_command_output=\`eval \$relink_command 2>&1\`; then : + else + $ECHO \"\$relink_command_output\" >&2 + $RM \"\$progdir/\$file\" + exit 1 + fi + fi + + $MV \"\$progdir/\$file\" \"\$progdir/\$program\" 2>/dev/null || + { $RM \"\$progdir/\$program\"; + $MV \"\$progdir/\$file\" \"\$progdir/\$program\"; } + $RM \"\$progdir/\$file\" + fi" + else + $ECHO "\ + program='$outputname' + progdir=\"\$thisdir/$objdir\" +" + fi + + $ECHO "\ + + if test -f \"\$progdir/\$program\"; then" + + # Export our shlibpath_var if we have one. + if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then + $ECHO "\ + # Add our own library path to $shlibpath_var + $shlibpath_var=\"$temp_rpath\$$shlibpath_var\" + + # Some systems cannot cope with colon-terminated $shlibpath_var + # The second colon is a workaround for a bug in BeOS R4 sed + $shlibpath_var=\`\$ECHO \"X\$$shlibpath_var\" | \$Xsed -e 's/::*\$//'\` + + export $shlibpath_var +" + fi + + # fixup the dll searchpath if we need to. + if test -n "$dllsearchpath"; then + $ECHO "\ + # Add the dll search path components to the executable PATH + PATH=$dllsearchpath:\$PATH +" + fi + + $ECHO "\ + if test \"\$libtool_execute_magic\" != \"$magic\"; then + # Run the actual program with our arguments. +" + case $host in + # Backslashes separate directories on plain windows + *-*-mingw | *-*-os2* | *-cegcc*) + $ECHO "\ + exec \"\$progdir\\\\\$program\" \${1+\"\$@\"} +" + ;; + + *) + $ECHO "\ + exec \"\$progdir/\$program\" \${1+\"\$@\"} +" + ;; + esac + $ECHO "\ + \$ECHO \"\$0: cannot exec \$program \$*\" 1>&2 + exit 1 + fi + else + # The program doesn't exist. + \$ECHO \"\$0: error: \\\`\$progdir/\$program' does not exist\" 1>&2 + \$ECHO \"This script is just a wrapper for \$program.\" 1>&2 + $ECHO \"See the $PACKAGE documentation for more information.\" 1>&2 + exit 1 + fi +fi\ +" +} +# end: func_emit_wrapper_part2 + + +# func_emit_wrapper [arg=no] +# +# Emit a libtool wrapper script on stdout. +# Don't directly open a file because we may want to +# incorporate the script contents within a cygwin/mingw +# wrapper executable. Must ONLY be called from within +# func_mode_link because it depends on a number of variables +# set therein. +# +# ARG is the value that the WRAPPER_SCRIPT_BELONGS_IN_OBJDIR +# variable will take. If 'yes', then the emitted script +# will assume that the directory in which it is stored is +# the $objdir directory. This is a cygwin/mingw-specific +# behavior. +func_emit_wrapper () +{ + func_emit_wrapper_arg1=no + if test -n "$1" ; then + func_emit_wrapper_arg1=$1 + fi + + # split this up so that func_emit_cwrapperexe_src + # can call each part independently. + func_emit_wrapper_part1 "${func_emit_wrapper_arg1}" + func_emit_wrapper_part2 "${func_emit_wrapper_arg1}" +} + + +# func_to_host_path arg +# +# Convert paths to host format when used with build tools. +# Intended for use with "native" mingw (where libtool itself +# is running under the msys shell), or in the following cross- +# build environments: +# $build $host +# mingw (msys) mingw [e.g. native] +# cygwin mingw +# *nix + wine mingw +# where wine is equipped with the `winepath' executable. +# In the native mingw case, the (msys) shell automatically +# converts paths for any non-msys applications it launches, +# but that facility isn't available from inside the cwrapper. +# Similar accommodations are necessary for $host mingw and +# $build cygwin. Calling this function does no harm for other +# $host/$build combinations not listed above. +# +# ARG is the path (on $build) that should be converted to +# the proper representation for $host. The result is stored +# in $func_to_host_path_result. +func_to_host_path () +{ + func_to_host_path_result="$1" + if test -n "$1" ; then + case $host in + *mingw* ) + lt_sed_naive_backslashify='s|\\\\*|\\|g;s|/|\\|g;s|\\|\\\\|g' + case $build in + *mingw* ) # actually, msys + # awkward: cmd appends spaces to result + lt_sed_strip_trailing_spaces="s/[ ]*\$//" + func_to_host_path_tmp1=`( cmd //c echo "$1" |\ + $SED -e "$lt_sed_strip_trailing_spaces" ) 2>/dev/null || echo ""` + func_to_host_path_result=`echo "$func_to_host_path_tmp1" |\ + $SED -e "$lt_sed_naive_backslashify"` + ;; + *cygwin* ) + func_to_host_path_tmp1=`cygpath -w "$1"` + func_to_host_path_result=`echo "$func_to_host_path_tmp1" |\ + $SED -e "$lt_sed_naive_backslashify"` + ;; + * ) + # Unfortunately, winepath does not exit with a non-zero + # error code, so we are forced to check the contents of + # stdout. On the other hand, if the command is not + # found, the shell will set an exit code of 127 and print + # *an error message* to stdout. So we must check for both + # error code of zero AND non-empty stdout, which explains + # the odd construction: + func_to_host_path_tmp1=`winepath -w "$1" 2>/dev/null` + if test "$?" -eq 0 && test -n "${func_to_host_path_tmp1}"; then + func_to_host_path_result=`echo "$func_to_host_path_tmp1" |\ + $SED -e "$lt_sed_naive_backslashify"` + else + # Allow warning below. + func_to_host_path_result="" + fi + ;; + esac + if test -z "$func_to_host_path_result" ; then + func_error "Could not determine host path corresponding to" + func_error " '$1'" + func_error "Continuing, but uninstalled executables may not work." + # Fallback: + func_to_host_path_result="$1" + fi + ;; + esac + fi +} +# end: func_to_host_path + +# func_to_host_pathlist arg +# +# Convert pathlists to host format when used with build tools. +# See func_to_host_path(), above. This function supports the +# following $build/$host combinations (but does no harm for +# combinations not listed here): +# $build $host +# mingw (msys) mingw [e.g. native] +# cygwin mingw +# *nix + wine mingw +# +# Path separators are also converted from $build format to +# $host format. If ARG begins or ends with a path separator +# character, it is preserved (but converted to $host format) +# on output. +# +# ARG is a pathlist (on $build) that should be converted to +# the proper representation on $host. The result is stored +# in $func_to_host_pathlist_result. +func_to_host_pathlist () +{ + func_to_host_pathlist_result="$1" + if test -n "$1" ; then + case $host in + *mingw* ) + lt_sed_naive_backslashify='s|\\\\*|\\|g;s|/|\\|g;s|\\|\\\\|g' + # Remove leading and trailing path separator characters from + # ARG. msys behavior is inconsistent here, cygpath turns them + # into '.;' and ';.', and winepath ignores them completely. + func_to_host_pathlist_tmp2="$1" + # Once set for this call, this variable should not be + # reassigned. It is used in tha fallback case. + func_to_host_pathlist_tmp1=`echo "$func_to_host_pathlist_tmp2" |\ + $SED -e 's|^:*||' -e 's|:*$||'` + case $build in + *mingw* ) # Actually, msys. + # Awkward: cmd appends spaces to result. + lt_sed_strip_trailing_spaces="s/[ ]*\$//" + func_to_host_pathlist_tmp2=`( cmd //c echo "$func_to_host_pathlist_tmp1" |\ + $SED -e "$lt_sed_strip_trailing_spaces" ) 2>/dev/null || echo ""` + func_to_host_pathlist_result=`echo "$func_to_host_pathlist_tmp2" |\ + $SED -e "$lt_sed_naive_backslashify"` + ;; + *cygwin* ) + func_to_host_pathlist_tmp2=`cygpath -w -p "$func_to_host_pathlist_tmp1"` + func_to_host_pathlist_result=`echo "$func_to_host_pathlist_tmp2" |\ + $SED -e "$lt_sed_naive_backslashify"` + ;; + * ) + # unfortunately, winepath doesn't convert pathlists + func_to_host_pathlist_result="" + func_to_host_pathlist_oldIFS=$IFS + IFS=: + for func_to_host_pathlist_f in $func_to_host_pathlist_tmp1 ; do + IFS=$func_to_host_pathlist_oldIFS + if test -n "$func_to_host_pathlist_f" ; then + func_to_host_path "$func_to_host_pathlist_f" + if test -n "$func_to_host_path_result" ; then + if test -z "$func_to_host_pathlist_result" ; then + func_to_host_pathlist_result="$func_to_host_path_result" + else + func_to_host_pathlist_result="$func_to_host_pathlist_result;$func_to_host_path_result" + fi + fi + fi + IFS=: + done + IFS=$func_to_host_pathlist_oldIFS + ;; + esac + if test -z "$func_to_host_pathlist_result" ; then + func_error "Could not determine the host path(s) corresponding to" + func_error " '$1'" + func_error "Continuing, but uninstalled executables may not work." + # Fallback. This may break if $1 contains DOS-style drive + # specifications. The fix is not to complicate the expression + # below, but for the user to provide a working wine installation + # with winepath so that path translation in the cross-to-mingw + # case works properly. + lt_replace_pathsep_nix_to_dos="s|:|;|g" + func_to_host_pathlist_result=`echo "$func_to_host_pathlist_tmp1" |\ + $SED -e "$lt_replace_pathsep_nix_to_dos"` + fi + # Now, add the leading and trailing path separators back + case "$1" in + :* ) func_to_host_pathlist_result=";$func_to_host_pathlist_result" + ;; + esac + case "$1" in + *: ) func_to_host_pathlist_result="$func_to_host_pathlist_result;" + ;; + esac + ;; + esac + fi +} +# end: func_to_host_pathlist + +# func_emit_cwrapperexe_src +# emit the source code for a wrapper executable on stdout +# Must ONLY be called from within func_mode_link because +# it depends on a number of variable set therein. +func_emit_cwrapperexe_src () +{ + cat < +#include +#ifdef _MSC_VER +# include +# include +# include +# define setmode _setmode +#else +# include +# include +# ifdef __CYGWIN__ +# include +# define HAVE_SETENV +# ifdef __STRICT_ANSI__ +char *realpath (const char *, char *); +int putenv (char *); +int setenv (const char *, const char *, int); +# endif +# endif +#endif +#include +#include +#include +#include +#include +#include +#include +#include + +#if defined(PATH_MAX) +# define LT_PATHMAX PATH_MAX +#elif defined(MAXPATHLEN) +# define LT_PATHMAX MAXPATHLEN +#else +# define LT_PATHMAX 1024 +#endif + +#ifndef S_IXOTH +# define S_IXOTH 0 +#endif +#ifndef S_IXGRP +# define S_IXGRP 0 +#endif + +#ifdef _MSC_VER +# define S_IXUSR _S_IEXEC +# define stat _stat +# ifndef _INTPTR_T_DEFINED +# define intptr_t int +# endif +#endif + +#ifndef DIR_SEPARATOR +# define DIR_SEPARATOR '/' +# define PATH_SEPARATOR ':' +#endif + +#if defined (_WIN32) || defined (__MSDOS__) || defined (__DJGPP__) || \ + defined (__OS2__) +# define HAVE_DOS_BASED_FILE_SYSTEM +# define FOPEN_WB "wb" +# ifndef DIR_SEPARATOR_2 +# define DIR_SEPARATOR_2 '\\' +# endif +# ifndef PATH_SEPARATOR_2 +# define PATH_SEPARATOR_2 ';' +# endif +#endif + +#ifndef DIR_SEPARATOR_2 +# define IS_DIR_SEPARATOR(ch) ((ch) == DIR_SEPARATOR) +#else /* DIR_SEPARATOR_2 */ +# define IS_DIR_SEPARATOR(ch) \ + (((ch) == DIR_SEPARATOR) || ((ch) == DIR_SEPARATOR_2)) +#endif /* DIR_SEPARATOR_2 */ + +#ifndef PATH_SEPARATOR_2 +# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR) +#else /* PATH_SEPARATOR_2 */ +# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR_2) +#endif /* PATH_SEPARATOR_2 */ + +#ifdef __CYGWIN__ +# define FOPEN_WB "wb" +#endif + +#ifndef FOPEN_WB +# define FOPEN_WB "w" +#endif +#ifndef _O_BINARY +# define _O_BINARY 0 +#endif + +#define XMALLOC(type, num) ((type *) xmalloc ((num) * sizeof(type))) +#define XFREE(stale) do { \ + if (stale) { free ((void *) stale); stale = 0; } \ +} while (0) + +#undef LTWRAPPER_DEBUGPRINTF +#if defined DEBUGWRAPPER +# define LTWRAPPER_DEBUGPRINTF(args) ltwrapper_debugprintf args +static void +ltwrapper_debugprintf (const char *fmt, ...) +{ + va_list args; + va_start (args, fmt); + (void) vfprintf (stderr, fmt, args); + va_end (args); +} +#else +# define LTWRAPPER_DEBUGPRINTF(args) +#endif + +const char *program_name = NULL; + +void *xmalloc (size_t num); +char *xstrdup (const char *string); +const char *base_name (const char *name); +char *find_executable (const char *wrapper); +char *chase_symlinks (const char *pathspec); +int make_executable (const char *path); +int check_executable (const char *path); +char *strendzap (char *str, const char *pat); +void lt_fatal (const char *message, ...); +void lt_setenv (const char *name, const char *value); +char *lt_extend_str (const char *orig_value, const char *add, int to_end); +void lt_opt_process_env_set (const char *arg); +void lt_opt_process_env_prepend (const char *arg); +void lt_opt_process_env_append (const char *arg); +int lt_split_name_value (const char *arg, char** name, char** value); +void lt_update_exe_path (const char *name, const char *value); +void lt_update_lib_path (const char *name, const char *value); + +static const char *script_text_part1 = +EOF + + func_emit_wrapper_part1 yes | + $SED -e 's/\([\\"]\)/\\\1/g' \ + -e 's/^/ "/' -e 's/$/\\n"/' + echo ";" + cat <"))); + for (i = 0; i < newargc; i++) + { + LTWRAPPER_DEBUGPRINTF (("(main) newargz[%d] : %s\n", i, (newargz[i] ? newargz[i] : ""))); + } + +EOF + + case $host_os in + mingw*) + cat <<"EOF" + /* execv doesn't actually work on mingw as expected on unix */ + rval = _spawnv (_P_WAIT, lt_argv_zero, (const char * const *) newargz); + if (rval == -1) + { + /* failed to start process */ + LTWRAPPER_DEBUGPRINTF (("(main) failed to launch target \"%s\": errno = %d\n", lt_argv_zero, errno)); + return 127; + } + return rval; +EOF + ;; + *) + cat <<"EOF" + execv (lt_argv_zero, newargz); + return rval; /* =127, but avoids unused variable warning */ +EOF + ;; + esac + + cat <<"EOF" +} + +void * +xmalloc (size_t num) +{ + void *p = (void *) malloc (num); + if (!p) + lt_fatal ("Memory exhausted"); + + return p; +} + +char * +xstrdup (const char *string) +{ + return string ? strcpy ((char *) xmalloc (strlen (string) + 1), + string) : NULL; +} + +const char * +base_name (const char *name) +{ + const char *base; + +#if defined (HAVE_DOS_BASED_FILE_SYSTEM) + /* Skip over the disk name in MSDOS pathnames. */ + if (isalpha ((unsigned char) name[0]) && name[1] == ':') + name += 2; +#endif + + for (base = name; *name; name++) + if (IS_DIR_SEPARATOR (*name)) + base = name + 1; + return base; +} + +int +check_executable (const char *path) +{ + struct stat st; + + LTWRAPPER_DEBUGPRINTF (("(check_executable) : %s\n", + path ? (*path ? path : "EMPTY!") : "NULL!")); + if ((!path) || (!*path)) + return 0; + + if ((stat (path, &st) >= 0) + && (st.st_mode & (S_IXUSR | S_IXGRP | S_IXOTH))) + return 1; + else + return 0; +} + +int +make_executable (const char *path) +{ + int rval = 0; + struct stat st; + + LTWRAPPER_DEBUGPRINTF (("(make_executable) : %s\n", + path ? (*path ? path : "EMPTY!") : "NULL!")); + if ((!path) || (!*path)) + return 0; + + if (stat (path, &st) >= 0) + { + rval = chmod (path, st.st_mode | S_IXOTH | S_IXGRP | S_IXUSR); + } + return rval; +} + +/* Searches for the full path of the wrapper. Returns + newly allocated full path name if found, NULL otherwise + Does not chase symlinks, even on platforms that support them. +*/ +char * +find_executable (const char *wrapper) +{ + int has_slash = 0; + const char *p; + const char *p_next; + /* static buffer for getcwd */ + char tmp[LT_PATHMAX + 1]; + int tmp_len; + char *concat_name; + + LTWRAPPER_DEBUGPRINTF (("(find_executable) : %s\n", + wrapper ? (*wrapper ? wrapper : "EMPTY!") : "NULL!")); + + if ((wrapper == NULL) || (*wrapper == '\0')) + return NULL; + + /* Absolute path? */ +#if defined (HAVE_DOS_BASED_FILE_SYSTEM) + if (isalpha ((unsigned char) wrapper[0]) && wrapper[1] == ':') + { + concat_name = xstrdup (wrapper); + if (check_executable (concat_name)) + return concat_name; + XFREE (concat_name); + } + else + { +#endif + if (IS_DIR_SEPARATOR (wrapper[0])) + { + concat_name = xstrdup (wrapper); + if (check_executable (concat_name)) + return concat_name; + XFREE (concat_name); + } +#if defined (HAVE_DOS_BASED_FILE_SYSTEM) + } +#endif + + for (p = wrapper; *p; p++) + if (*p == '/') + { + has_slash = 1; + break; + } + if (!has_slash) + { + /* no slashes; search PATH */ + const char *path = getenv ("PATH"); + if (path != NULL) + { + for (p = path; *p; p = p_next) + { + const char *q; + size_t p_len; + for (q = p; *q; q++) + if (IS_PATH_SEPARATOR (*q)) + break; + p_len = q - p; + p_next = (*q == '\0' ? q : q + 1); + if (p_len == 0) + { + /* empty path: current directory */ + if (getcwd (tmp, LT_PATHMAX) == NULL) + lt_fatal ("getcwd failed"); + tmp_len = strlen (tmp); + concat_name = + XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1); + memcpy (concat_name, tmp, tmp_len); + concat_name[tmp_len] = '/'; + strcpy (concat_name + tmp_len + 1, wrapper); + } + else + { + concat_name = + XMALLOC (char, p_len + 1 + strlen (wrapper) + 1); + memcpy (concat_name, p, p_len); + concat_name[p_len] = '/'; + strcpy (concat_name + p_len + 1, wrapper); + } + if (check_executable (concat_name)) + return concat_name; + XFREE (concat_name); + } + } + /* not found in PATH; assume curdir */ + } + /* Relative path | not found in path: prepend cwd */ + if (getcwd (tmp, LT_PATHMAX) == NULL) + lt_fatal ("getcwd failed"); + tmp_len = strlen (tmp); + concat_name = XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1); + memcpy (concat_name, tmp, tmp_len); + concat_name[tmp_len] = '/'; + strcpy (concat_name + tmp_len + 1, wrapper); + + if (check_executable (concat_name)) + return concat_name; + XFREE (concat_name); + return NULL; +} + +char * +chase_symlinks (const char *pathspec) +{ +#ifndef S_ISLNK + return xstrdup (pathspec); +#else + char buf[LT_PATHMAX]; + struct stat s; + char *tmp_pathspec = xstrdup (pathspec); + char *p; + int has_symlinks = 0; + while (strlen (tmp_pathspec) && !has_symlinks) + { + LTWRAPPER_DEBUGPRINTF (("checking path component for symlinks: %s\n", + tmp_pathspec)); + if (lstat (tmp_pathspec, &s) == 0) + { + if (S_ISLNK (s.st_mode) != 0) + { + has_symlinks = 1; + break; + } + + /* search backwards for last DIR_SEPARATOR */ + p = tmp_pathspec + strlen (tmp_pathspec) - 1; + while ((p > tmp_pathspec) && (!IS_DIR_SEPARATOR (*p))) + p--; + if ((p == tmp_pathspec) && (!IS_DIR_SEPARATOR (*p))) + { + /* no more DIR_SEPARATORS left */ + break; + } + *p = '\0'; + } + else + { + char *errstr = strerror (errno); + lt_fatal ("Error accessing file %s (%s)", tmp_pathspec, errstr); + } + } + XFREE (tmp_pathspec); + + if (!has_symlinks) + { + return xstrdup (pathspec); + } + + tmp_pathspec = realpath (pathspec, buf); + if (tmp_pathspec == 0) + { + lt_fatal ("Could not follow symlinks for %s", pathspec); + } + return xstrdup (tmp_pathspec); +#endif +} + +char * +strendzap (char *str, const char *pat) +{ + size_t len, patlen; + + assert (str != NULL); + assert (pat != NULL); + + len = strlen (str); + patlen = strlen (pat); + + if (patlen <= len) + { + str += len - patlen; + if (strcmp (str, pat) == 0) + *str = '\0'; + } + return str; +} + +static void +lt_error_core (int exit_status, const char *mode, + const char *message, va_list ap) +{ + fprintf (stderr, "%s: %s: ", program_name, mode); + vfprintf (stderr, message, ap); + fprintf (stderr, ".\n"); + + if (exit_status >= 0) + exit (exit_status); +} + +void +lt_fatal (const char *message, ...) +{ + va_list ap; + va_start (ap, message); + lt_error_core (EXIT_FAILURE, "FATAL", message, ap); + va_end (ap); +} + +void +lt_setenv (const char *name, const char *value) +{ + LTWRAPPER_DEBUGPRINTF (("(lt_setenv) setting '%s' to '%s'\n", + (name ? name : ""), + (value ? value : ""))); + { +#ifdef HAVE_SETENV + /* always make a copy, for consistency with !HAVE_SETENV */ + char *str = xstrdup (value); + setenv (name, str, 1); +#else + int len = strlen (name) + 1 + strlen (value) + 1; + char *str = XMALLOC (char, len); + sprintf (str, "%s=%s", name, value); + if (putenv (str) != EXIT_SUCCESS) + { + XFREE (str); + } +#endif + } +} + +char * +lt_extend_str (const char *orig_value, const char *add, int to_end) +{ + char *new_value; + if (orig_value && *orig_value) + { + int orig_value_len = strlen (orig_value); + int add_len = strlen (add); + new_value = XMALLOC (char, add_len + orig_value_len + 1); + if (to_end) + { + strcpy (new_value, orig_value); + strcpy (new_value + orig_value_len, add); + } + else + { + strcpy (new_value, add); + strcpy (new_value + add_len, orig_value); + } + } + else + { + new_value = xstrdup (add); + } + return new_value; +} + +int +lt_split_name_value (const char *arg, char** name, char** value) +{ + const char *p; + int len; + if (!arg || !*arg) + return 1; + + p = strchr (arg, (int)'='); + + if (!p) + return 1; + + *value = xstrdup (++p); + + len = strlen (arg) - strlen (*value); + *name = XMALLOC (char, len); + strncpy (*name, arg, len-1); + (*name)[len - 1] = '\0'; + + return 0; +} + +void +lt_opt_process_env_set (const char *arg) +{ + char *name = NULL; + char *value = NULL; + + if (lt_split_name_value (arg, &name, &value) != 0) + { + XFREE (name); + XFREE (value); + lt_fatal ("bad argument for %s: '%s'", env_set_opt, arg); + } + + lt_setenv (name, value); + XFREE (name); + XFREE (value); +} + +void +lt_opt_process_env_prepend (const char *arg) +{ + char *name = NULL; + char *value = NULL; + char *new_value = NULL; + + if (lt_split_name_value (arg, &name, &value) != 0) + { + XFREE (name); + XFREE (value); + lt_fatal ("bad argument for %s: '%s'", env_prepend_opt, arg); + } + + new_value = lt_extend_str (getenv (name), value, 0); + lt_setenv (name, new_value); + XFREE (new_value); + XFREE (name); + XFREE (value); +} + +void +lt_opt_process_env_append (const char *arg) +{ + char *name = NULL; + char *value = NULL; + char *new_value = NULL; + + if (lt_split_name_value (arg, &name, &value) != 0) + { + XFREE (name); + XFREE (value); + lt_fatal ("bad argument for %s: '%s'", env_append_opt, arg); + } + + new_value = lt_extend_str (getenv (name), value, 1); + lt_setenv (name, new_value); + XFREE (new_value); + XFREE (name); + XFREE (value); +} + +void +lt_update_exe_path (const char *name, const char *value) +{ + LTWRAPPER_DEBUGPRINTF (("(lt_update_exe_path) modifying '%s' by prepending '%s'\n", + (name ? name : ""), + (value ? value : ""))); + + if (name && *name && value && *value) + { + char *new_value = lt_extend_str (getenv (name), value, 0); + /* some systems can't cope with a ':'-terminated path #' */ + int len = strlen (new_value); + while (((len = strlen (new_value)) > 0) && IS_PATH_SEPARATOR (new_value[len-1])) + { + new_value[len-1] = '\0'; + } + lt_setenv (name, new_value); + XFREE (new_value); + } +} + +void +lt_update_lib_path (const char *name, const char *value) +{ + LTWRAPPER_DEBUGPRINTF (("(lt_update_lib_path) modifying '%s' by prepending '%s'\n", + (name ? name : ""), + (value ? value : ""))); + + if (name && *name && value && *value) + { + char *new_value = lt_extend_str (getenv (name), value, 0); + lt_setenv (name, new_value); + XFREE (new_value); + } +} + + +EOF +} +# end: func_emit_cwrapperexe_src + +# func_mode_link arg... +func_mode_link () +{ + $opt_debug + case $host in + *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) + # It is impossible to link a dll without this setting, and + # we shouldn't force the makefile maintainer to figure out + # which system we are compiling for in order to pass an extra + # flag for every libtool invocation. + # allow_undefined=no + + # FIXME: Unfortunately, there are problems with the above when trying + # to make a dll which has undefined symbols, in which case not + # even a static library is built. For now, we need to specify + # -no-undefined on the libtool link line when we can be certain + # that all symbols are satisfied, otherwise we get a static library. + allow_undefined=yes + ;; + *) + allow_undefined=yes + ;; + esac + libtool_args=$nonopt + base_compile="$nonopt $@" + compile_command=$nonopt + finalize_command=$nonopt + + compile_rpath= + finalize_rpath= + compile_shlibpath= + finalize_shlibpath= + convenience= + old_convenience= + deplibs= + old_deplibs= + compiler_flags= + linker_flags= + dllsearchpath= + lib_search_path=`pwd` + inst_prefix_dir= + new_inherited_linker_flags= + + avoid_version=no + dlfiles= + dlprefiles= + dlself=no + export_dynamic=no + export_symbols= + export_symbols_regex= + generated= + libobjs= + ltlibs= + module=no + no_install=no + objs= + non_pic_objects= + precious_files_regex= + prefer_static_libs=no + preload=no + prev= + prevarg= + release= + rpath= + xrpath= + perm_rpath= + temp_rpath= + thread_safe=no + vinfo= + vinfo_number=no + weak_libs= + single_module="${wl}-single_module" + func_infer_tag $base_compile + + # We need to know -static, to get the right output filenames. + for arg + do + case $arg in + -shared) + test "$build_libtool_libs" != yes && \ + func_fatal_configuration "can not build a shared library" + build_old_libs=no + break + ;; + -all-static | -static | -static-libtool-libs) + case $arg in + -all-static) + if test "$build_libtool_libs" = yes && test -z "$link_static_flag"; then + func_warning "complete static linking is impossible in this configuration" + fi + if test -n "$link_static_flag"; then + dlopen_self=$dlopen_self_static + fi + prefer_static_libs=yes + ;; + -static) + if test -z "$pic_flag" && test -n "$link_static_flag"; then + dlopen_self=$dlopen_self_static + fi + prefer_static_libs=built + ;; + -static-libtool-libs) + if test -z "$pic_flag" && test -n "$link_static_flag"; then + dlopen_self=$dlopen_self_static + fi + prefer_static_libs=yes + ;; + esac + build_libtool_libs=no + build_old_libs=yes + break + ;; + esac + done + + # See if our shared archives depend on static archives. + test -n "$old_archive_from_new_cmds" && build_old_libs=yes + + # Go through the arguments, transforming them on the way. + while test "$#" -gt 0; do + arg="$1" + shift + func_quote_for_eval "$arg" + qarg=$func_quote_for_eval_unquoted_result + func_append libtool_args " $func_quote_for_eval_result" + + # If the previous option needs an argument, assign it. + if test -n "$prev"; then + case $prev in + output) + func_append compile_command " @OUTPUT@" + func_append finalize_command " @OUTPUT@" + ;; + esac + + case $prev in + dlfiles|dlprefiles) + if test "$preload" = no; then + # Add the symbol object into the linking commands. + func_append compile_command " @SYMFILE@" + func_append finalize_command " @SYMFILE@" + preload=yes + fi + case $arg in + *.la | *.lo) ;; # We handle these cases below. + force) + if test "$dlself" = no; then + dlself=needless + export_dynamic=yes + fi + prev= + continue + ;; + self) + if test "$prev" = dlprefiles; then + dlself=yes + elif test "$prev" = dlfiles && test "$dlopen_self" != yes; then + dlself=yes + else + dlself=needless + export_dynamic=yes + fi + prev= + continue + ;; + *) + if test "$prev" = dlfiles; then + dlfiles="$dlfiles $arg" + else + dlprefiles="$dlprefiles $arg" + fi + prev= + continue + ;; + esac + ;; + expsyms) + export_symbols="$arg" + test -f "$arg" \ + || func_fatal_error "symbol file \`$arg' does not exist" + prev= + continue + ;; + expsyms_regex) + export_symbols_regex="$arg" + prev= + continue + ;; + framework) + case $host in + *-*-darwin*) + case "$deplibs " in + *" $qarg.ltframework "*) ;; + *) deplibs="$deplibs $qarg.ltframework" # this is fixed later + ;; + esac + ;; + esac + prev= + continue + ;; + inst_prefix) + inst_prefix_dir="$arg" + prev= + continue + ;; + objectlist) + if test -f "$arg"; then + save_arg=$arg + moreargs= + for fil in `cat "$save_arg"` + do +# moreargs="$moreargs $fil" + arg=$fil + # A libtool-controlled object. + + # Check to see that this really is a libtool object. + if func_lalib_unsafe_p "$arg"; then + pic_object= + non_pic_object= + + # Read the .lo file + func_source "$arg" + + if test -z "$pic_object" || + test -z "$non_pic_object" || + test "$pic_object" = none && + test "$non_pic_object" = none; then + func_fatal_error "cannot find name of object for \`$arg'" + fi + + # Extract subdirectory from the argument. + func_dirname "$arg" "/" "" + xdir="$func_dirname_result" + + if test "$pic_object" != none; then + # Prepend the subdirectory the object is found in. + pic_object="$xdir$pic_object" + + if test "$prev" = dlfiles; then + if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then + dlfiles="$dlfiles $pic_object" + prev= + continue + else + # If libtool objects are unsupported, then we need to preload. + prev=dlprefiles + fi + fi + + # CHECK ME: I think I busted this. -Ossama + if test "$prev" = dlprefiles; then + # Preload the old-style object. + dlprefiles="$dlprefiles $pic_object" + prev= + fi + + # A PIC object. + func_append libobjs " $pic_object" + arg="$pic_object" + fi + + # Non-PIC object. + if test "$non_pic_object" != none; then + # Prepend the subdirectory the object is found in. + non_pic_object="$xdir$non_pic_object" + + # A standard non-PIC object + func_append non_pic_objects " $non_pic_object" + if test -z "$pic_object" || test "$pic_object" = none ; then + arg="$non_pic_object" + fi + else + # If the PIC object exists, use it instead. + # $xdir was prepended to $pic_object above. + non_pic_object="$pic_object" + func_append non_pic_objects " $non_pic_object" + fi + else + # Only an error if not doing a dry-run. + if $opt_dry_run; then + # Extract subdirectory from the argument. + func_dirname "$arg" "/" "" + xdir="$func_dirname_result" + + func_lo2o "$arg" + pic_object=$xdir$objdir/$func_lo2o_result + non_pic_object=$xdir$func_lo2o_result + func_append libobjs " $pic_object" + func_append non_pic_objects " $non_pic_object" + else + func_fatal_error "\`$arg' is not a valid libtool object" + fi + fi + done + else + func_fatal_error "link input file \`$arg' does not exist" + fi + arg=$save_arg + prev= + continue + ;; + precious_regex) + precious_files_regex="$arg" + prev= + continue + ;; + release) + release="-$arg" + prev= + continue + ;; + rpath | xrpath) + # We need an absolute path. + case $arg in + [\\/]* | [A-Za-z]:[\\/]*) ;; + *) + func_fatal_error "only absolute run-paths are allowed" + ;; + esac + if test "$prev" = rpath; then + case "$rpath " in + *" $arg "*) ;; + *) rpath="$rpath $arg" ;; + esac + else + case "$xrpath " in + *" $arg "*) ;; + *) xrpath="$xrpath $arg" ;; + esac + fi + prev= + continue + ;; + shrext) + shrext_cmds="$arg" + prev= + continue + ;; + weak) + weak_libs="$weak_libs $arg" + prev= + continue + ;; + xcclinker) + linker_flags="$linker_flags $qarg" + compiler_flags="$compiler_flags $qarg" + prev= + func_append compile_command " $qarg" + func_append finalize_command " $qarg" + continue + ;; + xcompiler) + compiler_flags="$compiler_flags $qarg" + prev= + func_append compile_command " $qarg" + func_append finalize_command " $qarg" + continue + ;; + xlinker) + linker_flags="$linker_flags $qarg" + compiler_flags="$compiler_flags $wl$qarg" + prev= + func_append compile_command " $wl$qarg" + func_append finalize_command " $wl$qarg" + continue + ;; + *) + eval "$prev=\"\$arg\"" + prev= + continue + ;; + esac + fi # test -n "$prev" + + prevarg="$arg" + + case $arg in + -all-static) + if test -n "$link_static_flag"; then + # See comment for -static flag below, for more details. + func_append compile_command " $link_static_flag" + func_append finalize_command " $link_static_flag" + fi + continue + ;; + + -allow-undefined) + # FIXME: remove this flag sometime in the future. + func_fatal_error "\`-allow-undefined' must not be used because it is the default" + ;; + + -avoid-version) + avoid_version=yes + continue + ;; + + -dlopen) + prev=dlfiles + continue + ;; + + -dlpreopen) + prev=dlprefiles + continue + ;; + + -export-dynamic) + export_dynamic=yes + continue + ;; + + -export-symbols | -export-symbols-regex) + if test -n "$export_symbols" || test -n "$export_symbols_regex"; then + func_fatal_error "more than one -exported-symbols argument is not allowed" + fi + if test "X$arg" = "X-export-symbols"; then + prev=expsyms + else + prev=expsyms_regex + fi + continue + ;; + + -framework) + prev=framework + continue + ;; + + -inst-prefix-dir) + prev=inst_prefix + continue + ;; + + # The native IRIX linker understands -LANG:*, -LIST:* and -LNO:* + # so, if we see these flags be careful not to treat them like -L + -L[A-Z][A-Z]*:*) + case $with_gcc/$host in + no/*-*-irix* | /*-*-irix*) + func_append compile_command " $arg" + func_append finalize_command " $arg" + ;; + esac + continue + ;; + + -L*) + func_stripname '-L' '' "$arg" + dir=$func_stripname_result + if test -z "$dir"; then + if test "$#" -gt 0; then + func_fatal_error "require no space between \`-L' and \`$1'" + else + func_fatal_error "need path for \`-L' option" + fi + fi + # We need an absolute path. + case $dir in + [\\/]* | [A-Za-z]:[\\/]*) ;; + *) + absdir=`cd "$dir" && pwd` + test -z "$absdir" && \ + func_fatal_error "cannot determine absolute directory name of \`$dir'" + dir="$absdir" + ;; + esac + case "$deplibs " in + *" -L$dir "*) ;; + *) + deplibs="$deplibs -L$dir" + lib_search_path="$lib_search_path $dir" + ;; + esac + case $host in + *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) + testbindir=`$ECHO "X$dir" | $Xsed -e 's*/lib$*/bin*'` + case :$dllsearchpath: in + *":$dir:"*) ;; + ::) dllsearchpath=$dir;; + *) dllsearchpath="$dllsearchpath:$dir";; + esac + case :$dllsearchpath: in + *":$testbindir:"*) ;; + ::) dllsearchpath=$testbindir;; + *) dllsearchpath="$dllsearchpath:$testbindir";; + esac + ;; + esac + continue + ;; + + -l*) + if test "X$arg" = "X-lc" || test "X$arg" = "X-lm"; then + case $host in + *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-beos* | *-cegcc*) + # These systems don't actually have a C or math library (as such) + continue + ;; + *-*-os2*) + # These systems don't actually have a C library (as such) + test "X$arg" = "X-lc" && continue + ;; + *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) + # Do not include libc due to us having libc/libc_r. + test "X$arg" = "X-lc" && continue + ;; + *-*-rhapsody* | *-*-darwin1.[012]) + # Rhapsody C and math libraries are in the System framework + deplibs="$deplibs System.ltframework" + continue + ;; + *-*-sco3.2v5* | *-*-sco5v6*) + # Causes problems with __ctype + test "X$arg" = "X-lc" && continue + ;; + *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) + # Compiler inserts libc in the correct place for threads to work + test "X$arg" = "X-lc" && continue + ;; + esac + elif test "X$arg" = "X-lc_r"; then + case $host in + *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) + # Do not include libc_r directly, use -pthread flag. + continue + ;; + esac + fi + deplibs="$deplibs $arg" + continue + ;; + + -module) + module=yes + continue + ;; + + # Tru64 UNIX uses -model [arg] to determine the layout of C++ + # classes, name mangling, and exception handling. + # Darwin uses the -arch flag to determine output architecture. + -model|-arch|-isysroot) + compiler_flags="$compiler_flags $arg" + func_append compile_command " $arg" + func_append finalize_command " $arg" + prev=xcompiler + continue + ;; + + -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe|-threads) + compiler_flags="$compiler_flags $arg" + func_append compile_command " $arg" + func_append finalize_command " $arg" + case "$new_inherited_linker_flags " in + *" $arg "*) ;; + * ) new_inherited_linker_flags="$new_inherited_linker_flags $arg" ;; + esac + continue + ;; + + -multi_module) + single_module="${wl}-multi_module" + continue + ;; + + -no-fast-install) + fast_install=no + continue + ;; + + -no-install) + case $host in + *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-darwin* | *-cegcc*) + # The PATH hackery in wrapper scripts is required on Windows + # and Darwin in order for the loader to find any dlls it needs. + func_warning "\`-no-install' is ignored for $host" + func_warning "assuming \`-no-fast-install' instead" + fast_install=no + ;; + *) no_install=yes ;; + esac + continue + ;; + + -no-undefined) + allow_undefined=no + continue + ;; + + -objectlist) + prev=objectlist + continue + ;; + + -o) prev=output ;; + + -precious-files-regex) + prev=precious_regex + continue + ;; + + -release) + prev=release + continue + ;; + + -rpath) + prev=rpath + continue + ;; + + -R) + prev=xrpath + continue + ;; + + -R*) + func_stripname '-R' '' "$arg" + dir=$func_stripname_result + # We need an absolute path. + case $dir in + [\\/]* | [A-Za-z]:[\\/]*) ;; + *) + func_fatal_error "only absolute run-paths are allowed" + ;; + esac + case "$xrpath " in + *" $dir "*) ;; + *) xrpath="$xrpath $dir" ;; + esac + continue + ;; + + -shared) + # The effects of -shared are defined in a previous loop. + continue + ;; + + -shrext) + prev=shrext + continue + ;; + + -static | -static-libtool-libs) + # The effects of -static are defined in a previous loop. + # We used to do the same as -all-static on platforms that + # didn't have a PIC flag, but the assumption that the effects + # would be equivalent was wrong. It would break on at least + # Digital Unix and AIX. + continue + ;; + + -thread-safe) + thread_safe=yes + continue + ;; + + -version-info) + prev=vinfo + continue + ;; + + -version-number) + prev=vinfo + vinfo_number=yes + continue + ;; + + -weak) + prev=weak + continue + ;; + + -Wc,*) + func_stripname '-Wc,' '' "$arg" + args=$func_stripname_result + arg= + save_ifs="$IFS"; IFS=',' + for flag in $args; do + IFS="$save_ifs" + func_quote_for_eval "$flag" + arg="$arg $wl$func_quote_for_eval_result" + compiler_flags="$compiler_flags $func_quote_for_eval_result" + done + IFS="$save_ifs" + func_stripname ' ' '' "$arg" + arg=$func_stripname_result + ;; + + -Wl,*) + func_stripname '-Wl,' '' "$arg" + args=$func_stripname_result + arg= + save_ifs="$IFS"; IFS=',' + for flag in $args; do + IFS="$save_ifs" + func_quote_for_eval "$flag" + arg="$arg $wl$func_quote_for_eval_result" + compiler_flags="$compiler_flags $wl$func_quote_for_eval_result" + linker_flags="$linker_flags $func_quote_for_eval_result" + done + IFS="$save_ifs" + func_stripname ' ' '' "$arg" + arg=$func_stripname_result + ;; + + -Xcompiler) + prev=xcompiler + continue + ;; + + -Xlinker) + prev=xlinker + continue + ;; + + -XCClinker) + prev=xcclinker + continue + ;; + + # -msg_* for osf cc + -msg_*) + func_quote_for_eval "$arg" + arg="$func_quote_for_eval_result" + ;; + + # -64, -mips[0-9] enable 64-bit mode on the SGI compiler + # -r[0-9][0-9]* specifies the processor on the SGI compiler + # -xarch=*, -xtarget=* enable 64-bit mode on the Sun compiler + # +DA*, +DD* enable 64-bit mode on the HP compiler + # -q* pass through compiler args for the IBM compiler + # -m*, -t[45]*, -txscale* pass through architecture-specific + # compiler args for GCC + # -F/path gives path to uninstalled frameworks, gcc on darwin + # -p, -pg, --coverage, -fprofile-* pass through profiling flag for GCC + # @file GCC response files + -64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*| \ + -t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*) + func_quote_for_eval "$arg" + arg="$func_quote_for_eval_result" + func_append compile_command " $arg" + func_append finalize_command " $arg" + compiler_flags="$compiler_flags $arg" + continue + ;; + + # Some other compiler flag. + -* | +*) + func_quote_for_eval "$arg" + arg="$func_quote_for_eval_result" + ;; + + *.$objext) + # A standard object. + objs="$objs $arg" + ;; + + *.lo) + # A libtool-controlled object. + + # Check to see that this really is a libtool object. + if func_lalib_unsafe_p "$arg"; then + pic_object= + non_pic_object= + + # Read the .lo file + func_source "$arg" + + if test -z "$pic_object" || + test -z "$non_pic_object" || + test "$pic_object" = none && + test "$non_pic_object" = none; then + func_fatal_error "cannot find name of object for \`$arg'" + fi + + # Extract subdirectory from the argument. + func_dirname "$arg" "/" "" + xdir="$func_dirname_result" + + if test "$pic_object" != none; then + # Prepend the subdirectory the object is found in. + pic_object="$xdir$pic_object" + + if test "$prev" = dlfiles; then + if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then + dlfiles="$dlfiles $pic_object" + prev= + continue + else + # If libtool objects are unsupported, then we need to preload. + prev=dlprefiles + fi + fi + + # CHECK ME: I think I busted this. -Ossama + if test "$prev" = dlprefiles; then + # Preload the old-style object. + dlprefiles="$dlprefiles $pic_object" + prev= + fi + + # A PIC object. + func_append libobjs " $pic_object" + arg="$pic_object" + fi + + # Non-PIC object. + if test "$non_pic_object" != none; then + # Prepend the subdirectory the object is found in. + non_pic_object="$xdir$non_pic_object" + + # A standard non-PIC object + func_append non_pic_objects " $non_pic_object" + if test -z "$pic_object" || test "$pic_object" = none ; then + arg="$non_pic_object" + fi + else + # If the PIC object exists, use it instead. + # $xdir was prepended to $pic_object above. + non_pic_object="$pic_object" + func_append non_pic_objects " $non_pic_object" + fi + else + # Only an error if not doing a dry-run. + if $opt_dry_run; then + # Extract subdirectory from the argument. + func_dirname "$arg" "/" "" + xdir="$func_dirname_result" + + func_lo2o "$arg" + pic_object=$xdir$objdir/$func_lo2o_result + non_pic_object=$xdir$func_lo2o_result + func_append libobjs " $pic_object" + func_append non_pic_objects " $non_pic_object" + else + func_fatal_error "\`$arg' is not a valid libtool object" + fi + fi + ;; + + *.$libext) + # An archive. + deplibs="$deplibs $arg" + old_deplibs="$old_deplibs $arg" + continue + ;; + + *.la) + # A libtool-controlled library. + + if test "$prev" = dlfiles; then + # This library was specified with -dlopen. + dlfiles="$dlfiles $arg" + prev= + elif test "$prev" = dlprefiles; then + # The library was specified with -dlpreopen. + dlprefiles="$dlprefiles $arg" + prev= + else + deplibs="$deplibs $arg" + fi + continue + ;; + + # Some other compiler argument. + *) + # Unknown arguments in both finalize_command and compile_command need + # to be aesthetically quoted because they are evaled later. + func_quote_for_eval "$arg" + arg="$func_quote_for_eval_result" + ;; + esac # arg + + # Now actually substitute the argument into the commands. + if test -n "$arg"; then + func_append compile_command " $arg" + func_append finalize_command " $arg" + fi + done # argument parsing loop + + test -n "$prev" && \ + func_fatal_help "the \`$prevarg' option requires an argument" + + if test "$export_dynamic" = yes && test -n "$export_dynamic_flag_spec"; then + eval arg=\"$export_dynamic_flag_spec\" + func_append compile_command " $arg" + func_append finalize_command " $arg" + fi + + oldlibs= + # calculate the name of the file, without its directory + func_basename "$output" + outputname="$func_basename_result" + libobjs_save="$libobjs" + + if test -n "$shlibpath_var"; then + # get the directories listed in $shlibpath_var + eval shlib_search_path=\`\$ECHO \"X\${$shlibpath_var}\" \| \$Xsed -e \'s/:/ /g\'\` + else + shlib_search_path= + fi + eval sys_lib_search_path=\"$sys_lib_search_path_spec\" + eval sys_lib_dlsearch_path=\"$sys_lib_dlsearch_path_spec\" + + func_dirname "$output" "/" "" + output_objdir="$func_dirname_result$objdir" + # Create the object directory. + func_mkdir_p "$output_objdir" + + # Determine the type of output + case $output in + "") + func_fatal_help "you must specify an output file" + ;; + *.$libext) linkmode=oldlib ;; + *.lo | *.$objext) linkmode=obj ;; + *.la) linkmode=lib ;; + *) linkmode=prog ;; # Anything else should be a program. + esac + + specialdeplibs= + + libs= + # Find all interdependent deplibs by searching for libraries + # that are linked more than once (e.g. -la -lb -la) + for deplib in $deplibs; do + if $opt_duplicate_deps ; then + case "$libs " in + *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; + esac + fi + libs="$libs $deplib" + done + + if test "$linkmode" = lib; then + libs="$predeps $libs $compiler_lib_search_path $postdeps" + + # Compute libraries that are listed more than once in $predeps + # $postdeps and mark them as special (i.e., whose duplicates are + # not to be eliminated). + pre_post_deps= + if $opt_duplicate_compiler_generated_deps; then + for pre_post_dep in $predeps $postdeps; do + case "$pre_post_deps " in + *" $pre_post_dep "*) specialdeplibs="$specialdeplibs $pre_post_deps" ;; + esac + pre_post_deps="$pre_post_deps $pre_post_dep" + done + fi + pre_post_deps= + fi + + deplibs= + newdependency_libs= + newlib_search_path= + need_relink=no # whether we're linking any uninstalled libtool libraries + notinst_deplibs= # not-installed libtool libraries + notinst_path= # paths that contain not-installed libtool libraries + + case $linkmode in + lib) + passes="conv dlpreopen link" + for file in $dlfiles $dlprefiles; do + case $file in + *.la) ;; + *) + func_fatal_help "libraries can \`-dlopen' only libtool libraries: $file" + ;; + esac + done + ;; + prog) + compile_deplibs= + finalize_deplibs= + alldeplibs=no + newdlfiles= + newdlprefiles= + passes="conv scan dlopen dlpreopen link" + ;; + *) passes="conv" + ;; + esac + + for pass in $passes; do + # The preopen pass in lib mode reverses $deplibs; put it back here + # so that -L comes before libs that need it for instance... + if test "$linkmode,$pass" = "lib,link"; then + ## FIXME: Find the place where the list is rebuilt in the wrong + ## order, and fix it there properly + tmp_deplibs= + for deplib in $deplibs; do + tmp_deplibs="$deplib $tmp_deplibs" + done + deplibs="$tmp_deplibs" + fi + + if test "$linkmode,$pass" = "lib,link" || + test "$linkmode,$pass" = "prog,scan"; then + libs="$deplibs" + deplibs= + fi + if test "$linkmode" = prog; then + case $pass in + dlopen) libs="$dlfiles" ;; + dlpreopen) libs="$dlprefiles" ;; + link) libs="$deplibs %DEPLIBS% $dependency_libs" ;; + esac + fi + if test "$linkmode,$pass" = "lib,dlpreopen"; then + # Collect and forward deplibs of preopened libtool libs + for lib in $dlprefiles; do + # Ignore non-libtool-libs + dependency_libs= + case $lib in + *.la) func_source "$lib" ;; + esac + + # Collect preopened libtool deplibs, except any this library + # has declared as weak libs + for deplib in $dependency_libs; do + deplib_base=`$ECHO "X$deplib" | $Xsed -e "$basename"` + case " $weak_libs " in + *" $deplib_base "*) ;; + *) deplibs="$deplibs $deplib" ;; + esac + done + done + libs="$dlprefiles" + fi + if test "$pass" = dlopen; then + # Collect dlpreopened libraries + save_deplibs="$deplibs" + deplibs= + fi + + for deplib in $libs; do + lib= + found=no + case $deplib in + -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe|-threads) + if test "$linkmode,$pass" = "prog,link"; then + compile_deplibs="$deplib $compile_deplibs" + finalize_deplibs="$deplib $finalize_deplibs" + else + compiler_flags="$compiler_flags $deplib" + if test "$linkmode" = lib ; then + case "$new_inherited_linker_flags " in + *" $deplib "*) ;; + * ) new_inherited_linker_flags="$new_inherited_linker_flags $deplib" ;; + esac + fi + fi + continue + ;; + -l*) + if test "$linkmode" != lib && test "$linkmode" != prog; then + func_warning "\`-l' is ignored for archives/objects" + continue + fi + func_stripname '-l' '' "$deplib" + name=$func_stripname_result + if test "$linkmode" = lib; then + searchdirs="$newlib_search_path $lib_search_path $compiler_lib_search_dirs $sys_lib_search_path $shlib_search_path" + else + searchdirs="$newlib_search_path $lib_search_path $sys_lib_search_path $shlib_search_path" + fi + for searchdir in $searchdirs; do + for search_ext in .la $std_shrext .so .a; do + # Search the libtool library + lib="$searchdir/lib${name}${search_ext}" + if test -f "$lib"; then + if test "$search_ext" = ".la"; then + found=yes + else + found=no + fi + break 2 + fi + done + done + if test "$found" != yes; then + # deplib doesn't seem to be a libtool library + if test "$linkmode,$pass" = "prog,link"; then + compile_deplibs="$deplib $compile_deplibs" + finalize_deplibs="$deplib $finalize_deplibs" + else + deplibs="$deplib $deplibs" + test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs" + fi + continue + else # deplib is a libtool library + # If $allow_libtool_libs_with_static_runtimes && $deplib is a stdlib, + # We need to do some special things here, and not later. + if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then + case " $predeps $postdeps " in + *" $deplib "*) + if func_lalib_p "$lib"; then + library_names= + old_library= + func_source "$lib" + for l in $old_library $library_names; do + ll="$l" + done + if test "X$ll" = "X$old_library" ; then # only static version available + found=no + func_dirname "$lib" "" "." + ladir="$func_dirname_result" + lib=$ladir/$old_library + if test "$linkmode,$pass" = "prog,link"; then + compile_deplibs="$deplib $compile_deplibs" + finalize_deplibs="$deplib $finalize_deplibs" + else + deplibs="$deplib $deplibs" + test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs" + fi + continue + fi + fi + ;; + *) ;; + esac + fi + fi + ;; # -l + *.ltframework) + if test "$linkmode,$pass" = "prog,link"; then + compile_deplibs="$deplib $compile_deplibs" + finalize_deplibs="$deplib $finalize_deplibs" + else + deplibs="$deplib $deplibs" + if test "$linkmode" = lib ; then + case "$new_inherited_linker_flags " in + *" $deplib "*) ;; + * ) new_inherited_linker_flags="$new_inherited_linker_flags $deplib" ;; + esac + fi + fi + continue + ;; + -L*) + case $linkmode in + lib) + deplibs="$deplib $deplibs" + test "$pass" = conv && continue + newdependency_libs="$deplib $newdependency_libs" + func_stripname '-L' '' "$deplib" + newlib_search_path="$newlib_search_path $func_stripname_result" + ;; + prog) + if test "$pass" = conv; then + deplibs="$deplib $deplibs" + continue + fi + if test "$pass" = scan; then + deplibs="$deplib $deplibs" + else + compile_deplibs="$deplib $compile_deplibs" + finalize_deplibs="$deplib $finalize_deplibs" + fi + func_stripname '-L' '' "$deplib" + newlib_search_path="$newlib_search_path $func_stripname_result" + ;; + *) + func_warning "\`-L' is ignored for archives/objects" + ;; + esac # linkmode + continue + ;; # -L + -R*) + if test "$pass" = link; then + func_stripname '-R' '' "$deplib" + dir=$func_stripname_result + # Make sure the xrpath contains only unique directories. + case "$xrpath " in + *" $dir "*) ;; + *) xrpath="$xrpath $dir" ;; + esac + fi + deplibs="$deplib $deplibs" + continue + ;; + *.la) lib="$deplib" ;; + *.$libext) + if test "$pass" = conv; then + deplibs="$deplib $deplibs" + continue + fi + case $linkmode in + lib) + # Linking convenience modules into shared libraries is allowed, + # but linking other static libraries is non-portable. + case " $dlpreconveniencelibs " in + *" $deplib "*) ;; + *) + valid_a_lib=no + case $deplibs_check_method in + match_pattern*) + set dummy $deplibs_check_method; shift + match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` + if eval "\$ECHO \"X$deplib\"" 2>/dev/null | $Xsed -e 10q \ + | $EGREP "$match_pattern_regex" > /dev/null; then + valid_a_lib=yes + fi + ;; + pass_all) + valid_a_lib=yes + ;; + esac + if test "$valid_a_lib" != yes; then + $ECHO + $ECHO "*** Warning: Trying to link with static lib archive $deplib." + $ECHO "*** I have the capability to make that library automatically link in when" + $ECHO "*** you link to this library. But I can only do this if you have a" + $ECHO "*** shared version of the library, which you do not appear to have" + $ECHO "*** because the file extensions .$libext of this argument makes me believe" + $ECHO "*** that it is just a static archive that I should not use here." + else + $ECHO + $ECHO "*** Warning: Linking the shared library $output against the" + $ECHO "*** static library $deplib is not portable!" + deplibs="$deplib $deplibs" + fi + ;; + esac + continue + ;; + prog) + if test "$pass" != link; then + deplibs="$deplib $deplibs" + else + compile_deplibs="$deplib $compile_deplibs" + finalize_deplibs="$deplib $finalize_deplibs" + fi + continue + ;; + esac # linkmode + ;; # *.$libext + *.lo | *.$objext) + if test "$pass" = conv; then + deplibs="$deplib $deplibs" + elif test "$linkmode" = prog; then + if test "$pass" = dlpreopen || test "$dlopen_support" != yes || test "$build_libtool_libs" = no; then + # If there is no dlopen support or we're linking statically, + # we need to preload. + newdlprefiles="$newdlprefiles $deplib" + compile_deplibs="$deplib $compile_deplibs" + finalize_deplibs="$deplib $finalize_deplibs" + else + newdlfiles="$newdlfiles $deplib" + fi + fi + continue + ;; + %DEPLIBS%) + alldeplibs=yes + continue + ;; + esac # case $deplib + + if test "$found" = yes || test -f "$lib"; then : + else + func_fatal_error "cannot find the library \`$lib' or unhandled argument \`$deplib'" + fi + + # Check to see that this really is a libtool archive. + func_lalib_unsafe_p "$lib" \ + || func_fatal_error "\`$lib' is not a valid libtool archive" + + func_dirname "$lib" "" "." + ladir="$func_dirname_result" + + dlname= + dlopen= + dlpreopen= + libdir= + library_names= + old_library= + inherited_linker_flags= + # If the library was installed with an old release of libtool, + # it will not redefine variables installed, or shouldnotlink + installed=yes + shouldnotlink=no + avoidtemprpath= + + + # Read the .la file + func_source "$lib" + + # Convert "-framework foo" to "foo.ltframework" + if test -n "$inherited_linker_flags"; then + tmp_inherited_linker_flags=`$ECHO "X$inherited_linker_flags" | $Xsed -e 's/-framework \([^ $]*\)/\1.ltframework/g'` + for tmp_inherited_linker_flag in $tmp_inherited_linker_flags; do + case " $new_inherited_linker_flags " in + *" $tmp_inherited_linker_flag "*) ;; + *) new_inherited_linker_flags="$new_inherited_linker_flags $tmp_inherited_linker_flag";; + esac + done + fi + dependency_libs=`$ECHO "X $dependency_libs" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'` + if test "$linkmode,$pass" = "lib,link" || + test "$linkmode,$pass" = "prog,scan" || + { test "$linkmode" != prog && test "$linkmode" != lib; }; then + test -n "$dlopen" && dlfiles="$dlfiles $dlopen" + test -n "$dlpreopen" && dlprefiles="$dlprefiles $dlpreopen" + fi + + if test "$pass" = conv; then + # Only check for convenience libraries + deplibs="$lib $deplibs" + if test -z "$libdir"; then + if test -z "$old_library"; then + func_fatal_error "cannot find name of link library for \`$lib'" + fi + # It is a libtool convenience library, so add in its objects. + convenience="$convenience $ladir/$objdir/$old_library" + old_convenience="$old_convenience $ladir/$objdir/$old_library" + elif test "$linkmode" != prog && test "$linkmode" != lib; then + func_fatal_error "\`$lib' is not a convenience library" + fi + tmp_libs= + for deplib in $dependency_libs; do + deplibs="$deplib $deplibs" + if $opt_duplicate_deps ; then + case "$tmp_libs " in + *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; + esac + fi + tmp_libs="$tmp_libs $deplib" + done + continue + fi # $pass = conv + + + # Get the name of the library we link against. + linklib= + for l in $old_library $library_names; do + linklib="$l" + done + if test -z "$linklib"; then + func_fatal_error "cannot find name of link library for \`$lib'" + fi + + # This library was specified with -dlopen. + if test "$pass" = dlopen; then + if test -z "$libdir"; then + func_fatal_error "cannot -dlopen a convenience library: \`$lib'" + fi + if test -z "$dlname" || + test "$dlopen_support" != yes || + test "$build_libtool_libs" = no; then + # If there is no dlname, no dlopen support or we're linking + # statically, we need to preload. We also need to preload any + # dependent libraries so libltdl's deplib preloader doesn't + # bomb out in the load deplibs phase. + dlprefiles="$dlprefiles $lib $dependency_libs" + else + newdlfiles="$newdlfiles $lib" + fi + continue + fi # $pass = dlopen + + # We need an absolute path. + case $ladir in + [\\/]* | [A-Za-z]:[\\/]*) abs_ladir="$ladir" ;; + *) + abs_ladir=`cd "$ladir" && pwd` + if test -z "$abs_ladir"; then + func_warning "cannot determine absolute directory name of \`$ladir'" + func_warning "passing it literally to the linker, although it might fail" + abs_ladir="$ladir" + fi + ;; + esac + func_basename "$lib" + laname="$func_basename_result" + + # Find the relevant object directory and library name. + if test "X$installed" = Xyes; then + if test ! -f "$libdir/$linklib" && test -f "$abs_ladir/$linklib"; then + func_warning "library \`$lib' was moved." + dir="$ladir" + absdir="$abs_ladir" + libdir="$abs_ladir" + else + dir="$libdir" + absdir="$libdir" + fi + test "X$hardcode_automatic" = Xyes && avoidtemprpath=yes + else + if test ! -f "$ladir/$objdir/$linklib" && test -f "$abs_ladir/$linklib"; then + dir="$ladir" + absdir="$abs_ladir" + # Remove this search path later + notinst_path="$notinst_path $abs_ladir" + else + dir="$ladir/$objdir" + absdir="$abs_ladir/$objdir" + # Remove this search path later + notinst_path="$notinst_path $abs_ladir" + fi + fi # $installed = yes + func_stripname 'lib' '.la' "$laname" + name=$func_stripname_result + + # This library was specified with -dlpreopen. + if test "$pass" = dlpreopen; then + if test -z "$libdir" && test "$linkmode" = prog; then + func_fatal_error "only libraries may -dlpreopen a convenience library: \`$lib'" + fi + # Prefer using a static library (so that no silly _DYNAMIC symbols + # are required to link). + if test -n "$old_library"; then + newdlprefiles="$newdlprefiles $dir/$old_library" + # Keep a list of preopened convenience libraries to check + # that they are being used correctly in the link pass. + test -z "$libdir" && \ + dlpreconveniencelibs="$dlpreconveniencelibs $dir/$old_library" + # Otherwise, use the dlname, so that lt_dlopen finds it. + elif test -n "$dlname"; then + newdlprefiles="$newdlprefiles $dir/$dlname" + else + newdlprefiles="$newdlprefiles $dir/$linklib" + fi + fi # $pass = dlpreopen + + if test -z "$libdir"; then + # Link the convenience library + if test "$linkmode" = lib; then + deplibs="$dir/$old_library $deplibs" + elif test "$linkmode,$pass" = "prog,link"; then + compile_deplibs="$dir/$old_library $compile_deplibs" + finalize_deplibs="$dir/$old_library $finalize_deplibs" + else + deplibs="$lib $deplibs" # used for prog,scan pass + fi + continue + fi + + + if test "$linkmode" = prog && test "$pass" != link; then + newlib_search_path="$newlib_search_path $ladir" + deplibs="$lib $deplibs" + + linkalldeplibs=no + if test "$link_all_deplibs" != no || test -z "$library_names" || + test "$build_libtool_libs" = no; then + linkalldeplibs=yes + fi + + tmp_libs= + for deplib in $dependency_libs; do + case $deplib in + -L*) func_stripname '-L' '' "$deplib" + newlib_search_path="$newlib_search_path $func_stripname_result" + ;; + esac + # Need to link against all dependency_libs? + if test "$linkalldeplibs" = yes; then + deplibs="$deplib $deplibs" + else + # Need to hardcode shared library paths + # or/and link against static libraries + newdependency_libs="$deplib $newdependency_libs" + fi + if $opt_duplicate_deps ; then + case "$tmp_libs " in + *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; + esac + fi + tmp_libs="$tmp_libs $deplib" + done # for deplib + continue + fi # $linkmode = prog... + + if test "$linkmode,$pass" = "prog,link"; then + if test -n "$library_names" && + { { test "$prefer_static_libs" = no || + test "$prefer_static_libs,$installed" = "built,yes"; } || + test -z "$old_library"; }; then + # We need to hardcode the library path + if test -n "$shlibpath_var" && test -z "$avoidtemprpath" ; then + # Make sure the rpath contains only unique directories. + case "$temp_rpath:" in + *"$absdir:"*) ;; + *) temp_rpath="$temp_rpath$absdir:" ;; + esac + fi + + # Hardcode the library path. + # Skip directories that are in the system default run-time + # search path. + case " $sys_lib_dlsearch_path " in + *" $absdir "*) ;; + *) + case "$compile_rpath " in + *" $absdir "*) ;; + *) compile_rpath="$compile_rpath $absdir" + esac + ;; + esac + case " $sys_lib_dlsearch_path " in + *" $libdir "*) ;; + *) + case "$finalize_rpath " in + *" $libdir "*) ;; + *) finalize_rpath="$finalize_rpath $libdir" + esac + ;; + esac + fi # $linkmode,$pass = prog,link... + + if test "$alldeplibs" = yes && + { test "$deplibs_check_method" = pass_all || + { test "$build_libtool_libs" = yes && + test -n "$library_names"; }; }; then + # We only need to search for static libraries + continue + fi + fi + + link_static=no # Whether the deplib will be linked statically + use_static_libs=$prefer_static_libs + if test "$use_static_libs" = built && test "$installed" = yes; then + use_static_libs=no + fi + if test -n "$library_names" && + { test "$use_static_libs" = no || test -z "$old_library"; }; then + case $host in + *cygwin* | *mingw* | *cegcc*) + # No point in relinking DLLs because paths are not encoded + notinst_deplibs="$notinst_deplibs $lib" + need_relink=no + ;; + *) + if test "$installed" = no; then + notinst_deplibs="$notinst_deplibs $lib" + need_relink=yes + fi + ;; + esac + # This is a shared library + + # Warn about portability, can't link against -module's on some + # systems (darwin). Don't bleat about dlopened modules though! + dlopenmodule="" + for dlpremoduletest in $dlprefiles; do + if test "X$dlpremoduletest" = "X$lib"; then + dlopenmodule="$dlpremoduletest" + break + fi + done + if test -z "$dlopenmodule" && test "$shouldnotlink" = yes && test "$pass" = link; then + $ECHO + if test "$linkmode" = prog; then + $ECHO "*** Warning: Linking the executable $output against the loadable module" + else + $ECHO "*** Warning: Linking the shared library $output against the loadable module" + fi + $ECHO "*** $linklib is not portable!" + fi + if test "$linkmode" = lib && + test "$hardcode_into_libs" = yes; then + # Hardcode the library path. + # Skip directories that are in the system default run-time + # search path. + case " $sys_lib_dlsearch_path " in + *" $absdir "*) ;; + *) + case "$compile_rpath " in + *" $absdir "*) ;; + *) compile_rpath="$compile_rpath $absdir" + esac + ;; + esac + case " $sys_lib_dlsearch_path " in + *" $libdir "*) ;; + *) + case "$finalize_rpath " in + *" $libdir "*) ;; + *) finalize_rpath="$finalize_rpath $libdir" + esac + ;; + esac + fi + + if test -n "$old_archive_from_expsyms_cmds"; then + # figure out the soname + set dummy $library_names + shift + realname="$1" + shift + libname=`eval "\\$ECHO \"$libname_spec\""` + # use dlname if we got it. it's perfectly good, no? + if test -n "$dlname"; then + soname="$dlname" + elif test -n "$soname_spec"; then + # bleh windows + case $host in + *cygwin* | mingw* | *cegcc*) + func_arith $current - $age + major=$func_arith_result + versuffix="-$major" + ;; + esac + eval soname=\"$soname_spec\" + else + soname="$realname" + fi + + # Make a new name for the extract_expsyms_cmds to use + soroot="$soname" + func_basename "$soroot" + soname="$func_basename_result" + func_stripname 'lib' '.dll' "$soname" + newlib=libimp-$func_stripname_result.a + + # If the library has no export list, then create one now + if test -f "$output_objdir/$soname-def"; then : + else + func_verbose "extracting exported symbol list from \`$soname'" + func_execute_cmds "$extract_expsyms_cmds" 'exit $?' + fi + + # Create $newlib + if test -f "$output_objdir/$newlib"; then :; else + func_verbose "generating import library for \`$soname'" + func_execute_cmds "$old_archive_from_expsyms_cmds" 'exit $?' + fi + # make sure the library variables are pointing to the new library + dir=$output_objdir + linklib=$newlib + fi # test -n "$old_archive_from_expsyms_cmds" + + if test "$linkmode" = prog || test "$mode" != relink; then + add_shlibpath= + add_dir= + add= + lib_linked=yes + case $hardcode_action in + immediate | unsupported) + if test "$hardcode_direct" = no; then + add="$dir/$linklib" + case $host in + *-*-sco3.2v5.0.[024]*) add_dir="-L$dir" ;; + *-*-sysv4*uw2*) add_dir="-L$dir" ;; + *-*-sysv5OpenUNIX* | *-*-sysv5UnixWare7.[01].[10]* | \ + *-*-unixware7*) add_dir="-L$dir" ;; + *-*-darwin* ) + # if the lib is a (non-dlopened) module then we can not + # link against it, someone is ignoring the earlier warnings + if /usr/bin/file -L $add 2> /dev/null | + $GREP ": [^:]* bundle" >/dev/null ; then + if test "X$dlopenmodule" != "X$lib"; then + $ECHO "*** Warning: lib $linklib is a module, not a shared library" + if test -z "$old_library" ; then + $ECHO + $ECHO "*** And there doesn't seem to be a static archive available" + $ECHO "*** The link will probably fail, sorry" + else + add="$dir/$old_library" + fi + elif test -n "$old_library"; then + add="$dir/$old_library" + fi + fi + esac + elif test "$hardcode_minus_L" = no; then + case $host in + *-*-sunos*) add_shlibpath="$dir" ;; + esac + add_dir="-L$dir" + add="-l$name" + elif test "$hardcode_shlibpath_var" = no; then + add_shlibpath="$dir" + add="-l$name" + else + lib_linked=no + fi + ;; + relink) + if test "$hardcode_direct" = yes && + test "$hardcode_direct_absolute" = no; then + add="$dir/$linklib" + elif test "$hardcode_minus_L" = yes; then + add_dir="-L$dir" + # Try looking first in the location we're being installed to. + if test -n "$inst_prefix_dir"; then + case $libdir in + [\\/]*) + add_dir="$add_dir -L$inst_prefix_dir$libdir" + ;; + esac + fi + add="-l$name" + elif test "$hardcode_shlibpath_var" = yes; then + add_shlibpath="$dir" + add="-l$name" + else + lib_linked=no + fi + ;; + *) lib_linked=no ;; + esac + + if test "$lib_linked" != yes; then + func_fatal_configuration "unsupported hardcode properties" + fi + + if test -n "$add_shlibpath"; then + case :$compile_shlibpath: in + *":$add_shlibpath:"*) ;; + *) compile_shlibpath="$compile_shlibpath$add_shlibpath:" ;; + esac + fi + if test "$linkmode" = prog; then + test -n "$add_dir" && compile_deplibs="$add_dir $compile_deplibs" + test -n "$add" && compile_deplibs="$add $compile_deplibs" + else + test -n "$add_dir" && deplibs="$add_dir $deplibs" + test -n "$add" && deplibs="$add $deplibs" + if test "$hardcode_direct" != yes && + test "$hardcode_minus_L" != yes && + test "$hardcode_shlibpath_var" = yes; then + case :$finalize_shlibpath: in + *":$libdir:"*) ;; + *) finalize_shlibpath="$finalize_shlibpath$libdir:" ;; + esac + fi + fi + fi + + if test "$linkmode" = prog || test "$mode" = relink; then + add_shlibpath= + add_dir= + add= + # Finalize command for both is simple: just hardcode it. + if test "$hardcode_direct" = yes && + test "$hardcode_direct_absolute" = no; then + add="$libdir/$linklib" + elif test "$hardcode_minus_L" = yes; then + add_dir="-L$libdir" + add="-l$name" + elif test "$hardcode_shlibpath_var" = yes; then + case :$finalize_shlibpath: in + *":$libdir:"*) ;; + *) finalize_shlibpath="$finalize_shlibpath$libdir:" ;; + esac + add="-l$name" + elif test "$hardcode_automatic" = yes; then + if test -n "$inst_prefix_dir" && + test -f "$inst_prefix_dir$libdir/$linklib" ; then + add="$inst_prefix_dir$libdir/$linklib" + else + add="$libdir/$linklib" + fi + else + # We cannot seem to hardcode it, guess we'll fake it. + add_dir="-L$libdir" + # Try looking first in the location we're being installed to. + if test -n "$inst_prefix_dir"; then + case $libdir in + [\\/]*) + add_dir="$add_dir -L$inst_prefix_dir$libdir" + ;; + esac + fi + add="-l$name" + fi + + if test "$linkmode" = prog; then + test -n "$add_dir" && finalize_deplibs="$add_dir $finalize_deplibs" + test -n "$add" && finalize_deplibs="$add $finalize_deplibs" + else + test -n "$add_dir" && deplibs="$add_dir $deplibs" + test -n "$add" && deplibs="$add $deplibs" + fi + fi + elif test "$linkmode" = prog; then + # Here we assume that one of hardcode_direct or hardcode_minus_L + # is not unsupported. This is valid on all known static and + # shared platforms. + if test "$hardcode_direct" != unsupported; then + test -n "$old_library" && linklib="$old_library" + compile_deplibs="$dir/$linklib $compile_deplibs" + finalize_deplibs="$dir/$linklib $finalize_deplibs" + else + compile_deplibs="-l$name -L$dir $compile_deplibs" + finalize_deplibs="-l$name -L$dir $finalize_deplibs" + fi + elif test "$build_libtool_libs" = yes; then + # Not a shared library + if test "$deplibs_check_method" != pass_all; then + # We're trying link a shared library against a static one + # but the system doesn't support it. + + # Just print a warning and add the library to dependency_libs so + # that the program can be linked against the static library. + $ECHO + $ECHO "*** Warning: This system can not link to static lib archive $lib." + $ECHO "*** I have the capability to make that library automatically link in when" + $ECHO "*** you link to this library. But I can only do this if you have a" + $ECHO "*** shared version of the library, which you do not appear to have." + if test "$module" = yes; then + $ECHO "*** But as you try to build a module library, libtool will still create " + $ECHO "*** a static module, that should work as long as the dlopening application" + $ECHO "*** is linked with the -dlopen flag to resolve symbols at runtime." + if test -z "$global_symbol_pipe"; then + $ECHO + $ECHO "*** However, this would only work if libtool was able to extract symbol" + $ECHO "*** lists from a program, using \`nm' or equivalent, but libtool could" + $ECHO "*** not find such a program. So, this module is probably useless." + $ECHO "*** \`nm' from GNU binutils and a full rebuild may help." + fi + if test "$build_old_libs" = no; then + build_libtool_libs=module + build_old_libs=yes + else + build_libtool_libs=no + fi + fi + else + deplibs="$dir/$old_library $deplibs" + link_static=yes + fi + fi # link shared/static library? + + if test "$linkmode" = lib; then + if test -n "$dependency_libs" && + { test "$hardcode_into_libs" != yes || + test "$build_old_libs" = yes || + test "$link_static" = yes; }; then + # Extract -R from dependency_libs + temp_deplibs= + for libdir in $dependency_libs; do + case $libdir in + -R*) func_stripname '-R' '' "$libdir" + temp_xrpath=$func_stripname_result + case " $xrpath " in + *" $temp_xrpath "*) ;; + *) xrpath="$xrpath $temp_xrpath";; + esac;; + *) temp_deplibs="$temp_deplibs $libdir";; + esac + done + dependency_libs="$temp_deplibs" + fi + + newlib_search_path="$newlib_search_path $absdir" + # Link against this library + test "$link_static" = no && newdependency_libs="$abs_ladir/$laname $newdependency_libs" + # ... and its dependency_libs + tmp_libs= + for deplib in $dependency_libs; do + newdependency_libs="$deplib $newdependency_libs" + if $opt_duplicate_deps ; then + case "$tmp_libs " in + *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; + esac + fi + tmp_libs="$tmp_libs $deplib" + done + + if test "$link_all_deplibs" != no; then + # Add the search paths of all dependency libraries + for deplib in $dependency_libs; do + case $deplib in + -L*) path="$deplib" ;; + *.la) + func_dirname "$deplib" "" "." + dir="$func_dirname_result" + # We need an absolute path. + case $dir in + [\\/]* | [A-Za-z]:[\\/]*) absdir="$dir" ;; + *) + absdir=`cd "$dir" && pwd` + if test -z "$absdir"; then + func_warning "cannot determine absolute directory name of \`$dir'" + absdir="$dir" + fi + ;; + esac + if $GREP "^installed=no" $deplib > /dev/null; then + case $host in + *-*-darwin*) + depdepl= + eval deplibrary_names=`${SED} -n -e 's/^library_names=\(.*\)$/\1/p' $deplib` + if test -n "$deplibrary_names" ; then + for tmp in $deplibrary_names ; do + depdepl=$tmp + done + if test -f "$absdir/$objdir/$depdepl" ; then + depdepl="$absdir/$objdir/$depdepl" + darwin_install_name=`${OTOOL} -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'` + if test -z "$darwin_install_name"; then + darwin_install_name=`${OTOOL64} -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'` + fi + compiler_flags="$compiler_flags ${wl}-dylib_file ${wl}${darwin_install_name}:${depdepl}" + linker_flags="$linker_flags -dylib_file ${darwin_install_name}:${depdepl}" + path= + fi + fi + ;; + *) + path="-L$absdir/$objdir" + ;; + esac + else + eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib` + test -z "$libdir" && \ + func_fatal_error "\`$deplib' is not a valid libtool archive" + test "$absdir" != "$libdir" && \ + func_warning "\`$deplib' seems to be moved" + + path="-L$absdir" + fi + ;; + esac + case " $deplibs " in + *" $path "*) ;; + *) deplibs="$path $deplibs" ;; + esac + done + fi # link_all_deplibs != no + fi # linkmode = lib + done # for deplib in $libs + if test "$pass" = link; then + if test "$linkmode" = "prog"; then + compile_deplibs="$new_inherited_linker_flags $compile_deplibs" + finalize_deplibs="$new_inherited_linker_flags $finalize_deplibs" + else + compiler_flags="$compiler_flags "`$ECHO "X $new_inherited_linker_flags" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'` + fi + fi + dependency_libs="$newdependency_libs" + if test "$pass" = dlpreopen; then + # Link the dlpreopened libraries before other libraries + for deplib in $save_deplibs; do + deplibs="$deplib $deplibs" + done + fi + if test "$pass" != dlopen; then + if test "$pass" != conv; then + # Make sure lib_search_path contains only unique directories. + lib_search_path= + for dir in $newlib_search_path; do + case "$lib_search_path " in + *" $dir "*) ;; + *) lib_search_path="$lib_search_path $dir" ;; + esac + done + newlib_search_path= + fi + + if test "$linkmode,$pass" != "prog,link"; then + vars="deplibs" + else + vars="compile_deplibs finalize_deplibs" + fi + for var in $vars dependency_libs; do + # Add libraries to $var in reverse order + eval tmp_libs=\"\$$var\" + new_libs= + for deplib in $tmp_libs; do + # FIXME: Pedantically, this is the right thing to do, so + # that some nasty dependency loop isn't accidentally + # broken: + #new_libs="$deplib $new_libs" + # Pragmatically, this seems to cause very few problems in + # practice: + case $deplib in + -L*) new_libs="$deplib $new_libs" ;; + -R*) ;; + *) + # And here is the reason: when a library appears more + # than once as an explicit dependence of a library, or + # is implicitly linked in more than once by the + # compiler, it is considered special, and multiple + # occurrences thereof are not removed. Compare this + # with having the same library being listed as a + # dependency of multiple other libraries: in this case, + # we know (pedantically, we assume) the library does not + # need to be listed more than once, so we keep only the + # last copy. This is not always right, but it is rare + # enough that we require users that really mean to play + # such unportable linking tricks to link the library + # using -Wl,-lname, so that libtool does not consider it + # for duplicate removal. + case " $specialdeplibs " in + *" $deplib "*) new_libs="$deplib $new_libs" ;; + *) + case " $new_libs " in + *" $deplib "*) ;; + *) new_libs="$deplib $new_libs" ;; + esac + ;; + esac + ;; + esac + done + tmp_libs= + for deplib in $new_libs; do + case $deplib in + -L*) + case " $tmp_libs " in + *" $deplib "*) ;; + *) tmp_libs="$tmp_libs $deplib" ;; + esac + ;; + *) tmp_libs="$tmp_libs $deplib" ;; + esac + done + eval $var=\"$tmp_libs\" + done # for var + fi + # Last step: remove runtime libs from dependency_libs + # (they stay in deplibs) + tmp_libs= + for i in $dependency_libs ; do + case " $predeps $postdeps $compiler_lib_search_path " in + *" $i "*) + i="" + ;; + esac + if test -n "$i" ; then + tmp_libs="$tmp_libs $i" + fi + done + dependency_libs=$tmp_libs + done # for pass + if test "$linkmode" = prog; then + dlfiles="$newdlfiles" + fi + if test "$linkmode" = prog || test "$linkmode" = lib; then + dlprefiles="$newdlprefiles" + fi + + case $linkmode in + oldlib) + if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then + func_warning "\`-dlopen' is ignored for archives" + fi + + case " $deplibs" in + *\ -l* | *\ -L*) + func_warning "\`-l' and \`-L' are ignored for archives" ;; + esac + + test -n "$rpath" && \ + func_warning "\`-rpath' is ignored for archives" + + test -n "$xrpath" && \ + func_warning "\`-R' is ignored for archives" + + test -n "$vinfo" && \ + func_warning "\`-version-info/-version-number' is ignored for archives" + + test -n "$release" && \ + func_warning "\`-release' is ignored for archives" + + test -n "$export_symbols$export_symbols_regex" && \ + func_warning "\`-export-symbols' is ignored for archives" + + # Now set the variables for building old libraries. + build_libtool_libs=no + oldlibs="$output" + objs="$objs$old_deplibs" + ;; + + lib) + # Make sure we only generate libraries of the form `libNAME.la'. + case $outputname in + lib*) + func_stripname 'lib' '.la' "$outputname" + name=$func_stripname_result + eval shared_ext=\"$shrext_cmds\" + eval libname=\"$libname_spec\" + ;; + *) + test "$module" = no && \ + func_fatal_help "libtool library \`$output' must begin with \`lib'" + + if test "$need_lib_prefix" != no; then + # Add the "lib" prefix for modules if required + func_stripname '' '.la' "$outputname" + name=$func_stripname_result + eval shared_ext=\"$shrext_cmds\" + eval libname=\"$libname_spec\" + else + func_stripname '' '.la' "$outputname" + libname=$func_stripname_result + fi + ;; + esac + + if test -n "$objs"; then + if test "$deplibs_check_method" != pass_all; then + func_fatal_error "cannot build libtool library \`$output' from non-libtool objects on this host:$objs" + else + $ECHO + $ECHO "*** Warning: Linking the shared library $output against the non-libtool" + $ECHO "*** objects $objs is not portable!" + libobjs="$libobjs $objs" + fi + fi + + test "$dlself" != no && \ + func_warning "\`-dlopen self' is ignored for libtool libraries" + + set dummy $rpath + shift + test "$#" -gt 1 && \ + func_warning "ignoring multiple \`-rpath's for a libtool library" + + install_libdir="$1" + + oldlibs= + if test -z "$rpath"; then + if test "$build_libtool_libs" = yes; then + # Building a libtool convenience library. + # Some compilers have problems with a `.al' extension so + # convenience libraries should have the same extension an + # archive normally would. + oldlibs="$output_objdir/$libname.$libext $oldlibs" + build_libtool_libs=convenience + build_old_libs=yes + fi + + test -n "$vinfo" && \ + func_warning "\`-version-info/-version-number' is ignored for convenience libraries" + + test -n "$release" && \ + func_warning "\`-release' is ignored for convenience libraries" + else + + # Parse the version information argument. + save_ifs="$IFS"; IFS=':' + set dummy $vinfo 0 0 0 + shift + IFS="$save_ifs" + + test -n "$7" && \ + func_fatal_help "too many parameters to \`-version-info'" + + # convert absolute version numbers to libtool ages + # this retains compatibility with .la files and attempts + # to make the code below a bit more comprehensible + + case $vinfo_number in + yes) + number_major="$1" + number_minor="$2" + number_revision="$3" + # + # There are really only two kinds -- those that + # use the current revision as the major version + # and those that subtract age and use age as + # a minor version. But, then there is irix + # which has an extra 1 added just for fun + # + case $version_type in + darwin|linux|osf|windows|none) + func_arith $number_major + $number_minor + current=$func_arith_result + age="$number_minor" + revision="$number_revision" + ;; + freebsd-aout|freebsd-elf|sunos) + current="$number_major" + revision="$number_minor" + age="0" + ;; + irix|nonstopux) + func_arith $number_major + $number_minor + current=$func_arith_result + age="$number_minor" + revision="$number_minor" + lt_irix_increment=no + ;; + esac + ;; + no) + current="$1" + revision="$2" + age="$3" + ;; + esac + + # Check that each of the things are valid numbers. + case $current in + 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; + *) + func_error "CURRENT \`$current' must be a nonnegative integer" + func_fatal_error "\`$vinfo' is not valid version information" + ;; + esac + + case $revision in + 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; + *) + func_error "REVISION \`$revision' must be a nonnegative integer" + func_fatal_error "\`$vinfo' is not valid version information" + ;; + esac + + case $age in + 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; + *) + func_error "AGE \`$age' must be a nonnegative integer" + func_fatal_error "\`$vinfo' is not valid version information" + ;; + esac + + if test "$age" -gt "$current"; then + func_error "AGE \`$age' is greater than the current interface number \`$current'" + func_fatal_error "\`$vinfo' is not valid version information" + fi + + # Calculate the version variables. + major= + versuffix= + verstring= + case $version_type in + none) ;; + + darwin) + # Like Linux, but with the current version available in + # verstring for coding it into the library header + func_arith $current - $age + major=.$func_arith_result + versuffix="$major.$age.$revision" + # Darwin ld doesn't like 0 for these options... + func_arith $current + 1 + minor_current=$func_arith_result + xlcverstring="${wl}-compatibility_version ${wl}$minor_current ${wl}-current_version ${wl}$minor_current.$revision" + verstring="-compatibility_version $minor_current -current_version $minor_current.$revision" + ;; + + freebsd-aout) + major=".$current" + versuffix=".$current.$revision"; + ;; + + freebsd-elf) + major=".$current" + versuffix=".$current" + ;; + + irix | nonstopux) + if test "X$lt_irix_increment" = "Xno"; then + func_arith $current - $age + else + func_arith $current - $age + 1 + fi + major=$func_arith_result + + case $version_type in + nonstopux) verstring_prefix=nonstopux ;; + *) verstring_prefix=sgi ;; + esac + verstring="$verstring_prefix$major.$revision" + + # Add in all the interfaces that we are compatible with. + loop=$revision + while test "$loop" -ne 0; do + func_arith $revision - $loop + iface=$func_arith_result + func_arith $loop - 1 + loop=$func_arith_result + verstring="$verstring_prefix$major.$iface:$verstring" + done + + # Before this point, $major must not contain `.'. + major=.$major + versuffix="$major.$revision" + ;; + + linux) + func_arith $current - $age + major=.$func_arith_result + versuffix="$major.$age.$revision" + ;; + + osf) + func_arith $current - $age + major=.$func_arith_result + versuffix=".$current.$age.$revision" + verstring="$current.$age.$revision" + + # Add in all the interfaces that we are compatible with. + loop=$age + while test "$loop" -ne 0; do + func_arith $current - $loop + iface=$func_arith_result + func_arith $loop - 1 + loop=$func_arith_result + verstring="$verstring:${iface}.0" + done + + # Make executables depend on our current version. + verstring="$verstring:${current}.0" + ;; + + qnx) + major=".$current" + versuffix=".$current" + ;; + + sunos) + major=".$current" + versuffix=".$current.$revision" + ;; + + windows) + # Use '-' rather than '.', since we only want one + # extension on DOS 8.3 filesystems. + func_arith $current - $age + major=$func_arith_result + versuffix="-$major" + ;; + + *) + func_fatal_configuration "unknown library version type \`$version_type'" + ;; + esac + + # Clear the version info if we defaulted, and they specified a release. + if test -z "$vinfo" && test -n "$release"; then + major= + case $version_type in + darwin) + # we can't check for "0.0" in archive_cmds due to quoting + # problems, so we reset it completely + verstring= + ;; + *) + verstring="0.0" + ;; + esac + if test "$need_version" = no; then + versuffix= + else + versuffix=".0.0" + fi + fi + + # Remove version info from name if versioning should be avoided + if test "$avoid_version" = yes && test "$need_version" = no; then + major= + versuffix= + verstring="" + fi + + # Check to see if the archive will have undefined symbols. + if test "$allow_undefined" = yes; then + if test "$allow_undefined_flag" = unsupported; then + func_warning "undefined symbols not allowed in $host shared libraries" + build_libtool_libs=no + build_old_libs=yes + fi + else + # Don't allow undefined symbols. + allow_undefined_flag="$no_undefined_flag" + fi + + fi + + func_generate_dlsyms "$libname" "$libname" "yes" + libobjs="$libobjs $symfileobj" + test "X$libobjs" = "X " && libobjs= + + if test "$mode" != relink; then + # Remove our outputs, but don't remove object files since they + # may have been created when compiling PIC objects. + removelist= + tempremovelist=`$ECHO "$output_objdir/*"` + for p in $tempremovelist; do + case $p in + *.$objext | *.gcno) + ;; + $output_objdir/$outputname | $output_objdir/$libname.* | $output_objdir/${libname}${release}.*) + if test "X$precious_files_regex" != "X"; then + if $ECHO "$p" | $EGREP -e "$precious_files_regex" >/dev/null 2>&1 + then + continue + fi + fi + removelist="$removelist $p" + ;; + *) ;; + esac + done + test -n "$removelist" && \ + func_show_eval "${RM}r \$removelist" + fi + + # Now set the variables for building old libraries. + if test "$build_old_libs" = yes && test "$build_libtool_libs" != convenience ; then + oldlibs="$oldlibs $output_objdir/$libname.$libext" + + # Transform .lo files to .o files. + oldobjs="$objs "`$ECHO "X$libobjs" | $SP2NL | $Xsed -e '/\.'${libext}'$/d' -e "$lo2o" | $NL2SP` + fi + + # Eliminate all temporary directories. + #for path in $notinst_path; do + # lib_search_path=`$ECHO "X$lib_search_path " | $Xsed -e "s% $path % %g"` + # deplibs=`$ECHO "X$deplibs " | $Xsed -e "s% -L$path % %g"` + # dependency_libs=`$ECHO "X$dependency_libs " | $Xsed -e "s% -L$path % %g"` + #done + + if test -n "$xrpath"; then + # If the user specified any rpath flags, then add them. + temp_xrpath= + for libdir in $xrpath; do + temp_xrpath="$temp_xrpath -R$libdir" + case "$finalize_rpath " in + *" $libdir "*) ;; + *) finalize_rpath="$finalize_rpath $libdir" ;; + esac + done + if test "$hardcode_into_libs" != yes || test "$build_old_libs" = yes; then + dependency_libs="$temp_xrpath $dependency_libs" + fi + fi + + # Make sure dlfiles contains only unique files that won't be dlpreopened + old_dlfiles="$dlfiles" + dlfiles= + for lib in $old_dlfiles; do + case " $dlprefiles $dlfiles " in + *" $lib "*) ;; + *) dlfiles="$dlfiles $lib" ;; + esac + done + + # Make sure dlprefiles contains only unique files + old_dlprefiles="$dlprefiles" + dlprefiles= + for lib in $old_dlprefiles; do + case "$dlprefiles " in + *" $lib "*) ;; + *) dlprefiles="$dlprefiles $lib" ;; + esac + done + + if test "$build_libtool_libs" = yes; then + if test -n "$rpath"; then + case $host in + *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-beos* | *-cegcc*) + # these systems don't actually have a c library (as such)! + ;; + *-*-rhapsody* | *-*-darwin1.[012]) + # Rhapsody C library is in the System framework + deplibs="$deplibs System.ltframework" + ;; + *-*-netbsd*) + # Don't link with libc until the a.out ld.so is fixed. + ;; + *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) + # Do not include libc due to us having libc/libc_r. + ;; + *-*-sco3.2v5* | *-*-sco5v6*) + # Causes problems with __ctype + ;; + *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) + # Compiler inserts libc in the correct place for threads to work + ;; + *) + # Add libc to deplibs on all other systems if necessary. + if test "$build_libtool_need_lc" = "yes"; then + deplibs="$deplibs -lc" + fi + ;; + esac + fi + + # Transform deplibs into only deplibs that can be linked in shared. + name_save=$name + libname_save=$libname + release_save=$release + versuffix_save=$versuffix + major_save=$major + # I'm not sure if I'm treating the release correctly. I think + # release should show up in the -l (ie -lgmp5) so we don't want to + # add it in twice. Is that correct? + release="" + versuffix="" + major="" + newdeplibs= + droppeddeps=no + case $deplibs_check_method in + pass_all) + # Don't check for shared/static. Everything works. + # This might be a little naive. We might want to check + # whether the library exists or not. But this is on + # osf3 & osf4 and I'm not really sure... Just + # implementing what was already the behavior. + newdeplibs=$deplibs + ;; + test_compile) + # This code stresses the "libraries are programs" paradigm to its + # limits. Maybe even breaks it. We compile a program, linking it + # against the deplibs as a proxy for the library. Then we can check + # whether they linked in statically or dynamically with ldd. + $opt_dry_run || $RM conftest.c + cat > conftest.c </dev/null` + for potent_lib in $potential_libs; do + # Follow soft links. + if ls -lLd "$potent_lib" 2>/dev/null | + $GREP " -> " >/dev/null; then + continue + fi + # The statement above tries to avoid entering an + # endless loop below, in case of cyclic links. + # We might still enter an endless loop, since a link + # loop can be closed while we follow links, + # but so what? + potlib="$potent_lib" + while test -h "$potlib" 2>/dev/null; do + potliblink=`ls -ld $potlib | ${SED} 's/.* -> //'` + case $potliblink in + [\\/]* | [A-Za-z]:[\\/]*) potlib="$potliblink";; + *) potlib=`$ECHO "X$potlib" | $Xsed -e 's,[^/]*$,,'`"$potliblink";; + esac + done + if eval $file_magic_cmd \"\$potlib\" 2>/dev/null | + $SED -e 10q | + $EGREP "$file_magic_regex" > /dev/null; then + newdeplibs="$newdeplibs $a_deplib" + a_deplib="" + break 2 + fi + done + done + fi + if test -n "$a_deplib" ; then + droppeddeps=yes + $ECHO + $ECHO "*** Warning: linker path does not have real file for library $a_deplib." + $ECHO "*** I have the capability to make that library automatically link in when" + $ECHO "*** you link to this library. But I can only do this if you have a" + $ECHO "*** shared version of the library, which you do not appear to have" + $ECHO "*** because I did check the linker path looking for a file starting" + if test -z "$potlib" ; then + $ECHO "*** with $libname but no candidates were found. (...for file magic test)" + else + $ECHO "*** with $libname and none of the candidates passed a file format test" + $ECHO "*** using a file magic. Last file checked: $potlib" + fi + fi + ;; + *) + # Add a -L argument. + newdeplibs="$newdeplibs $a_deplib" + ;; + esac + done # Gone through all deplibs. + ;; + match_pattern*) + set dummy $deplibs_check_method; shift + match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` + for a_deplib in $deplibs; do + case $a_deplib in + -l*) + func_stripname -l '' "$a_deplib" + name=$func_stripname_result + if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then + case " $predeps $postdeps " in + *" $a_deplib "*) + newdeplibs="$newdeplibs $a_deplib" + a_deplib="" + ;; + esac + fi + if test -n "$a_deplib" ; then + libname=`eval "\\$ECHO \"$libname_spec\""` + for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do + potential_libs=`ls $i/$libname[.-]* 2>/dev/null` + for potent_lib in $potential_libs; do + potlib="$potent_lib" # see symlink-check above in file_magic test + if eval "\$ECHO \"X$potent_lib\"" 2>/dev/null | $Xsed -e 10q | \ + $EGREP "$match_pattern_regex" > /dev/null; then + newdeplibs="$newdeplibs $a_deplib" + a_deplib="" + break 2 + fi + done + done + fi + if test -n "$a_deplib" ; then + droppeddeps=yes + $ECHO + $ECHO "*** Warning: linker path does not have real file for library $a_deplib." + $ECHO "*** I have the capability to make that library automatically link in when" + $ECHO "*** you link to this library. But I can only do this if you have a" + $ECHO "*** shared version of the library, which you do not appear to have" + $ECHO "*** because I did check the linker path looking for a file starting" + if test -z "$potlib" ; then + $ECHO "*** with $libname but no candidates were found. (...for regex pattern test)" + else + $ECHO "*** with $libname and none of the candidates passed a file format test" + $ECHO "*** using a regex pattern. Last file checked: $potlib" + fi + fi + ;; + *) + # Add a -L argument. + newdeplibs="$newdeplibs $a_deplib" + ;; + esac + done # Gone through all deplibs. + ;; + none | unknown | *) + newdeplibs="" + tmp_deplibs=`$ECHO "X $deplibs" | $Xsed \ + -e 's/ -lc$//' -e 's/ -[LR][^ ]*//g'` + if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then + for i in $predeps $postdeps ; do + # can't use Xsed below, because $i might contain '/' + tmp_deplibs=`$ECHO "X $tmp_deplibs" | $Xsed -e "s,$i,,"` + done + fi + if $ECHO "X $tmp_deplibs" | $Xsed -e 's/[ ]//g' | + $GREP . >/dev/null; then + $ECHO + if test "X$deplibs_check_method" = "Xnone"; then + $ECHO "*** Warning: inter-library dependencies are not supported in this platform." + else + $ECHO "*** Warning: inter-library dependencies are not known to be supported." + fi + $ECHO "*** All declared inter-library dependencies are being dropped." + droppeddeps=yes + fi + ;; + esac + versuffix=$versuffix_save + major=$major_save + release=$release_save + libname=$libname_save + name=$name_save + + case $host in + *-*-rhapsody* | *-*-darwin1.[012]) + # On Rhapsody replace the C library with the System framework + newdeplibs=`$ECHO "X $newdeplibs" | $Xsed -e 's/ -lc / System.ltframework /'` + ;; + esac + + if test "$droppeddeps" = yes; then + if test "$module" = yes; then + $ECHO + $ECHO "*** Warning: libtool could not satisfy all declared inter-library" + $ECHO "*** dependencies of module $libname. Therefore, libtool will create" + $ECHO "*** a static module, that should work as long as the dlopening" + $ECHO "*** application is linked with the -dlopen flag." + if test -z "$global_symbol_pipe"; then + $ECHO + $ECHO "*** However, this would only work if libtool was able to extract symbol" + $ECHO "*** lists from a program, using \`nm' or equivalent, but libtool could" + $ECHO "*** not find such a program. So, this module is probably useless." + $ECHO "*** \`nm' from GNU binutils and a full rebuild may help." + fi + if test "$build_old_libs" = no; then + oldlibs="$output_objdir/$libname.$libext" + build_libtool_libs=module + build_old_libs=yes + else + build_libtool_libs=no + fi + else + $ECHO "*** The inter-library dependencies that have been dropped here will be" + $ECHO "*** automatically added whenever a program is linked with this library" + $ECHO "*** or is declared to -dlopen it." + + if test "$allow_undefined" = no; then + $ECHO + $ECHO "*** Since this library must not contain undefined symbols," + $ECHO "*** because either the platform does not support them or" + $ECHO "*** it was explicitly requested with -no-undefined," + $ECHO "*** libtool will only create a static version of it." + if test "$build_old_libs" = no; then + oldlibs="$output_objdir/$libname.$libext" + build_libtool_libs=module + build_old_libs=yes + else + build_libtool_libs=no + fi + fi + fi + fi + # Done checking deplibs! + deplibs=$newdeplibs + fi + # Time to change all our "foo.ltframework" stuff back to "-framework foo" + case $host in + *-*-darwin*) + newdeplibs=`$ECHO "X $newdeplibs" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'` + new_inherited_linker_flags=`$ECHO "X $new_inherited_linker_flags" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'` + deplibs=`$ECHO "X $deplibs" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'` + ;; + esac + + # move library search paths that coincide with paths to not yet + # installed libraries to the beginning of the library search list + new_libs= + for path in $notinst_path; do + case " $new_libs " in + *" -L$path/$objdir "*) ;; + *) + case " $deplibs " in + *" -L$path/$objdir "*) + new_libs="$new_libs -L$path/$objdir" ;; + esac + ;; + esac + done + for deplib in $deplibs; do + case $deplib in + -L*) + case " $new_libs " in + *" $deplib "*) ;; + *) new_libs="$new_libs $deplib" ;; + esac + ;; + *) new_libs="$new_libs $deplib" ;; + esac + done + deplibs="$new_libs" + + # All the library-specific variables (install_libdir is set above). + library_names= + old_library= + dlname= + + # Test again, we may have decided not to build it any more + if test "$build_libtool_libs" = yes; then + if test "$hardcode_into_libs" = yes; then + # Hardcode the library paths + hardcode_libdirs= + dep_rpath= + rpath="$finalize_rpath" + test "$mode" != relink && rpath="$compile_rpath$rpath" + for libdir in $rpath; do + if test -n "$hardcode_libdir_flag_spec"; then + if test -n "$hardcode_libdir_separator"; then + if test -z "$hardcode_libdirs"; then + hardcode_libdirs="$libdir" + else + # Just accumulate the unique libdirs. + case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in + *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) + ;; + *) + hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir" + ;; + esac + fi + else + eval flag=\"$hardcode_libdir_flag_spec\" + dep_rpath="$dep_rpath $flag" + fi + elif test -n "$runpath_var"; then + case "$perm_rpath " in + *" $libdir "*) ;; + *) perm_rpath="$perm_rpath $libdir" ;; + esac + fi + done + # Substitute the hardcoded libdirs into the rpath. + if test -n "$hardcode_libdir_separator" && + test -n "$hardcode_libdirs"; then + libdir="$hardcode_libdirs" + if test -n "$hardcode_libdir_flag_spec_ld"; then + eval dep_rpath=\"$hardcode_libdir_flag_spec_ld\" + else + eval dep_rpath=\"$hardcode_libdir_flag_spec\" + fi + fi + if test -n "$runpath_var" && test -n "$perm_rpath"; then + # We should set the runpath_var. + rpath= + for dir in $perm_rpath; do + rpath="$rpath$dir:" + done + eval "$runpath_var='$rpath\$$runpath_var'; export $runpath_var" + fi + test -n "$dep_rpath" && deplibs="$dep_rpath $deplibs" + fi + + shlibpath="$finalize_shlibpath" + test "$mode" != relink && shlibpath="$compile_shlibpath$shlibpath" + if test -n "$shlibpath"; then + eval "$shlibpath_var='$shlibpath\$$shlibpath_var'; export $shlibpath_var" + fi + + # Get the real and link names of the library. + eval shared_ext=\"$shrext_cmds\" + eval library_names=\"$library_names_spec\" + set dummy $library_names + shift + realname="$1" + shift + + if test -n "$soname_spec"; then + eval soname=\"$soname_spec\" + else + soname="$realname" + fi + if test -z "$dlname"; then + dlname=$soname + fi + + lib="$output_objdir/$realname" + linknames= + for link + do + linknames="$linknames $link" + done + + # Use standard objects if they are pic + test -z "$pic_flag" && libobjs=`$ECHO "X$libobjs" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP` + test "X$libobjs" = "X " && libobjs= + + delfiles= + if test -n "$export_symbols" && test -n "$include_expsyms"; then + $opt_dry_run || cp "$export_symbols" "$output_objdir/$libname.uexp" + export_symbols="$output_objdir/$libname.uexp" + delfiles="$delfiles $export_symbols" + fi + + orig_export_symbols= + case $host_os in + cygwin* | mingw* | cegcc*) + if test -n "$export_symbols" && test -z "$export_symbols_regex"; then + # exporting using user supplied symfile + if test "x`$SED 1q $export_symbols`" != xEXPORTS; then + # and it's NOT already a .def file. Must figure out + # which of the given symbols are data symbols and tag + # them as such. So, trigger use of export_symbols_cmds. + # export_symbols gets reassigned inside the "prepare + # the list of exported symbols" if statement, so the + # include_expsyms logic still works. + orig_export_symbols="$export_symbols" + export_symbols= + always_export_symbols=yes + fi + fi + ;; + esac + + # Prepare the list of exported symbols + if test -z "$export_symbols"; then + if test "$always_export_symbols" = yes || test -n "$export_symbols_regex"; then + func_verbose "generating symbol list for \`$libname.la'" + export_symbols="$output_objdir/$libname.exp" + $opt_dry_run || $RM $export_symbols + cmds=$export_symbols_cmds + save_ifs="$IFS"; IFS='~' + for cmd in $cmds; do + IFS="$save_ifs" + eval cmd=\"$cmd\" + func_len " $cmd" + len=$func_len_result + if test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then + func_show_eval "$cmd" 'exit $?' + skipped_export=false + else + # The command line is too long to execute in one step. + func_verbose "using reloadable object file for export list..." + skipped_export=: + # Break out early, otherwise skipped_export may be + # set to false by a later but shorter cmd. + break + fi + done + IFS="$save_ifs" + if test -n "$export_symbols_regex" && test "X$skipped_export" != "X:"; then + func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' + func_show_eval '$MV "${export_symbols}T" "$export_symbols"' + fi + fi + fi + + if test -n "$export_symbols" && test -n "$include_expsyms"; then + tmp_export_symbols="$export_symbols" + test -n "$orig_export_symbols" && tmp_export_symbols="$orig_export_symbols" + $opt_dry_run || eval '$ECHO "X$include_expsyms" | $Xsed | $SP2NL >> "$tmp_export_symbols"' + fi + + if test "X$skipped_export" != "X:" && test -n "$orig_export_symbols"; then + # The given exports_symbols file has to be filtered, so filter it. + func_verbose "filter symbol list for \`$libname.la' to tag DATA exports" + # FIXME: $output_objdir/$libname.filter potentially contains lots of + # 's' commands which not all seds can handle. GNU sed should be fine + # though. Also, the filter scales superlinearly with the number of + # global variables. join(1) would be nice here, but unfortunately + # isn't a blessed tool. + $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter + delfiles="$delfiles $export_symbols $output_objdir/$libname.filter" + export_symbols=$output_objdir/$libname.def + $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols + fi + + tmp_deplibs= + for test_deplib in $deplibs; do + case " $convenience " in + *" $test_deplib "*) ;; + *) + tmp_deplibs="$tmp_deplibs $test_deplib" + ;; + esac + done + deplibs="$tmp_deplibs" + + if test -n "$convenience"; then + if test -n "$whole_archive_flag_spec" && + test "$compiler_needs_object" = yes && + test -z "$libobjs"; then + # extract the archives, so we have objects to list. + # TODO: could optimize this to just extract one archive. + whole_archive_flag_spec= + fi + if test -n "$whole_archive_flag_spec"; then + save_libobjs=$libobjs + eval libobjs=\"\$libobjs $whole_archive_flag_spec\" + test "X$libobjs" = "X " && libobjs= + else + gentop="$output_objdir/${outputname}x" + generated="$generated $gentop" + + func_extract_archives $gentop $convenience + libobjs="$libobjs $func_extract_archives_result" + test "X$libobjs" = "X " && libobjs= + fi + fi + + if test "$thread_safe" = yes && test -n "$thread_safe_flag_spec"; then + eval flag=\"$thread_safe_flag_spec\" + linker_flags="$linker_flags $flag" + fi + + # Make a backup of the uninstalled library when relinking + if test "$mode" = relink; then + $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}U && $MV $realname ${realname}U)' || exit $? + fi + + # Do each of the archive commands. + if test "$module" = yes && test -n "$module_cmds" ; then + if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then + eval test_cmds=\"$module_expsym_cmds\" + cmds=$module_expsym_cmds + else + eval test_cmds=\"$module_cmds\" + cmds=$module_cmds + fi + else + if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then + eval test_cmds=\"$archive_expsym_cmds\" + cmds=$archive_expsym_cmds + else + eval test_cmds=\"$archive_cmds\" + cmds=$archive_cmds + fi + fi + + if test "X$skipped_export" != "X:" && + func_len " $test_cmds" && + len=$func_len_result && + test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then + : + else + # The command line is too long to link in one step, link piecewise + # or, if using GNU ld and skipped_export is not :, use a linker + # script. + + # Save the value of $output and $libobjs because we want to + # use them later. If we have whole_archive_flag_spec, we + # want to use save_libobjs as it was before + # whole_archive_flag_spec was expanded, because we can't + # assume the linker understands whole_archive_flag_spec. + # This may have to be revisited, in case too many + # convenience libraries get linked in and end up exceeding + # the spec. + if test -z "$convenience" || test -z "$whole_archive_flag_spec"; then + save_libobjs=$libobjs + fi + save_output=$output + output_la=`$ECHO "X$output" | $Xsed -e "$basename"` + + # Clear the reloadable object creation command queue and + # initialize k to one. + test_cmds= + concat_cmds= + objlist= + last_robj= + k=1 + + if test -n "$save_libobjs" && test "X$skipped_export" != "X:" && test "$with_gnu_ld" = yes; then + output=${output_objdir}/${output_la}.lnkscript + func_verbose "creating GNU ld script: $output" + $ECHO 'INPUT (' > $output + for obj in $save_libobjs + do + $ECHO "$obj" >> $output + done + $ECHO ')' >> $output + delfiles="$delfiles $output" + elif test -n "$save_libobjs" && test "X$skipped_export" != "X:" && test "X$file_list_spec" != X; then + output=${output_objdir}/${output_la}.lnk + func_verbose "creating linker input file list: $output" + : > $output + set x $save_libobjs + shift + firstobj= + if test "$compiler_needs_object" = yes; then + firstobj="$1 " + shift + fi + for obj + do + $ECHO "$obj" >> $output + done + delfiles="$delfiles $output" + output=$firstobj\"$file_list_spec$output\" + else + if test -n "$save_libobjs"; then + func_verbose "creating reloadable object files..." + output=$output_objdir/$output_la-${k}.$objext + eval test_cmds=\"$reload_cmds\" + func_len " $test_cmds" + len0=$func_len_result + len=$len0 + + # Loop over the list of objects to be linked. + for obj in $save_libobjs + do + func_len " $obj" + func_arith $len + $func_len_result + len=$func_arith_result + if test "X$objlist" = X || + test "$len" -lt "$max_cmd_len"; then + func_append objlist " $obj" + else + # The command $test_cmds is almost too long, add a + # command to the queue. + if test "$k" -eq 1 ; then + # The first file doesn't have a previous command to add. + eval concat_cmds=\"$reload_cmds $objlist $last_robj\" + else + # All subsequent reloadable object files will link in + # the last one created. + eval concat_cmds=\"\$concat_cmds~$reload_cmds $objlist $last_robj~\$RM $last_robj\" + fi + last_robj=$output_objdir/$output_la-${k}.$objext + func_arith $k + 1 + k=$func_arith_result + output=$output_objdir/$output_la-${k}.$objext + objlist=$obj + func_len " $last_robj" + func_arith $len0 + $func_len_result + len=$func_arith_result + fi + done + # Handle the remaining objects by creating one last + # reloadable object file. All subsequent reloadable object + # files will link in the last one created. + test -z "$concat_cmds" || concat_cmds=$concat_cmds~ + eval concat_cmds=\"\${concat_cmds}$reload_cmds $objlist $last_robj\" + if test -n "$last_robj"; then + eval concat_cmds=\"\${concat_cmds}~\$RM $last_robj\" + fi + delfiles="$delfiles $output" + + else + output= + fi + + if ${skipped_export-false}; then + func_verbose "generating symbol list for \`$libname.la'" + export_symbols="$output_objdir/$libname.exp" + $opt_dry_run || $RM $export_symbols + libobjs=$output + # Append the command to create the export file. + test -z "$concat_cmds" || concat_cmds=$concat_cmds~ + eval concat_cmds=\"\$concat_cmds$export_symbols_cmds\" + if test -n "$last_robj"; then + eval concat_cmds=\"\$concat_cmds~\$RM $last_robj\" + fi + fi + + test -n "$save_libobjs" && + func_verbose "creating a temporary reloadable object file: $output" + + # Loop through the commands generated above and execute them. + save_ifs="$IFS"; IFS='~' + for cmd in $concat_cmds; do + IFS="$save_ifs" + $opt_silent || { + func_quote_for_expand "$cmd" + eval "func_echo $func_quote_for_expand_result" + } + $opt_dry_run || eval "$cmd" || { + lt_exit=$? + + # Restore the uninstalled library and exit + if test "$mode" = relink; then + ( cd "$output_objdir" && \ + $RM "${realname}T" && \ + $MV "${realname}U" "$realname" ) + fi + + exit $lt_exit + } + done + IFS="$save_ifs" + + if test -n "$export_symbols_regex" && ${skipped_export-false}; then + func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' + func_show_eval '$MV "${export_symbols}T" "$export_symbols"' + fi + fi + + if ${skipped_export-false}; then + if test -n "$export_symbols" && test -n "$include_expsyms"; then + tmp_export_symbols="$export_symbols" + test -n "$orig_export_symbols" && tmp_export_symbols="$orig_export_symbols" + $opt_dry_run || eval '$ECHO "X$include_expsyms" | $Xsed | $SP2NL >> "$tmp_export_symbols"' + fi + + if test -n "$orig_export_symbols"; then + # The given exports_symbols file has to be filtered, so filter it. + func_verbose "filter symbol list for \`$libname.la' to tag DATA exports" + # FIXME: $output_objdir/$libname.filter potentially contains lots of + # 's' commands which not all seds can handle. GNU sed should be fine + # though. Also, the filter scales superlinearly with the number of + # global variables. join(1) would be nice here, but unfortunately + # isn't a blessed tool. + $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter + delfiles="$delfiles $export_symbols $output_objdir/$libname.filter" + export_symbols=$output_objdir/$libname.def + $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols + fi + fi + + libobjs=$output + # Restore the value of output. + output=$save_output + + if test -n "$convenience" && test -n "$whole_archive_flag_spec"; then + eval libobjs=\"\$libobjs $whole_archive_flag_spec\" + test "X$libobjs" = "X " && libobjs= + fi + # Expand the library linking commands again to reset the + # value of $libobjs for piecewise linking. + + # Do each of the archive commands. + if test "$module" = yes && test -n "$module_cmds" ; then + if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then + cmds=$module_expsym_cmds + else + cmds=$module_cmds + fi + else + if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then + cmds=$archive_expsym_cmds + else + cmds=$archive_cmds + fi + fi + fi + + if test -n "$delfiles"; then + # Append the command to remove temporary files to $cmds. + eval cmds=\"\$cmds~\$RM $delfiles\" + fi + + # Add any objects from preloaded convenience libraries + if test -n "$dlprefiles"; then + gentop="$output_objdir/${outputname}x" + generated="$generated $gentop" + + func_extract_archives $gentop $dlprefiles + libobjs="$libobjs $func_extract_archives_result" + test "X$libobjs" = "X " && libobjs= + fi + + save_ifs="$IFS"; IFS='~' + for cmd in $cmds; do + IFS="$save_ifs" + eval cmd=\"$cmd\" + $opt_silent || { + func_quote_for_expand "$cmd" + eval "func_echo $func_quote_for_expand_result" + } + $opt_dry_run || eval "$cmd" || { + lt_exit=$? + + # Restore the uninstalled library and exit + if test "$mode" = relink; then + ( cd "$output_objdir" && \ + $RM "${realname}T" && \ + $MV "${realname}U" "$realname" ) + fi + + exit $lt_exit + } + done + IFS="$save_ifs" + + # Restore the uninstalled library and exit + if test "$mode" = relink; then + $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}T && $MV $realname ${realname}T && $MV ${realname}U $realname)' || exit $? + + if test -n "$convenience"; then + if test -z "$whole_archive_flag_spec"; then + func_show_eval '${RM}r "$gentop"' + fi + fi + + exit $EXIT_SUCCESS + fi + + # Create links to the real library. + for linkname in $linknames; do + if test "$realname" != "$linkname"; then + func_show_eval '(cd "$output_objdir" && $RM "$linkname" && $LN_S "$realname" "$linkname")' 'exit $?' + fi + done + + # If -module or -export-dynamic was specified, set the dlname. + if test "$module" = yes || test "$export_dynamic" = yes; then + # On all known operating systems, these are identical. + dlname="$soname" + fi + fi + ;; + + obj) + if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then + func_warning "\`-dlopen' is ignored for objects" + fi + + case " $deplibs" in + *\ -l* | *\ -L*) + func_warning "\`-l' and \`-L' are ignored for objects" ;; + esac + + test -n "$rpath" && \ + func_warning "\`-rpath' is ignored for objects" + + test -n "$xrpath" && \ + func_warning "\`-R' is ignored for objects" + + test -n "$vinfo" && \ + func_warning "\`-version-info' is ignored for objects" + + test -n "$release" && \ + func_warning "\`-release' is ignored for objects" + + case $output in + *.lo) + test -n "$objs$old_deplibs" && \ + func_fatal_error "cannot build library object \`$output' from non-libtool objects" + + libobj=$output + func_lo2o "$libobj" + obj=$func_lo2o_result + ;; + *) + libobj= + obj="$output" + ;; + esac + + # Delete the old objects. + $opt_dry_run || $RM $obj $libobj + + # Objects from convenience libraries. This assumes + # single-version convenience libraries. Whenever we create + # different ones for PIC/non-PIC, this we'll have to duplicate + # the extraction. + reload_conv_objs= + gentop= + # reload_cmds runs $LD directly, so let us get rid of + # -Wl from whole_archive_flag_spec and hope we can get by with + # turning comma into space.. + wl= + + if test -n "$convenience"; then + if test -n "$whole_archive_flag_spec"; then + eval tmp_whole_archive_flags=\"$whole_archive_flag_spec\" + reload_conv_objs=$reload_objs\ `$ECHO "X$tmp_whole_archive_flags" | $Xsed -e 's|,| |g'` + else + gentop="$output_objdir/${obj}x" + generated="$generated $gentop" + + func_extract_archives $gentop $convenience + reload_conv_objs="$reload_objs $func_extract_archives_result" + fi + fi + + # Create the old-style object. + reload_objs="$objs$old_deplibs "`$ECHO "X$libobjs" | $SP2NL | $Xsed -e '/\.'${libext}$'/d' -e '/\.lib$/d' -e "$lo2o" | $NL2SP`" $reload_conv_objs" ### testsuite: skip nested quoting test + + output="$obj" + func_execute_cmds "$reload_cmds" 'exit $?' + + # Exit if we aren't doing a library object file. + if test -z "$libobj"; then + if test -n "$gentop"; then + func_show_eval '${RM}r "$gentop"' + fi + + exit $EXIT_SUCCESS + fi + + if test "$build_libtool_libs" != yes; then + if test -n "$gentop"; then + func_show_eval '${RM}r "$gentop"' + fi + + # Create an invalid libtool object if no PIC, so that we don't + # accidentally link it into a program. + # $show "echo timestamp > $libobj" + # $opt_dry_run || eval "echo timestamp > $libobj" || exit $? + exit $EXIT_SUCCESS + fi + + if test -n "$pic_flag" || test "$pic_mode" != default; then + # Only do commands if we really have different PIC objects. + reload_objs="$libobjs $reload_conv_objs" + output="$libobj" + func_execute_cmds "$reload_cmds" 'exit $?' + fi + + if test -n "$gentop"; then + func_show_eval '${RM}r "$gentop"' + fi + + exit $EXIT_SUCCESS + ;; + + prog) + case $host in + *cygwin*) func_stripname '' '.exe' "$output" + output=$func_stripname_result.exe;; + esac + test -n "$vinfo" && \ + func_warning "\`-version-info' is ignored for programs" + + test -n "$release" && \ + func_warning "\`-release' is ignored for programs" + + test "$preload" = yes \ + && test "$dlopen_support" = unknown \ + && test "$dlopen_self" = unknown \ + && test "$dlopen_self_static" = unknown && \ + func_warning "\`LT_INIT([dlopen])' not used. Assuming no dlopen support." + + case $host in + *-*-rhapsody* | *-*-darwin1.[012]) + # On Rhapsody replace the C library is the System framework + compile_deplibs=`$ECHO "X $compile_deplibs" | $Xsed -e 's/ -lc / System.ltframework /'` + finalize_deplibs=`$ECHO "X $finalize_deplibs" | $Xsed -e 's/ -lc / System.ltframework /'` + ;; + esac + + case $host in + *-*-darwin*) + # Don't allow lazy linking, it breaks C++ global constructors + # But is supposedly fixed on 10.4 or later (yay!). + if test "$tagname" = CXX ; then + case ${MACOSX_DEPLOYMENT_TARGET-10.0} in + 10.[0123]) + compile_command="$compile_command ${wl}-bind_at_load" + finalize_command="$finalize_command ${wl}-bind_at_load" + ;; + esac + fi + # Time to change all our "foo.ltframework" stuff back to "-framework foo" + compile_deplibs=`$ECHO "X $compile_deplibs" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'` + finalize_deplibs=`$ECHO "X $finalize_deplibs" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'` + ;; + esac + + + # move library search paths that coincide with paths to not yet + # installed libraries to the beginning of the library search list + new_libs= + for path in $notinst_path; do + case " $new_libs " in + *" -L$path/$objdir "*) ;; + *) + case " $compile_deplibs " in + *" -L$path/$objdir "*) + new_libs="$new_libs -L$path/$objdir" ;; + esac + ;; + esac + done + for deplib in $compile_deplibs; do + case $deplib in + -L*) + case " $new_libs " in + *" $deplib "*) ;; + *) new_libs="$new_libs $deplib" ;; + esac + ;; + *) new_libs="$new_libs $deplib" ;; + esac + done + compile_deplibs="$new_libs" + + + compile_command="$compile_command $compile_deplibs" + finalize_command="$finalize_command $finalize_deplibs" + + if test -n "$rpath$xrpath"; then + # If the user specified any rpath flags, then add them. + for libdir in $rpath $xrpath; do + # This is the magic to use -rpath. + case "$finalize_rpath " in + *" $libdir "*) ;; + *) finalize_rpath="$finalize_rpath $libdir" ;; + esac + done + fi + + # Now hardcode the library paths + rpath= + hardcode_libdirs= + for libdir in $compile_rpath $finalize_rpath; do + if test -n "$hardcode_libdir_flag_spec"; then + if test -n "$hardcode_libdir_separator"; then + if test -z "$hardcode_libdirs"; then + hardcode_libdirs="$libdir" + else + # Just accumulate the unique libdirs. + case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in + *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) + ;; + *) + hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir" + ;; + esac + fi + else + eval flag=\"$hardcode_libdir_flag_spec\" + rpath="$rpath $flag" + fi + elif test -n "$runpath_var"; then + case "$perm_rpath " in + *" $libdir "*) ;; + *) perm_rpath="$perm_rpath $libdir" ;; + esac + fi + case $host in + *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) + testbindir=`${ECHO} "$libdir" | ${SED} -e 's*/lib$*/bin*'` + case :$dllsearchpath: in + *":$libdir:"*) ;; + ::) dllsearchpath=$libdir;; + *) dllsearchpath="$dllsearchpath:$libdir";; + esac + case :$dllsearchpath: in + *":$testbindir:"*) ;; + ::) dllsearchpath=$testbindir;; + *) dllsearchpath="$dllsearchpath:$testbindir";; + esac + ;; + esac + done + # Substitute the hardcoded libdirs into the rpath. + if test -n "$hardcode_libdir_separator" && + test -n "$hardcode_libdirs"; then + libdir="$hardcode_libdirs" + eval rpath=\" $hardcode_libdir_flag_spec\" + fi + compile_rpath="$rpath" + + rpath= + hardcode_libdirs= + for libdir in $finalize_rpath; do + if test -n "$hardcode_libdir_flag_spec"; then + if test -n "$hardcode_libdir_separator"; then + if test -z "$hardcode_libdirs"; then + hardcode_libdirs="$libdir" + else + # Just accumulate the unique libdirs. + case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in + *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) + ;; + *) + hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir" + ;; + esac + fi + else + eval flag=\"$hardcode_libdir_flag_spec\" + rpath="$rpath $flag" + fi + elif test -n "$runpath_var"; then + case "$finalize_perm_rpath " in + *" $libdir "*) ;; + *) finalize_perm_rpath="$finalize_perm_rpath $libdir" ;; + esac + fi + done + # Substitute the hardcoded libdirs into the rpath. + if test -n "$hardcode_libdir_separator" && + test -n "$hardcode_libdirs"; then + libdir="$hardcode_libdirs" + eval rpath=\" $hardcode_libdir_flag_spec\" + fi + finalize_rpath="$rpath" + + if test -n "$libobjs" && test "$build_old_libs" = yes; then + # Transform all the library objects into standard objects. + compile_command=`$ECHO "X$compile_command" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP` + finalize_command=`$ECHO "X$finalize_command" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP` + fi + + func_generate_dlsyms "$outputname" "@PROGRAM@" "no" + + # template prelinking step + if test -n "$prelink_cmds"; then + func_execute_cmds "$prelink_cmds" 'exit $?' + fi + + wrappers_required=yes + case $host in + *cygwin* | *mingw* ) + if test "$build_libtool_libs" != yes; then + wrappers_required=no + fi + ;; + *cegcc) + # Disable wrappers for cegcc, we are cross compiling anyway. + wrappers_required=no + ;; + *) + if test "$need_relink" = no || test "$build_libtool_libs" != yes; then + wrappers_required=no + fi + ;; + esac + if test "$wrappers_required" = no; then + # Replace the output file specification. + compile_command=`$ECHO "X$compile_command" | $Xsed -e 's%@OUTPUT@%'"$output"'%g'` + link_command="$compile_command$compile_rpath" + + # We have no uninstalled library dependencies, so finalize right now. + exit_status=0 + func_show_eval "$link_command" 'exit_status=$?' + + # Delete the generated files. + if test -f "$output_objdir/${outputname}S.${objext}"; then + func_show_eval '$RM "$output_objdir/${outputname}S.${objext}"' + fi + + exit $exit_status + fi + + if test -n "$compile_shlibpath$finalize_shlibpath"; then + compile_command="$shlibpath_var=\"$compile_shlibpath$finalize_shlibpath\$$shlibpath_var\" $compile_command" + fi + if test -n "$finalize_shlibpath"; then + finalize_command="$shlibpath_var=\"$finalize_shlibpath\$$shlibpath_var\" $finalize_command" + fi + + compile_var= + finalize_var= + if test -n "$runpath_var"; then + if test -n "$perm_rpath"; then + # We should set the runpath_var. + rpath= + for dir in $perm_rpath; do + rpath="$rpath$dir:" + done + compile_var="$runpath_var=\"$rpath\$$runpath_var\" " + fi + if test -n "$finalize_perm_rpath"; then + # We should set the runpath_var. + rpath= + for dir in $finalize_perm_rpath; do + rpath="$rpath$dir:" + done + finalize_var="$runpath_var=\"$rpath\$$runpath_var\" " + fi + fi + + if test "$no_install" = yes; then + # We don't need to create a wrapper script. + link_command="$compile_var$compile_command$compile_rpath" + # Replace the output file specification. + link_command=`$ECHO "X$link_command" | $Xsed -e 's%@OUTPUT@%'"$output"'%g'` + # Delete the old output file. + $opt_dry_run || $RM $output + # Link the executable and exit + func_show_eval "$link_command" 'exit $?' + exit $EXIT_SUCCESS + fi + + if test "$hardcode_action" = relink; then + # Fast installation is not supported + link_command="$compile_var$compile_command$compile_rpath" + relink_command="$finalize_var$finalize_command$finalize_rpath" + + func_warning "this platform does not like uninstalled shared libraries" + func_warning "\`$output' will be relinked during installation" + else + if test "$fast_install" != no; then + link_command="$finalize_var$compile_command$finalize_rpath" + if test "$fast_install" = yes; then + relink_command=`$ECHO "X$compile_var$compile_command$compile_rpath" | $Xsed -e 's%@OUTPUT@%\$progdir/\$file%g'` + else + # fast_install is set to needless + relink_command= + fi + else + link_command="$compile_var$compile_command$compile_rpath" + relink_command="$finalize_var$finalize_command$finalize_rpath" + fi + fi + + # Replace the output file specification. + link_command=`$ECHO "X$link_command" | $Xsed -e 's%@OUTPUT@%'"$output_objdir/$outputname"'%g'` + + # Delete the old output files. + $opt_dry_run || $RM $output $output_objdir/$outputname $output_objdir/lt-$outputname + + func_show_eval "$link_command" 'exit $?' + + # Now create the wrapper script. + func_verbose "creating $output" + + # Quote the relink command for shipping. + if test -n "$relink_command"; then + # Preserve any variables that may affect compiler behavior + for var in $variables_saved_for_relink; do + if eval test -z \"\${$var+set}\"; then + relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command" + elif eval var_value=\$$var; test -z "$var_value"; then + relink_command="$var=; export $var; $relink_command" + else + func_quote_for_eval "$var_value" + relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command" + fi + done + relink_command="(cd `pwd`; $relink_command)" + relink_command=`$ECHO "X$relink_command" | $Xsed -e "$sed_quote_subst"` + fi + + # Quote $ECHO for shipping. + if test "X$ECHO" = "X$SHELL $progpath --fallback-echo"; then + case $progpath in + [\\/]* | [A-Za-z]:[\\/]*) qecho="$SHELL $progpath --fallback-echo";; + *) qecho="$SHELL `pwd`/$progpath --fallback-echo";; + esac + qecho=`$ECHO "X$qecho" | $Xsed -e "$sed_quote_subst"` + else + qecho=`$ECHO "X$ECHO" | $Xsed -e "$sed_quote_subst"` + fi + + # Only actually do things if not in dry run mode. + $opt_dry_run || { + # win32 will think the script is a binary if it has + # a .exe suffix, so we strip it off here. + case $output in + *.exe) func_stripname '' '.exe' "$output" + output=$func_stripname_result ;; + esac + # test for cygwin because mv fails w/o .exe extensions + case $host in + *cygwin*) + exeext=.exe + func_stripname '' '.exe' "$outputname" + outputname=$func_stripname_result ;; + *) exeext= ;; + esac + case $host in + *cygwin* | *mingw* ) + func_dirname_and_basename "$output" "" "." + output_name=$func_basename_result + output_path=$func_dirname_result + cwrappersource="$output_path/$objdir/lt-$output_name.c" + cwrapper="$output_path/$output_name.exe" + $RM $cwrappersource $cwrapper + trap "$RM $cwrappersource $cwrapper; exit $EXIT_FAILURE" 1 2 15 + + func_emit_cwrapperexe_src > $cwrappersource + + # The wrapper executable is built using the $host compiler, + # because it contains $host paths and files. If cross- + # compiling, it, like the target executable, must be + # executed on the $host or under an emulation environment. + $opt_dry_run || { + $LTCC $LTCFLAGS -o $cwrapper $cwrappersource + $STRIP $cwrapper + } + + # Now, create the wrapper script for func_source use: + func_ltwrapper_scriptname $cwrapper + $RM $func_ltwrapper_scriptname_result + trap "$RM $func_ltwrapper_scriptname_result; exit $EXIT_FAILURE" 1 2 15 + $opt_dry_run || { + # note: this script will not be executed, so do not chmod. + if test "x$build" = "x$host" ; then + $cwrapper --lt-dump-script > $func_ltwrapper_scriptname_result + else + func_emit_wrapper no > $func_ltwrapper_scriptname_result + fi + } + ;; + * ) + $RM $output + trap "$RM $output; exit $EXIT_FAILURE" 1 2 15 + + func_emit_wrapper no > $output + chmod +x $output + ;; + esac + } + exit $EXIT_SUCCESS + ;; + esac + + # See if we need to build an old-fashioned archive. + for oldlib in $oldlibs; do + + if test "$build_libtool_libs" = convenience; then + oldobjs="$libobjs_save $symfileobj" + addlibs="$convenience" + build_libtool_libs=no + else + if test "$build_libtool_libs" = module; then + oldobjs="$libobjs_save" + build_libtool_libs=no + else + oldobjs="$old_deplibs $non_pic_objects" + if test "$preload" = yes && test -f "$symfileobj"; then + oldobjs="$oldobjs $symfileobj" + fi + fi + addlibs="$old_convenience" + fi + + if test -n "$addlibs"; then + gentop="$output_objdir/${outputname}x" + generated="$generated $gentop" + + func_extract_archives $gentop $addlibs + oldobjs="$oldobjs $func_extract_archives_result" + fi + + # Do each command in the archive commands. + if test -n "$old_archive_from_new_cmds" && test "$build_libtool_libs" = yes; then + cmds=$old_archive_from_new_cmds + else + + # Add any objects from preloaded convenience libraries + if test -n "$dlprefiles"; then + gentop="$output_objdir/${outputname}x" + generated="$generated $gentop" + + func_extract_archives $gentop $dlprefiles + oldobjs="$oldobjs $func_extract_archives_result" + fi + + # POSIX demands no paths to be encoded in archives. We have + # to avoid creating archives with duplicate basenames if we + # might have to extract them afterwards, e.g., when creating a + # static archive out of a convenience library, or when linking + # the entirety of a libtool archive into another (currently + # not supported by libtool). + if (for obj in $oldobjs + do + func_basename "$obj" + $ECHO "$func_basename_result" + done | sort | sort -uc >/dev/null 2>&1); then + : + else + $ECHO "copying selected object files to avoid basename conflicts..." + gentop="$output_objdir/${outputname}x" + generated="$generated $gentop" + func_mkdir_p "$gentop" + save_oldobjs=$oldobjs + oldobjs= + counter=1 + for obj in $save_oldobjs + do + func_basename "$obj" + objbase="$func_basename_result" + case " $oldobjs " in + " ") oldobjs=$obj ;; + *[\ /]"$objbase "*) + while :; do + # Make sure we don't pick an alternate name that also + # overlaps. + newobj=lt$counter-$objbase + func_arith $counter + 1 + counter=$func_arith_result + case " $oldobjs " in + *[\ /]"$newobj "*) ;; + *) if test ! -f "$gentop/$newobj"; then break; fi ;; + esac + done + func_show_eval "ln $obj $gentop/$newobj || cp $obj $gentop/$newobj" + oldobjs="$oldobjs $gentop/$newobj" + ;; + *) oldobjs="$oldobjs $obj" ;; + esac + done + fi + eval cmds=\"$old_archive_cmds\" + + func_len " $cmds" + len=$func_len_result + if test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then + cmds=$old_archive_cmds + else + # the command line is too long to link in one step, link in parts + func_verbose "using piecewise archive linking..." + save_RANLIB=$RANLIB + RANLIB=: + objlist= + concat_cmds= + save_oldobjs=$oldobjs + oldobjs= + # Is there a better way of finding the last object in the list? + for obj in $save_oldobjs + do + last_oldobj=$obj + done + eval test_cmds=\"$old_archive_cmds\" + func_len " $test_cmds" + len0=$func_len_result + len=$len0 + for obj in $save_oldobjs + do + func_len " $obj" + func_arith $len + $func_len_result + len=$func_arith_result + func_append objlist " $obj" + if test "$len" -lt "$max_cmd_len"; then + : + else + # the above command should be used before it gets too long + oldobjs=$objlist + if test "$obj" = "$last_oldobj" ; then + RANLIB=$save_RANLIB + fi + test -z "$concat_cmds" || concat_cmds=$concat_cmds~ + eval concat_cmds=\"\${concat_cmds}$old_archive_cmds\" + objlist= + len=$len0 + fi + done + RANLIB=$save_RANLIB + oldobjs=$objlist + if test "X$oldobjs" = "X" ; then + eval cmds=\"\$concat_cmds\" + else + eval cmds=\"\$concat_cmds~\$old_archive_cmds\" + fi + fi + fi + func_execute_cmds "$cmds" 'exit $?' + done + + test -n "$generated" && \ + func_show_eval "${RM}r$generated" + + # Now create the libtool archive. + case $output in + *.la) + old_library= + test "$build_old_libs" = yes && old_library="$libname.$libext" + func_verbose "creating $output" + + # Preserve any variables that may affect compiler behavior + for var in $variables_saved_for_relink; do + if eval test -z \"\${$var+set}\"; then + relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command" + elif eval var_value=\$$var; test -z "$var_value"; then + relink_command="$var=; export $var; $relink_command" + else + func_quote_for_eval "$var_value" + relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command" + fi + done + # Quote the link command for shipping. + relink_command="(cd `pwd`; $SHELL $progpath $preserve_args --mode=relink $libtool_args @inst_prefix_dir@)" + relink_command=`$ECHO "X$relink_command" | $Xsed -e "$sed_quote_subst"` + if test "$hardcode_automatic" = yes ; then + relink_command= + fi + + # Only create the output if not a dry run. + $opt_dry_run || { + for installed in no yes; do + if test "$installed" = yes; then + if test -z "$install_libdir"; then + break + fi + output="$output_objdir/$outputname"i + # Replace all uninstalled libtool libraries with the installed ones + newdependency_libs= + for deplib in $dependency_libs; do + case $deplib in + *.la) + func_basename "$deplib" + name="$func_basename_result" + eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib` + test -z "$libdir" && \ + func_fatal_error "\`$deplib' is not a valid libtool archive" + newdependency_libs="$newdependency_libs $libdir/$name" + ;; + *) newdependency_libs="$newdependency_libs $deplib" ;; + esac + done + dependency_libs="$newdependency_libs" + newdlfiles= + + for lib in $dlfiles; do + case $lib in + *.la) + func_basename "$lib" + name="$func_basename_result" + eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib` + test -z "$libdir" && \ + func_fatal_error "\`$lib' is not a valid libtool archive" + newdlfiles="$newdlfiles $libdir/$name" + ;; + *) newdlfiles="$newdlfiles $lib" ;; + esac + done + dlfiles="$newdlfiles" + newdlprefiles= + for lib in $dlprefiles; do + case $lib in + *.la) + # Only pass preopened files to the pseudo-archive (for + # eventual linking with the app. that links it) if we + # didn't already link the preopened objects directly into + # the library: + func_basename "$lib" + name="$func_basename_result" + eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib` + test -z "$libdir" && \ + func_fatal_error "\`$lib' is not a valid libtool archive" + newdlprefiles="$newdlprefiles $libdir/$name" + ;; + esac + done + dlprefiles="$newdlprefiles" + else + newdlfiles= + for lib in $dlfiles; do + case $lib in + [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;; + *) abs=`pwd`"/$lib" ;; + esac + newdlfiles="$newdlfiles $abs" + done + dlfiles="$newdlfiles" + newdlprefiles= + for lib in $dlprefiles; do + case $lib in + [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;; + *) abs=`pwd`"/$lib" ;; + esac + newdlprefiles="$newdlprefiles $abs" + done + dlprefiles="$newdlprefiles" + fi + $RM $output + # place dlname in correct position for cygwin + tdlname=$dlname + case $host,$output,$installed,$module,$dlname in + *cygwin*,*lai,yes,no,*.dll | *mingw*,*lai,yes,no,*.dll | *cegcc*,*lai,yes,no,*.dll) tdlname=../bin/$dlname ;; + esac + $ECHO > $output "\ +# $outputname - a libtool library file +# Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION +# +# Please DO NOT delete this file! +# It is necessary for linking the library. + +# The name that we can dlopen(3). +dlname='$tdlname' + +# Names of this library. +library_names='$library_names' + +# The name of the static archive. +old_library='$old_library' + +# Linker flags that can not go in dependency_libs. +inherited_linker_flags='$new_inherited_linker_flags' + +# Libraries that this one depends upon. +dependency_libs='$dependency_libs' + +# Names of additional weak libraries provided by this library +weak_library_names='$weak_libs' + +# Version information for $libname. +current=$current +age=$age +revision=$revision + +# Is this an already installed library? +installed=$installed + +# Should we warn about portability when linking against -modules? +shouldnotlink=$module + +# Files to dlopen/dlpreopen +dlopen='$dlfiles' +dlpreopen='$dlprefiles' + +# Directory that this library needs to be installed in: +libdir='$install_libdir'" + if test "$installed" = no && test "$need_relink" = yes; then + $ECHO >> $output "\ +relink_command=\"$relink_command\"" + fi + done + } + + # Do a symbolic link so that the libtool archive can be found in + # LD_LIBRARY_PATH before the program is installed. + func_show_eval '( cd "$output_objdir" && $RM "$outputname" && $LN_S "../$outputname" "$outputname" )' 'exit $?' + ;; + esac + exit $EXIT_SUCCESS +} + +{ test "$mode" = link || test "$mode" = relink; } && + func_mode_link ${1+"$@"} + + +# func_mode_uninstall arg... +func_mode_uninstall () +{ + $opt_debug + RM="$nonopt" + files= + rmforce= + exit_status=0 + + # This variable tells wrapper scripts just to set variables rather + # than running their programs. + libtool_install_magic="$magic" + + for arg + do + case $arg in + -f) RM="$RM $arg"; rmforce=yes ;; + -*) RM="$RM $arg" ;; + *) files="$files $arg" ;; + esac + done + + test -z "$RM" && \ + func_fatal_help "you must specify an RM program" + + rmdirs= + + origobjdir="$objdir" + for file in $files; do + func_dirname "$file" "" "." + dir="$func_dirname_result" + if test "X$dir" = X.; then + objdir="$origobjdir" + else + objdir="$dir/$origobjdir" + fi + func_basename "$file" + name="$func_basename_result" + test "$mode" = uninstall && objdir="$dir" + + # Remember objdir for removal later, being careful to avoid duplicates + if test "$mode" = clean; then + case " $rmdirs " in + *" $objdir "*) ;; + *) rmdirs="$rmdirs $objdir" ;; + esac + fi + + # Don't error if the file doesn't exist and rm -f was used. + if { test -L "$file"; } >/dev/null 2>&1 || + { test -h "$file"; } >/dev/null 2>&1 || + test -f "$file"; then + : + elif test -d "$file"; then + exit_status=1 + continue + elif test "$rmforce" = yes; then + continue + fi + + rmfiles="$file" + + case $name in + *.la) + # Possibly a libtool archive, so verify it. + if func_lalib_p "$file"; then + func_source $dir/$name + + # Delete the libtool libraries and symlinks. + for n in $library_names; do + rmfiles="$rmfiles $objdir/$n" + done + test -n "$old_library" && rmfiles="$rmfiles $objdir/$old_library" + + case "$mode" in + clean) + case " $library_names " in + # " " in the beginning catches empty $dlname + *" $dlname "*) ;; + *) rmfiles="$rmfiles $objdir/$dlname" ;; + esac + test -n "$libdir" && rmfiles="$rmfiles $objdir/$name $objdir/${name}i" + ;; + uninstall) + if test -n "$library_names"; then + # Do each command in the postuninstall commands. + func_execute_cmds "$postuninstall_cmds" 'test "$rmforce" = yes || exit_status=1' + fi + + if test -n "$old_library"; then + # Do each command in the old_postuninstall commands. + func_execute_cmds "$old_postuninstall_cmds" 'test "$rmforce" = yes || exit_status=1' + fi + # FIXME: should reinstall the best remaining shared library. + ;; + esac + fi + ;; + + *.lo) + # Possibly a libtool object, so verify it. + if func_lalib_p "$file"; then + + # Read the .lo file + func_source $dir/$name + + # Add PIC object to the list of files to remove. + if test -n "$pic_object" && + test "$pic_object" != none; then + rmfiles="$rmfiles $dir/$pic_object" + fi + + # Add non-PIC object to the list of files to remove. + if test -n "$non_pic_object" && + test "$non_pic_object" != none; then + rmfiles="$rmfiles $dir/$non_pic_object" + fi + fi + ;; + + *) + if test "$mode" = clean ; then + noexename=$name + case $file in + *.exe) + func_stripname '' '.exe' "$file" + file=$func_stripname_result + func_stripname '' '.exe' "$name" + noexename=$func_stripname_result + # $file with .exe has already been added to rmfiles, + # add $file without .exe + rmfiles="$rmfiles $file" + ;; + esac + # Do a test to see if this is a libtool program. + if func_ltwrapper_p "$file"; then + if func_ltwrapper_executable_p "$file"; then + func_ltwrapper_scriptname "$file" + relink_command= + func_source $func_ltwrapper_scriptname_result + rmfiles="$rmfiles $func_ltwrapper_scriptname_result" + else + relink_command= + func_source $dir/$noexename + fi + + # note $name still contains .exe if it was in $file originally + # as does the version of $file that was added into $rmfiles + rmfiles="$rmfiles $objdir/$name $objdir/${name}S.${objext}" + if test "$fast_install" = yes && test -n "$relink_command"; then + rmfiles="$rmfiles $objdir/lt-$name" + fi + if test "X$noexename" != "X$name" ; then + rmfiles="$rmfiles $objdir/lt-${noexename}.c" + fi + fi + fi + ;; + esac + func_show_eval "$RM $rmfiles" 'exit_status=1' + done + objdir="$origobjdir" + + # Try to remove the ${objdir}s in the directories where we deleted files + for dir in $rmdirs; do + if test -d "$dir"; then + func_show_eval "rmdir $dir >/dev/null 2>&1" + fi + done + + exit $exit_status +} + +{ test "$mode" = uninstall || test "$mode" = clean; } && + func_mode_uninstall ${1+"$@"} + +test -z "$mode" && { + help="$generic_help" + func_fatal_help "you must specify a MODE" +} + +test -z "$exec_cmd" && \ + func_fatal_help "invalid operation mode \`$mode'" + +if test -n "$exec_cmd"; then + eval exec "$exec_cmd" + exit $EXIT_FAILURE +fi + +exit $exit_status + + +# The TAGs below are defined such that we never get into a situation +# in which we disable both kinds of libraries. Given conflicting +# choices, we go for a static library, that is the most portable, +# since we can't tell whether shared libraries were disabled because +# the user asked for that or because the platform doesn't support +# them. This is particularly important on AIX, because we don't +# support having both static and shared libraries enabled at the same +# time on that platform, so we default to a shared-only configuration. +# If a disable-shared tag is given, we'll fallback to a static-only +# configuration. But we'll never go from static-only to shared-only. + +# ### BEGIN LIBTOOL TAG CONFIG: disable-shared +build_libtool_libs=no +build_old_libs=yes +# ### END LIBTOOL TAG CONFIG: disable-shared + +# ### BEGIN LIBTOOL TAG CONFIG: disable-static +build_old_libs=`case $build_libtool_libs in yes) echo no;; *) echo yes;; esac` +# ### END LIBTOOL TAG CONFIG: disable-static + +# Local Variables: +# mode:shell-script +# sh-indentation:2 +# End: +# vi:sw=2 + diff --git a/m4/Makefile.am b/m4/Makefile.am new file mode 100644 index 0000000..2e53d75 --- /dev/null +++ b/m4/Makefile.am @@ -0,0 +1,4 @@ + +CLEANFILES = *~ + +EXTRA_DIST = glibc2.m4 intmax.m4 inttypes-h.m4 lock.m4 longdouble.m4 longlong.m4 printf-posix.m4 signed.m4 size_max.m4 visibility.m4 wchar_t.m4 wint_t.m4 xsize.m4 intdiv0.m4 inttypes.m4 inttypes_h.m4 inttypes-pri.m4 nls.m4 po.m4 stdint_h.m4 uintmax_t.m4 ulonglong.m4 codeset.m4 gettext.m4 glibc21.m4 iconv.m4 isc-posix.m4 lcmessage.m4 lib-ld.m4 lib-link.m4 lib-prefix.m4 progtest.m4 japhar_grep_cflags.m4 getline.m4 diff --git a/m4/Makefile.in b/m4/Makefile.in new file mode 100644 index 0000000..514af08 --- /dev/null +++ b/m4/Makefile.in @@ -0,0 +1,369 @@ +# Makefile.in generated by automake 1.10.1 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +subdir = m4 +DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/m4/getline.m4 \ + $(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/iconv.m4 \ + $(top_srcdir)/m4/isc-posix.m4 \ + $(top_srcdir)/m4/japhar_grep_cflags.m4 \ + $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \ + $(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libtool.m4 \ + $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ + $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ + $(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \ + $(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.in +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +SOURCES = +DIST_SOURCES = +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +AMTAR = @AMTAR@ +AR = @AR@ +ATTR_LIB = @ATTR_LIB@ +AUDIT_LIBS = @AUDIT_LIBS@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +BIOAPI_LIB = @BIOAPI_LIB@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CRYPT_LIB = @CRYPT_LIB@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DL_LIBS = @DL_LIBS@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +EXTRA_CFLAGS = @EXTRA_CFLAGS@ +FGREP = @FGREP@ +GMSGFMT = @GMSGFMT@ +GMSGFMT_015 = @GMSGFMT_015@ +GREP = @GREP@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +INTLLIBS = @INTLLIBS@ +INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ +LAUS_LIBS = @LAUS_LIBS@ +LD = @LD@ +LDAP_LIBS = @LDAP_LIBS@ +LDFLAGS = @LDFLAGS@ +LIBICONV = @LIBICONV@ +LIBINTL = @LIBINTL@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBICONV = @LTLIBICONV@ +LTLIBINTL = @LTLIBINTL@ +LTLIBOBJS = @LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +MKDIR_P = @MKDIR_P@ +MSGFMT = @MSGFMT@ +MSGFMT_015 = @MSGFMT_015@ +MSGMERGE = @MSGMERGE@ +NM = @NM@ +NMEDIT = @NMEDIT@ +NSCD_LIB = @NSCD_LIB@ +NSL_LIB = @NSL_LIB@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PAM_LIBS = @PAM_LIBS@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PIE_CFLAGS = @PIE_CFLAGS@ +PIE_LDFLAGS = @PIE_LDFLAGS@ +POSUB = @POSUB@ +RANLIB = @RANLIB@ +SED = @SED@ +SELINUX_LIB = @SELINUX_LIB@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +SLP_LIBS = @SLP_LIBS@ +SSL_LIBS = @SSL_LIBS@ +STRIP = @STRIP@ +TLS_LIBS = @TLS_LIBS@ +USE_NLS = @USE_NLS@ +VERSION = @VERSION@ +XGETTEXT = @XGETTEXT@ +XGETTEXT_015 = @XGETTEXT_015@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libc_cv_fpie = @libc_cv_fpie@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +lt_ECHO = @lt_ECHO@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +CLEANFILES = *~ +EXTRA_DIST = glibc2.m4 intmax.m4 inttypes-h.m4 lock.m4 longdouble.m4 longlong.m4 printf-posix.m4 signed.m4 size_max.m4 visibility.m4 wchar_t.m4 wint_t.m4 xsize.m4 intdiv0.m4 inttypes.m4 inttypes_h.m4 inttypes-pri.m4 nls.m4 po.m4 stdint_h.m4 uintmax_t.m4 ulonglong.m4 codeset.m4 gettext.m4 glibc21.m4 iconv.m4 isc-posix.m4 lcmessage.m4 lib-ld.m4 lib-link.m4 lib-prefix.m4 progtest.m4 japhar_grep_cflags.m4 getline.m4 +all: all-am + +.SUFFIXES: +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ + && exit 0; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu m4/Makefile'; \ + cd $(top_srcdir) && \ + $(AUTOMAKE) --gnu m4/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs +tags: TAGS +TAGS: + +ctags: CTAGS +CTAGS: + + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ + fi; \ + cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ + else \ + test -f $(distdir)/$$file \ + || cp -p $$d/$$file $(distdir)/$$file \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-am +all-am: Makefile +installdirs: +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + +clean-generic: + -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-generic clean-libtool mostlyclean-am + +distclean: distclean-am + -rm -f Makefile +distclean-am: clean-am distclean-generic + +dvi: dvi-am + +dvi-am: + +html: html-am + +info: info-am + +info-am: + +install-data-am: + +install-dvi: install-dvi-am + +install-exec-am: + +install-html: install-html-am + +install-info: install-info-am + +install-man: + +install-pdf: install-pdf-am + +install-ps: install-ps-am + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-generic mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: + +.MAKE: install-am install-strip + +.PHONY: all all-am check check-am clean clean-generic clean-libtool \ + distclean distclean-generic distclean-libtool distdir dvi \ + dvi-am html html-am info info-am install install-am \ + install-data install-data-am install-dvi install-dvi-am \ + install-exec install-exec-am install-html install-html-am \ + install-info install-info-am install-man install-pdf \ + install-pdf-am install-ps install-ps-am install-strip \ + installcheck installcheck-am installdirs maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-generic \ + mostlyclean-libtool pdf pdf-am ps ps-am uninstall uninstall-am + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/m4/codeset.m4 b/m4/codeset.m4 new file mode 100644 index 0000000..a6e67ec --- /dev/null +++ b/m4/codeset.m4 @@ -0,0 +1,21 @@ +# codeset.m4 serial AM1 (gettext-0.10.40) +dnl Copyright (C) 2000-2002 Free Software 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 From Bruno Haible. + +AC_DEFUN([AM_LANGINFO_CODESET], +[ + AC_CACHE_CHECK([for nl_langinfo and CODESET], am_cv_langinfo_codeset, + [AC_TRY_LINK([#include ], + [char* cs = nl_langinfo(CODESET);], + am_cv_langinfo_codeset=yes, + am_cv_langinfo_codeset=no) + ]) + if test $am_cv_langinfo_codeset = yes; then + AC_DEFINE(HAVE_LANGINFO_CODESET, 1, + [Define if you have and nl_langinfo(CODESET).]) + fi +]) diff --git a/m4/getline.m4 b/m4/getline.m4 new file mode 100644 index 0000000..6f6183e --- /dev/null +++ b/m4/getline.m4 @@ -0,0 +1,42 @@ +dnl See if there's a working, system-supplied version of the getline function. +dnl We can't just do AC_REPLACE_FUNCS(getline) because some systems +dnl have a function by that name in -linet that doesn't have anything +dnl to do with the function we need. +AC_DEFUN([AM_FUNC_GETLINE], +[dnl + am_getline_needs_run_time_check=no + AC_CHECK_FUNC(getline, + dnl Found it in some library. Verify that it works. + am_getline_needs_run_time_check=yes, + am_cv_func_working_getline=no) + if test $am_getline_needs_run_time_check = yes; then + AC_CHECK_HEADERS(string.h) + AC_CACHE_CHECK([for working getline function], am_cv_func_working_getline, + [echo fooN |tr -d '\012'|tr N '\012' > conftestdata + AC_TRY_RUN([ +# include +# include +# if HAVE_STRING_H +# include +# endif + int main () + { /* Based on a test program from Karl Heuer. */ + char *line = NULL; + size_t siz = 0; + int len; + FILE *in = fopen ("./conftestdata", "r"); + if (!in) + return 1; + len = getline (&line, &siz, in); + exit ((len == 4 && line && strcmp (line, "foo\n") == 0) ? 0 : 1); + } + ], am_cv_func_working_getline=yes dnl The library version works. + , am_cv_func_working_getline=no dnl The library version does NOT work. + , am_cv_func_working_getline=no dnl We're cross compiling. + )]) + fi + + if test $am_cv_func_working_getline = no; then + AC_LIBOBJ(getline) + fi +]) diff --git a/m4/gettext.m4 b/m4/gettext.m4 new file mode 100644 index 0000000..dae3d81 --- /dev/null +++ b/m4/gettext.m4 @@ -0,0 +1,631 @@ +# gettext.m4 serial 53 (gettext-0.15) +dnl Copyright (C) 1995-2006 Free Software 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 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 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-2005. + +dnl Macro to add for using GNU gettext. + +dnl Usage: AM_GNU_GETTEXT([INTLSYMBOL], [NEEDSYMBOL], [INTLDIR]). +dnl INTLSYMBOL can be one of 'external', 'no-libtool', 'use-libtool'. The +dnl default (if it is not specified or empty) is 'no-libtool'. +dnl INTLSYMBOL should be 'external' for packages with no intl directory, +dnl and 'no-libtool' or 'use-libtool' for packages with an intl directory. +dnl If INTLSYMBOL is 'use-libtool', then a libtool library +dnl $(top_builddir)/intl/libintl.la will be created (shared and/or static, +dnl depending on --{enable,disable}-{shared,static} and on the presence of +dnl AM-DISABLE-SHARED). If INTLSYMBOL is 'no-libtool', a static library +dnl $(top_builddir)/intl/libintl.a will be created. +dnl If NEEDSYMBOL is specified and is 'need-ngettext', then GNU gettext +dnl implementations (in libc or libintl) without the ngettext() function +dnl will be ignored. If NEEDSYMBOL is specified and is +dnl 'need-formatstring-macros', then GNU gettext implementations that don't +dnl support the ISO C 99 formatstring macros will be ignored. +dnl INTLDIR is used to find the intl libraries. If empty, +dnl the value `$(top_builddir)/intl/' is used. +dnl +dnl The result of the configuration is one of three cases: +dnl 1) GNU gettext, as included in the intl subdirectory, will be compiled +dnl and used. +dnl Catalog format: GNU --> install in $(datadir) +dnl Catalog extension: .mo after installation, .gmo in source tree +dnl 2) GNU gettext has been found in the system's C library. +dnl Catalog format: GNU --> install in $(datadir) +dnl Catalog extension: .mo after installation, .gmo in source tree +dnl 3) No internationalization, always use English msgid. +dnl Catalog format: none +dnl Catalog extension: none +dnl If INTLSYMBOL is 'external', only cases 2 and 3 can occur. +dnl The use of .gmo is historical (it was needed to avoid overwriting the +dnl GNU format catalogs when building on a platform with an X/Open gettext), +dnl but we keep it in order not to force irrelevant filename changes on the +dnl maintainers. +dnl +AC_DEFUN([AM_GNU_GETTEXT], +[ + dnl Argument checking. + ifelse([$1], [], , [ifelse([$1], [external], , [ifelse([$1], [no-libtool], , [ifelse([$1], [use-libtool], , + [errprint([ERROR: invalid first argument to AM_GNU_GETTEXT +])])])])]) + ifelse([$2], [], , [ifelse([$2], [need-ngettext], , [ifelse([$2], [need-formatstring-macros], , + [errprint([ERROR: invalid second argument to AM_GNU_GETTEXT +])])])]) + define([gt_included_intl], ifelse([$1], [external], [no], [yes])) + define([gt_libtool_suffix_prefix], ifelse([$1], [use-libtool], [l], [])) + + AC_REQUIRE([AM_PO_SUBDIRS])dnl + ifelse(gt_included_intl, yes, [ + AC_REQUIRE([AM_INTL_SUBDIR])dnl + ]) + + dnl Prerequisites of AC_LIB_LINKFLAGS_BODY. + AC_REQUIRE([AC_LIB_PREPARE_PREFIX]) + AC_REQUIRE([AC_LIB_RPATH]) + + dnl Sometimes libintl requires libiconv, so first search for libiconv. + dnl Ideally we would do this search only after the + dnl if test "$USE_NLS" = "yes"; then + dnl if test "$gt_cv_func_gnugettext_libc" != "yes"; then + dnl tests. But if configure.in invokes AM_ICONV after AM_GNU_GETTEXT + dnl the configure script would need to contain the same shell code + dnl again, outside any 'if'. There are two solutions: + dnl - Invoke AM_ICONV_LINKFLAGS_BODY here, outside any 'if'. + dnl - Control the expansions in more detail using AC_PROVIDE_IFELSE. + dnl Since AC_PROVIDE_IFELSE is only in autoconf >= 2.52 and not + dnl documented, we avoid it. + ifelse(gt_included_intl, yes, , [ + AC_REQUIRE([AM_ICONV_LINKFLAGS_BODY]) + ]) + + dnl Sometimes, on MacOS X, libintl requires linking with CoreFoundation. + gt_INTL_MACOSX + + dnl Set USE_NLS. + AC_REQUIRE([AM_NLS]) + + ifelse(gt_included_intl, yes, [ + BUILD_INCLUDED_LIBINTL=no + USE_INCLUDED_LIBINTL=no + ]) + LIBINTL= + LTLIBINTL= + POSUB= + + dnl If we use NLS figure out what method + if test "$USE_NLS" = "yes"; then + gt_use_preinstalled_gnugettext=no + ifelse(gt_included_intl, yes, [ + AC_MSG_CHECKING([whether included gettext is requested]) + AC_ARG_WITH(included-gettext, + [ --with-included-gettext use the GNU gettext library included here], + nls_cv_force_use_gnu_gettext=$withval, + nls_cv_force_use_gnu_gettext=no) + AC_MSG_RESULT($nls_cv_force_use_gnu_gettext) + + nls_cv_use_gnu_gettext="$nls_cv_force_use_gnu_gettext" + if test "$nls_cv_force_use_gnu_gettext" != "yes"; then + ]) + dnl User does not insist on using GNU NLS library. Figure out what + dnl to use. If GNU gettext is available we use this. Else we have + dnl to fall back to GNU NLS library. + + dnl Add a version number to the cache macros. + define([gt_api_version], ifelse([$2], [need-formatstring-macros], 3, ifelse([$2], [need-ngettext], 2, 1))) + define([gt_cv_func_gnugettext_libc], [gt_cv_func_gnugettext]gt_api_version[_libc]) + define([gt_cv_func_gnugettext_libintl], [gt_cv_func_gnugettext]gt_api_version[_libintl]) + + AC_CACHE_CHECK([for GNU gettext in libc], gt_cv_func_gnugettext_libc, + [AC_TRY_LINK([#include +]ifelse([$2], [need-formatstring-macros], +[[#ifndef __GNU_GETTEXT_SUPPORTED_REVISION +#define __GNU_GETTEXT_SUPPORTED_REVISION(major) ((major) == 0 ? 0 : -1) +#endif +typedef int array [2 * (__GNU_GETTEXT_SUPPORTED_REVISION(0) >= 1) - 1]; +]], [])[extern int _nl_msg_cat_cntr; +extern int *_nl_domain_bindings;], + [bindtextdomain ("", ""); +return * gettext ("")]ifelse([$2], [need-ngettext], [ + * ngettext ("", "", 0)], [])[ + _nl_msg_cat_cntr + *_nl_domain_bindings], + gt_cv_func_gnugettext_libc=yes, + gt_cv_func_gnugettext_libc=no)]) + + if test "$gt_cv_func_gnugettext_libc" != "yes"; then + dnl Sometimes libintl requires libiconv, so first search for libiconv. + ifelse(gt_included_intl, yes, , [ + AM_ICONV_LINK + ]) + dnl Search for libintl and define LIBINTL, LTLIBINTL and INCINTL + dnl accordingly. Don't use AC_LIB_LINKFLAGS_BODY([intl],[iconv]) + dnl because that would add "-liconv" to LIBINTL and LTLIBINTL + dnl even if libiconv doesn't exist. + AC_LIB_LINKFLAGS_BODY([intl]) + AC_CACHE_CHECK([for GNU gettext in libintl], + gt_cv_func_gnugettext_libintl, + [gt_save_CPPFLAGS="$CPPFLAGS" + CPPFLAGS="$CPPFLAGS $INCINTL" + gt_save_LIBS="$LIBS" + LIBS="$LIBS $LIBINTL" + dnl Now see whether libintl exists and does not depend on libiconv. + AC_TRY_LINK([#include +]ifelse([$2], [need-formatstring-macros], +[[#ifndef __GNU_GETTEXT_SUPPORTED_REVISION +#define __GNU_GETTEXT_SUPPORTED_REVISION(major) ((major) == 0 ? 0 : -1) +#endif +typedef int array [2 * (__GNU_GETTEXT_SUPPORTED_REVISION(0) >= 1) - 1]; +]], [])[extern int _nl_msg_cat_cntr; +extern +#ifdef __cplusplus +"C" +#endif +const char *_nl_expand_alias (const char *);], + [bindtextdomain ("", ""); +return * gettext ("")]ifelse([$2], [need-ngettext], [ + * ngettext ("", "", 0)], [])[ + _nl_msg_cat_cntr + *_nl_expand_alias ("")], + gt_cv_func_gnugettext_libintl=yes, + gt_cv_func_gnugettext_libintl=no) + dnl Now see whether libintl exists and depends on libiconv. + if test "$gt_cv_func_gnugettext_libintl" != yes && test -n "$LIBICONV"; then + LIBS="$LIBS $LIBICONV" + AC_TRY_LINK([#include +]ifelse([$2], [need-formatstring-macros], +[[#ifndef __GNU_GETTEXT_SUPPORTED_REVISION +#define __GNU_GETTEXT_SUPPORTED_REVISION(major) ((major) == 0 ? 0 : -1) +#endif +typedef int array [2 * (__GNU_GETTEXT_SUPPORTED_REVISION(0) >= 1) - 1]; +]], [])[extern int _nl_msg_cat_cntr; +extern +#ifdef __cplusplus +"C" +#endif +const char *_nl_expand_alias (const char *);], + [bindtextdomain ("", ""); +return * gettext ("")]ifelse([$2], [need-ngettext], [ + * ngettext ("", "", 0)], [])[ + _nl_msg_cat_cntr + *_nl_expand_alias ("")], + [LIBINTL="$LIBINTL $LIBICONV" + LTLIBINTL="$LTLIBINTL $LTLIBICONV" + gt_cv_func_gnugettext_libintl=yes + ]) + fi + CPPFLAGS="$gt_save_CPPFLAGS" + LIBS="$gt_save_LIBS"]) + fi + + dnl If an already present or preinstalled GNU gettext() is found, + dnl use it. But if this macro is used in GNU gettext, and GNU + dnl gettext is already preinstalled in libintl, we update this + dnl libintl. (Cf. the install rule in intl/Makefile.in.) + if test "$gt_cv_func_gnugettext_libc" = "yes" \ + || { test "$gt_cv_func_gnugettext_libintl" = "yes" \ + && test "$PACKAGE" != gettext-runtime \ + && test "$PACKAGE" != gettext-tools; }; then + gt_use_preinstalled_gnugettext=yes + else + dnl Reset the values set by searching for libintl. + LIBINTL= + LTLIBINTL= + INCINTL= + fi + + ifelse(gt_included_intl, yes, [ + if test "$gt_use_preinstalled_gnugettext" != "yes"; then + dnl GNU gettext is not found in the C library. + dnl Fall back on included GNU gettext library. + nls_cv_use_gnu_gettext=yes + fi + fi + + if test "$nls_cv_use_gnu_gettext" = "yes"; then + dnl Mark actions used to generate GNU NLS library. + BUILD_INCLUDED_LIBINTL=yes + USE_INCLUDED_LIBINTL=yes + LIBINTL="ifelse([$3],[],\${top_builddir}/intl,[$3])/libintl.[]gt_libtool_suffix_prefix[]a $LIBICONV $LIBTHREAD" + LTLIBINTL="ifelse([$3],[],\${top_builddir}/intl,[$3])/libintl.[]gt_libtool_suffix_prefix[]a $LTLIBICONV $LTLIBTHREAD" + LIBS=`echo " $LIBS " | sed -e 's/ -lintl / /' -e 's/^ //' -e 's/ $//'` + fi + + CATOBJEXT= + if test "$gt_use_preinstalled_gnugettext" = "yes" \ + || test "$nls_cv_use_gnu_gettext" = "yes"; then + dnl Mark actions to use GNU gettext tools. + CATOBJEXT=.gmo + fi + ]) + + if test -n "$INTL_MACOSX_LIBS"; then + if test "$gt_use_preinstalled_gnugettext" = "yes" \ + || test "$nls_cv_use_gnu_gettext" = "yes"; then + dnl Some extra flags are needed during linking. + LIBINTL="$LIBINTL $INTL_MACOSX_LIBS" + LTLIBINTL="$LTLIBINTL $INTL_MACOSX_LIBS" + fi + fi + + if test "$gt_use_preinstalled_gnugettext" = "yes" \ + || test "$nls_cv_use_gnu_gettext" = "yes"; then + AC_DEFINE(ENABLE_NLS, 1, + [Define to 1 if translation of program messages to the user's native language + is requested.]) + else + USE_NLS=no + fi + fi + + AC_MSG_CHECKING([whether to use NLS]) + AC_MSG_RESULT([$USE_NLS]) + if test "$USE_NLS" = "yes"; then + AC_MSG_CHECKING([where the gettext function comes from]) + if test "$gt_use_preinstalled_gnugettext" = "yes"; then + if test "$gt_cv_func_gnugettext_libintl" = "yes"; then + gt_source="external libintl" + else + gt_source="libc" + fi + else + gt_source="included intl directory" + fi + AC_MSG_RESULT([$gt_source]) + fi + + if test "$USE_NLS" = "yes"; then + + if test "$gt_use_preinstalled_gnugettext" = "yes"; then + if test "$gt_cv_func_gnugettext_libintl" = "yes"; then + AC_MSG_CHECKING([how to link with libintl]) + AC_MSG_RESULT([$LIBINTL]) + AC_LIB_APPENDTOVAR([CPPFLAGS], [$INCINTL]) + fi + + dnl For backward compatibility. Some packages may be using this. + AC_DEFINE(HAVE_GETTEXT, 1, + [Define if the GNU gettext() function is already present or preinstalled.]) + AC_DEFINE(HAVE_DCGETTEXT, 1, + [Define if the GNU dcgettext() function is already present or preinstalled.]) + fi + + dnl We need to process the po/ directory. + POSUB=po + fi + + ifelse(gt_included_intl, yes, [ + dnl If this is used in GNU gettext we have to set BUILD_INCLUDED_LIBINTL + dnl to 'yes' because some of the testsuite requires it. + if test "$PACKAGE" = gettext-runtime || test "$PACKAGE" = gettext-tools; then + BUILD_INCLUDED_LIBINTL=yes + fi + + dnl Make all variables we use known to autoconf. + AC_SUBST(BUILD_INCLUDED_LIBINTL) + AC_SUBST(USE_INCLUDED_LIBINTL) + AC_SUBST(CATOBJEXT) + + dnl For backward compatibility. Some configure.ins may be using this. + nls_cv_header_intl= + nls_cv_header_libgt= + + dnl For backward compatibility. Some Makefiles may be using this. + DATADIRNAME=share + AC_SUBST(DATADIRNAME) + + dnl For backward compatibility. Some Makefiles may be using this. + INSTOBJEXT=.mo + AC_SUBST(INSTOBJEXT) + + dnl For backward compatibility. Some Makefiles may be using this. + GENCAT=gencat + AC_SUBST(GENCAT) + + dnl For backward compatibility. Some Makefiles may be using this. + INTLOBJS= + if test "$USE_INCLUDED_LIBINTL" = yes; then + INTLOBJS="\$(GETTOBJS)" + fi + AC_SUBST(INTLOBJS) + + dnl Enable libtool support if the surrounding package wishes it. + INTL_LIBTOOL_SUFFIX_PREFIX=gt_libtool_suffix_prefix + AC_SUBST(INTL_LIBTOOL_SUFFIX_PREFIX) + ]) + + dnl For backward compatibility. Some Makefiles may be using this. + INTLLIBS="$LIBINTL" + AC_SUBST(INTLLIBS) + + dnl Make all documented variables known to autoconf. + AC_SUBST(LIBINTL) + AC_SUBST(LTLIBINTL) + AC_SUBST(POSUB) +]) + + +dnl Checks for all prerequisites of the intl subdirectory, +dnl except for INTL_LIBTOOL_SUFFIX_PREFIX (and possibly LIBTOOL), INTLOBJS, +dnl USE_INCLUDED_LIBINTL, BUILD_INCLUDED_LIBINTL. +AC_DEFUN([AM_INTL_SUBDIR], +[ + AC_REQUIRE([AC_PROG_INSTALL])dnl + AC_REQUIRE([AM_PROG_MKDIR_P])dnl defined by automake + AC_REQUIRE([AC_PROG_CC])dnl + AC_REQUIRE([AC_CANONICAL_HOST])dnl + AC_REQUIRE([gt_GLIBC2])dnl + AC_REQUIRE([AC_PROG_RANLIB])dnl + AC_REQUIRE([gl_VISIBILITY])dnl + AC_REQUIRE([gt_INTL_SUBDIR_CORE])dnl + AC_REQUIRE([bh_C_SIGNED])dnl + AC_REQUIRE([gl_AC_TYPE_LONG_LONG])dnl + AC_REQUIRE([gt_TYPE_LONGDOUBLE])dnl + AC_REQUIRE([gt_TYPE_WCHAR_T])dnl + AC_REQUIRE([gt_TYPE_WINT_T])dnl + AC_REQUIRE([gl_AC_HEADER_INTTYPES_H]) + AC_REQUIRE([gt_TYPE_INTMAX_T]) + AC_REQUIRE([gt_PRINTF_POSIX]) + AC_REQUIRE([gl_GLIBC21])dnl + AC_REQUIRE([gl_XSIZE])dnl + AC_REQUIRE([gt_INTL_MACOSX])dnl + + AC_CHECK_TYPE([ptrdiff_t], , + [AC_DEFINE([ptrdiff_t], [long], + [Define as the type of the result of subtracting two pointers, if the system doesn't define it.]) + ]) + AC_CHECK_HEADERS([stddef.h stdlib.h string.h]) + AC_CHECK_FUNCS([asprintf fwprintf putenv setenv setlocale snprintf wcslen]) + + dnl Use the _snprintf function only if it is declared (because on NetBSD it + dnl is defined as a weak alias of snprintf; we prefer to use the latter). + gt_CHECK_DECL(_snprintf, [#include ]) + gt_CHECK_DECL(_snwprintf, [#include ]) + + dnl Use the *_unlocked functions only if they are declared. + dnl (because some of them were defined without being declared in Solaris + dnl 2.5.1 but were removed in Solaris 2.6, whereas we want binaries built + dnl on Solaris 2.5.1 to run on Solaris 2.6). + dnl Don't use AC_CHECK_DECLS because it isn't supported in autoconf-2.13. + gt_CHECK_DECL(getc_unlocked, [#include ]) + + case $gt_cv_func_printf_posix in + *yes) HAVE_POSIX_PRINTF=1 ;; + *) HAVE_POSIX_PRINTF=0 ;; + esac + AC_SUBST([HAVE_POSIX_PRINTF]) + if test "$ac_cv_func_asprintf" = yes; then + HAVE_ASPRINTF=1 + else + HAVE_ASPRINTF=0 + fi + AC_SUBST([HAVE_ASPRINTF]) + if test "$ac_cv_func_snprintf" = yes; then + HAVE_SNPRINTF=1 + else + HAVE_SNPRINTF=0 + fi + AC_SUBST([HAVE_SNPRINTF]) + if test "$ac_cv_func_wprintf" = yes; then + HAVE_WPRINTF=1 + else + HAVE_WPRINTF=0 + fi + AC_SUBST([HAVE_WPRINTF]) + + AM_LANGINFO_CODESET + gt_LC_MESSAGES + + dnl Compilation on mingw and Cygwin needs special Makefile rules, because + dnl 1. when we install a shared library, we must arrange to export + dnl auxiliary pointer variables for every exported variable, + dnl 2. when we install a shared library and a static library simultaneously, + dnl the include file specifies __declspec(dllimport) and therefore we + dnl must arrange to define the auxiliary pointer variables for the + dnl exported variables _also_ in the static library. + if test "$enable_shared" = yes; then + case "$host_os" in + cygwin*) is_woe32dll=yes ;; + *) is_woe32dll=no ;; + esac + else + is_woe32dll=no + fi + WOE32DLL=$is_woe32dll + AC_SUBST([WOE32DLL]) + + dnl Rename some macros and functions used for locking. + AH_BOTTOM([ +#define __libc_lock_t gl_lock_t +#define __libc_lock_define gl_lock_define +#define __libc_lock_define_initialized gl_lock_define_initialized +#define __libc_lock_init gl_lock_init +#define __libc_lock_lock gl_lock_lock +#define __libc_lock_unlock gl_lock_unlock +#define __libc_lock_recursive_t gl_recursive_lock_t +#define __libc_lock_define_recursive gl_recursive_lock_define +#define __libc_lock_define_initialized_recursive gl_recursive_lock_define_initialized +#define __libc_lock_init_recursive gl_recursive_lock_init +#define __libc_lock_lock_recursive gl_recursive_lock_lock +#define __libc_lock_unlock_recursive gl_recursive_lock_unlock +#define glthread_in_use libintl_thread_in_use +#define glthread_lock_init libintl_lock_init +#define glthread_lock_lock libintl_lock_lock +#define glthread_lock_unlock libintl_lock_unlock +#define glthread_lock_destroy libintl_lock_destroy +#define glthread_rwlock_init libintl_rwlock_init +#define glthread_rwlock_rdlock libintl_rwlock_rdlock +#define glthread_rwlock_wrlock libintl_rwlock_wrlock +#define glthread_rwlock_unlock libintl_rwlock_unlock +#define glthread_rwlock_destroy libintl_rwlock_destroy +#define glthread_recursive_lock_init libintl_recursive_lock_init +#define glthread_recursive_lock_lock libintl_recursive_lock_lock +#define glthread_recursive_lock_unlock libintl_recursive_lock_unlock +#define glthread_recursive_lock_destroy libintl_recursive_lock_destroy +#define glthread_once libintl_once +#define glthread_once_call libintl_once_call +#define glthread_once_singlethreaded libintl_once_singlethreaded +]) +]) + + +dnl Checks for the core files of the intl subdirectory: +dnl dcigettext.c +dnl eval-plural.h +dnl explodename.c +dnl finddomain.c +dnl gettextP.h +dnl gmo.h +dnl hash-string.h hash-string.c +dnl l10nflist.c +dnl libgnuintl.h.in (except the *printf stuff) +dnl loadinfo.h +dnl loadmsgcat.c +dnl localealias.c +dnl log.c +dnl plural-exp.h plural-exp.c +dnl plural.y +dnl Used by libglocale. +AC_DEFUN([gt_INTL_SUBDIR_CORE], +[ + AC_REQUIRE([AC_C_INLINE])dnl + AC_REQUIRE([AC_TYPE_SIZE_T])dnl + AC_REQUIRE([gl_AC_HEADER_STDINT_H]) + AC_REQUIRE([AC_FUNC_ALLOCA])dnl + AC_REQUIRE([AC_FUNC_MMAP])dnl + AC_REQUIRE([gt_INTDIV0])dnl + AC_REQUIRE([gl_AC_TYPE_UINTMAX_T])dnl + AC_REQUIRE([gl_HEADER_INTTYPES_H])dnl + AC_REQUIRE([gt_INTTYPES_PRI])dnl + AC_REQUIRE([gl_LOCK])dnl + + AC_TRY_LINK( + [int foo (int a) { a = __builtin_expect (a, 10); return a == 10 ? 0 : 1; }], + [], + [AC_DEFINE([HAVE_BUILTIN_EXPECT], 1, + [Define to 1 if the compiler understands __builtin_expect.])]) + + AC_CHECK_HEADERS([argz.h limits.h unistd.h sys/param.h]) + AC_CHECK_FUNCS([getcwd getegid geteuid getgid getuid mempcpy munmap \ + stpcpy strcasecmp strdup strtoul tsearch argz_count argz_stringify \ + argz_next __fsetlocking]) + + dnl Use the *_unlocked functions only if they are declared. + dnl (because some of them were defined without being declared in Solaris + dnl 2.5.1 but were removed in Solaris 2.6, whereas we want binaries built + dnl on Solaris 2.5.1 to run on Solaris 2.6). + dnl Don't use AC_CHECK_DECLS because it isn't supported in autoconf-2.13. + gt_CHECK_DECL(feof_unlocked, [#include ]) + gt_CHECK_DECL(fgets_unlocked, [#include ]) + + AM_ICONV + + dnl glibc >= 2.4 has a NL_LOCALE_NAME macro when _GNU_SOURCE is defined, + dnl and a _NL_LOCALE_NAME macro always. + AC_CACHE_CHECK([for NL_LOCALE_NAME macro], gt_cv_nl_locale_name, + [AC_TRY_LINK([#include +#include ], + [char* cs = nl_langinfo(_NL_LOCALE_NAME(LC_MESSAGES));], + gt_cv_nl_locale_name=yes, + gt_cv_nl_locale_name=no) + ]) + if test $gt_cv_nl_locale_name = yes; then + AC_DEFINE(HAVE_NL_LOCALE_NAME, 1, + [Define if you have and it defines the NL_LOCALE_NAME macro if _GNU_SOURCE is defined.]) + fi + + dnl intl/plural.c is generated from intl/plural.y. It requires bison, + dnl because plural.y uses bison specific features. It requires at least + dnl bison-1.26 because earlier versions generate a plural.c that doesn't + dnl compile. + dnl bison is only needed for the maintainer (who touches plural.y). But in + dnl order to avoid separate Makefiles or --enable-maintainer-mode, we put + dnl the rule in general Makefile. Now, some people carelessly touch the + dnl files or have a broken "make" program, hence the plural.c rule will + dnl sometimes fire. To avoid an error, defines BISON to ":" if it is not + dnl present or too old. + AC_CHECK_PROGS([INTLBISON], [bison]) + if test -z "$INTLBISON"; then + ac_verc_fail=yes + else + dnl Found it, now check the version. + AC_MSG_CHECKING([version of bison]) +changequote(<<,>>)dnl + ac_prog_version=`$INTLBISON --version 2>&1 | sed -n 's/^.*GNU Bison.* \([0-9]*\.[0-9.]*\).*$/\1/p'` + case $ac_prog_version in + '') ac_prog_version="v. ?.??, bad"; ac_verc_fail=yes;; + 1.2[6-9]* | 1.[3-9][0-9]* | [2-9].*) +changequote([,])dnl + ac_prog_version="$ac_prog_version, ok"; ac_verc_fail=no;; + *) ac_prog_version="$ac_prog_version, bad"; ac_verc_fail=yes;; + esac + AC_MSG_RESULT([$ac_prog_version]) + fi + if test $ac_verc_fail = yes; then + INTLBISON=: + fi +]) + + +dnl Checks for special options needed on MacOS X. +dnl Defines INTL_MACOSX_LIBS. +AC_DEFUN([gt_INTL_MACOSX], +[ + dnl Check for API introduced in MacOS X 10.2. + AC_CACHE_CHECK([for CFPreferencesCopyAppValue], + gt_cv_func_CFPreferencesCopyAppValue, + [gt_save_LIBS="$LIBS" + LIBS="$LIBS -Wl,-framework -Wl,CoreFoundation" + AC_TRY_LINK([#include ], + [CFPreferencesCopyAppValue(NULL, NULL)], + [gt_cv_func_CFPreferencesCopyAppValue=yes], + [gt_cv_func_CFPreferencesCopyAppValue=no]) + LIBS="$gt_save_LIBS"]) + if test $gt_cv_func_CFPreferencesCopyAppValue = yes; then + AC_DEFINE([HAVE_CFPREFERENCESCOPYAPPVALUE], 1, + [Define to 1 if you have the MacOS X function CFPreferencesCopyAppValue in the CoreFoundation framework.]) + fi + dnl Check for API introduced in MacOS X 10.3. + AC_CACHE_CHECK([for CFLocaleCopyCurrent], gt_cv_func_CFLocaleCopyCurrent, + [gt_save_LIBS="$LIBS" + LIBS="$LIBS -Wl,-framework -Wl,CoreFoundation" + AC_TRY_LINK([#include ], [CFLocaleCopyCurrent();], + [gt_cv_func_CFLocaleCopyCurrent=yes], + [gt_cv_func_CFLocaleCopyCurrent=no]) + LIBS="$gt_save_LIBS"]) + if test $gt_cv_func_CFLocaleCopyCurrent = yes; then + AC_DEFINE([HAVE_CFLOCALECOPYCURRENT], 1, + [Define to 1 if you have the MacOS X function CFLocaleCopyCurrent in the CoreFoundation framework.]) + fi + INTL_MACOSX_LIBS= + if test $gt_cv_func_CFPreferencesCopyAppValue = yes || test $gt_cv_func_CFLocaleCopyCurrent = yes; then + INTL_MACOSX_LIBS="-Wl,-framework -Wl,CoreFoundation" + fi + AC_SUBST([INTL_MACOSX_LIBS]) +]) + + +dnl gt_CHECK_DECL(FUNC, INCLUDES) +dnl Check whether a function is declared. +AC_DEFUN([gt_CHECK_DECL], +[ + AC_CACHE_CHECK([whether $1 is declared], ac_cv_have_decl_$1, + [AC_TRY_COMPILE([$2], [ +#ifndef $1 + char *p = (char *) $1; +#endif +], ac_cv_have_decl_$1=yes, ac_cv_have_decl_$1=no)]) + if test $ac_cv_have_decl_$1 = yes; then + gt_value=1 + else + gt_value=0 + fi + AC_DEFINE_UNQUOTED([HAVE_DECL_]translit($1, [a-z], [A-Z]), [$gt_value], + [Define to 1 if you have the declaration of `$1', and to 0 if you don't.]) +]) + + +dnl Usage: AM_GNU_GETTEXT_VERSION([gettext-version]) +AC_DEFUN([AM_GNU_GETTEXT_VERSION], []) diff --git a/m4/glibc2.m4 b/m4/glibc2.m4 new file mode 100644 index 0000000..e8f5bfe --- /dev/null +++ b/m4/glibc2.m4 @@ -0,0 +1,30 @@ +# glibc2.m4 serial 1 +dnl Copyright (C) 2000-2002, 2004 Free Software 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. + +# Test for the GNU C Library, version 2.0 or newer. +# From Bruno Haible. + +AC_DEFUN([gt_GLIBC2], + [ + AC_CACHE_CHECK(whether we are using the GNU C Library 2 or newer, + ac_cv_gnu_library_2, + [AC_EGREP_CPP([Lucky GNU user], + [ +#include +#ifdef __GNU_LIBRARY__ + #if (__GLIBC__ >= 2) + Lucky GNU user + #endif +#endif + ], + ac_cv_gnu_library_2=yes, + ac_cv_gnu_library_2=no) + ] + ) + AC_SUBST(GLIBC2) + GLIBC2="$ac_cv_gnu_library_2" + ] +) diff --git a/m4/glibc21.m4 b/m4/glibc21.m4 new file mode 100644 index 0000000..d95fd98 --- /dev/null +++ b/m4/glibc21.m4 @@ -0,0 +1,30 @@ +# glibc21.m4 serial 3 +dnl Copyright (C) 2000-2002, 2004 Free Software 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. + +# Test for the GNU C Library, version 2.1 or newer. +# From Bruno Haible. + +AC_DEFUN([gl_GLIBC21], + [ + AC_CACHE_CHECK(whether we are using the GNU C Library 2.1 or newer, + ac_cv_gnu_library_2_1, + [AC_EGREP_CPP([Lucky GNU user], + [ +#include +#ifdef __GNU_LIBRARY__ + #if (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 1) || (__GLIBC__ > 2) + Lucky GNU user + #endif +#endif + ], + ac_cv_gnu_library_2_1=yes, + ac_cv_gnu_library_2_1=no) + ] + ) + AC_SUBST(GLIBC21) + GLIBC21="$ac_cv_gnu_library_2_1" + ] +) diff --git a/m4/iconv.m4 b/m4/iconv.m4 new file mode 100644 index 0000000..654c415 --- /dev/null +++ b/m4/iconv.m4 @@ -0,0 +1,101 @@ +# iconv.m4 serial AM4 (gettext-0.11.3) +dnl Copyright (C) 2000-2002 Free Software 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 From Bruno Haible. + +AC_DEFUN([AM_ICONV_LINKFLAGS_BODY], +[ + dnl Prerequisites of AC_LIB_LINKFLAGS_BODY. + AC_REQUIRE([AC_LIB_PREPARE_PREFIX]) + AC_REQUIRE([AC_LIB_RPATH]) + + dnl Search for libiconv and define LIBICONV, LTLIBICONV and INCICONV + dnl accordingly. + AC_LIB_LINKFLAGS_BODY([iconv]) +]) + +AC_DEFUN([AM_ICONV_LINK], +[ + dnl Some systems have iconv in libc, some have it in libiconv (OSF/1 and + dnl those with the standalone portable GNU libiconv installed). + + dnl Search for libiconv and define LIBICONV, LTLIBICONV and INCICONV + dnl accordingly. + AC_REQUIRE([AM_ICONV_LINKFLAGS_BODY]) + + dnl Add $INCICONV to CPPFLAGS before performing the following checks, + dnl because if the user has installed libiconv and not disabled its use + dnl via --without-libiconv-prefix, he wants to use it. The first + dnl AC_TRY_LINK will then fail, the second AC_TRY_LINK will succeed. + am_save_CPPFLAGS="$CPPFLAGS" + AC_LIB_APPENDTOVAR([CPPFLAGS], [$INCICONV]) + + AC_CACHE_CHECK(for iconv, am_cv_func_iconv, [ + am_cv_func_iconv="no, consider installing GNU libiconv" + am_cv_lib_iconv=no + AC_TRY_LINK([#include +#include ], + [iconv_t cd = iconv_open("",""); + iconv(cd,NULL,NULL,NULL,NULL); + iconv_close(cd);], + am_cv_func_iconv=yes) + if test "$am_cv_func_iconv" != yes; then + am_save_LIBS="$LIBS" + LIBS="$LIBS $LIBICONV" + AC_TRY_LINK([#include +#include ], + [iconv_t cd = iconv_open("",""); + iconv(cd,NULL,NULL,NULL,NULL); + iconv_close(cd);], + am_cv_lib_iconv=yes + am_cv_func_iconv=yes) + LIBS="$am_save_LIBS" + fi + ]) + if test "$am_cv_func_iconv" = yes; then + AC_DEFINE(HAVE_ICONV, 1, [Define if you have the iconv() function.]) + fi + if test "$am_cv_lib_iconv" = yes; then + AC_MSG_CHECKING([how to link with libiconv]) + AC_MSG_RESULT([$LIBICONV]) + else + dnl If $LIBICONV didn't lead to a usable library, we don't need $INCICONV + dnl either. + CPPFLAGS="$am_save_CPPFLAGS" + LIBICONV= + LTLIBICONV= + fi + AC_SUBST(LIBICONV) + AC_SUBST(LTLIBICONV) +]) + +AC_DEFUN([AM_ICONV], +[ + AM_ICONV_LINK + if test "$am_cv_func_iconv" = yes; then + AC_MSG_CHECKING([for iconv declaration]) + AC_CACHE_VAL(am_cv_proto_iconv, [ + AC_TRY_COMPILE([ +#include +#include +extern +#ifdef __cplusplus +"C" +#endif +#if defined(__STDC__) || defined(__cplusplus) +size_t iconv (iconv_t cd, char * *inbuf, size_t *inbytesleft, char * *outbuf, size_t *outbytesleft); +#else +size_t iconv(); +#endif +], [], am_cv_proto_iconv_arg1="", am_cv_proto_iconv_arg1="const") + am_cv_proto_iconv="extern size_t iconv (iconv_t cd, $am_cv_proto_iconv_arg1 char * *inbuf, size_t *inbytesleft, char * *outbuf, size_t *outbytesleft);"]) + am_cv_proto_iconv=`echo "[$]am_cv_proto_iconv" | tr -s ' ' | sed -e 's/( /(/'` + AC_MSG_RESULT([$]{ac_t:- + }[$]am_cv_proto_iconv) + AC_DEFINE_UNQUOTED(ICONV_CONST, $am_cv_proto_iconv_arg1, + [Define as const if the declaration of iconv() needs const.]) + fi +]) diff --git a/m4/intdiv0.m4 b/m4/intdiv0.m4 new file mode 100644 index 0000000..b8d7817 --- /dev/null +++ b/m4/intdiv0.m4 @@ -0,0 +1,70 @@ +# intdiv0.m4 serial 1 (gettext-0.11.3) +dnl Copyright (C) 2002 Free Software 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 From Bruno Haible. + +AC_DEFUN([gt_INTDIV0], +[ + AC_REQUIRE([AC_PROG_CC])dnl + AC_REQUIRE([AC_CANONICAL_HOST])dnl + + AC_CACHE_CHECK([whether integer division by zero raises SIGFPE], + gt_cv_int_divbyzero_sigfpe, + [ + AC_TRY_RUN([ +#include +#include + +static void +#ifdef __cplusplus +sigfpe_handler (int sig) +#else +sigfpe_handler (sig) int sig; +#endif +{ + /* Exit with code 0 if SIGFPE, with code 1 if any other signal. */ + exit (sig != SIGFPE); +} + +int x = 1; +int y = 0; +int z; +int nan; + +int main () +{ + signal (SIGFPE, sigfpe_handler); +/* IRIX and AIX (when "xlc -qcheck" is used) yield signal SIGTRAP. */ +#if (defined (__sgi) || defined (_AIX)) && defined (SIGTRAP) + signal (SIGTRAP, sigfpe_handler); +#endif +/* Linux/SPARC yields signal SIGILL. */ +#if defined (__sparc__) && defined (__linux__) + signal (SIGILL, sigfpe_handler); +#endif + + z = x / y; + nan = y / y; + exit (1); +} +], gt_cv_int_divbyzero_sigfpe=yes, gt_cv_int_divbyzero_sigfpe=no, + [ + # Guess based on the CPU. + case "$host_cpu" in + alpha* | i[34567]86 | m68k | s390*) + gt_cv_int_divbyzero_sigfpe="guessing yes";; + *) + gt_cv_int_divbyzero_sigfpe="guessing no";; + esac + ]) + ]) + case "$gt_cv_int_divbyzero_sigfpe" in + *yes) value=1;; + *) value=0;; + esac + AC_DEFINE_UNQUOTED(INTDIV0_RAISES_SIGFPE, $value, + [Define if integer division by zero raises signal SIGFPE.]) +]) diff --git a/m4/intmax.m4 b/m4/intmax.m4 new file mode 100644 index 0000000..d99c999 --- /dev/null +++ b/m4/intmax.m4 @@ -0,0 +1,30 @@ +# intmax.m4 serial 2 (gettext-0.14.2) +dnl Copyright (C) 2002-2005 Free Software 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 From Bruno Haible. +dnl Test whether the system has the 'intmax_t' type, but don't attempt to +dnl find a replacement if it is lacking. + +AC_DEFUN([gt_TYPE_INTMAX_T], +[ + AC_REQUIRE([gl_AC_HEADER_INTTYPES_H]) + AC_REQUIRE([gl_AC_HEADER_STDINT_H]) + AC_CACHE_CHECK(for intmax_t, gt_cv_c_intmax_t, + [AC_TRY_COMPILE([ +#include +#include +#if HAVE_STDINT_H_WITH_UINTMAX +#include +#endif +#if HAVE_INTTYPES_H_WITH_UINTMAX +#include +#endif +], [intmax_t x = -1;], gt_cv_c_intmax_t=yes, gt_cv_c_intmax_t=no)]) + if test $gt_cv_c_intmax_t = yes; then + AC_DEFINE(HAVE_INTMAX_T, 1, + [Define if you have the 'intmax_t' type in or .]) + fi +]) diff --git a/m4/inttypes-h.m4 b/m4/inttypes-h.m4 new file mode 100644 index 0000000..d7ec94c --- /dev/null +++ b/m4/inttypes-h.m4 @@ -0,0 +1,25 @@ +# inttypes-h.m4 serial 1 (gettext-0.15) +dnl Copyright (C) 1997-2002, 2006 Free Software 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 From Paul Eggert. + +# Define HAVE_INTTYPES_H if exists and doesn't clash with +# . + +AC_DEFUN([gl_HEADER_INTTYPES_H], +[ + AC_CACHE_CHECK([for inttypes.h], gl_cv_header_inttypes_h, + [ + AC_TRY_COMPILE( + [#include +#include ], + [], gl_cv_header_inttypes_h=yes, gl_cv_header_inttypes_h=no) + ]) + if test $gl_cv_header_inttypes_h = yes; then + AC_DEFINE_UNQUOTED(HAVE_INTTYPES_H, 1, + [Define if exists and doesn't clash with .]) + fi +]) diff --git a/m4/inttypes-pri.m4 b/m4/inttypes-pri.m4 new file mode 100644 index 0000000..ef00da7 --- /dev/null +++ b/m4/inttypes-pri.m4 @@ -0,0 +1,30 @@ +# inttypes-pri.m4 serial 2 (gettext-0.15) +dnl Copyright (C) 1997-2002, 2006 Free Software 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 From Bruno Haible. + +# Define PRI_MACROS_BROKEN if exists and defines the PRI* +# macros to non-string values. This is the case on AIX 4.3.3. + +AC_DEFUN([gt_INTTYPES_PRI], +[ + AC_REQUIRE([gl_HEADER_INTTYPES_H]) + if test $gl_cv_header_inttypes_h = yes; then + AC_CACHE_CHECK([whether the inttypes.h PRIxNN macros are broken], + gt_cv_inttypes_pri_broken, + [ + AC_TRY_COMPILE([#include +#ifdef PRId32 +char *p = PRId32; +#endif +], [], gt_cv_inttypes_pri_broken=no, gt_cv_inttypes_pri_broken=yes) + ]) + fi + if test "$gt_cv_inttypes_pri_broken" = yes; then + AC_DEFINE_UNQUOTED(PRI_MACROS_BROKEN, 1, + [Define if exists and defines unusable PRI* macros.]) + fi +]) diff --git a/m4/inttypes.m4 b/m4/inttypes.m4 new file mode 100644 index 0000000..ab370ff --- /dev/null +++ b/m4/inttypes.m4 @@ -0,0 +1,27 @@ +# inttypes.m4 serial 1 (gettext-0.11.4) +dnl Copyright (C) 1997-2002 Free Software Foundation, Inc. +dnl This file is free software, distributed under the terms of the GNU +dnl General Public License. As a special exception to the GNU General +dnl Public License, this file may be distributed as part of a program +dnl that contains a configuration script generated by Autoconf, under +dnl the same distribution terms as the rest of that program. + +dnl From Paul Eggert. + +# Define HAVE_INTTYPES_H if exists and doesn't clash with +# . + +AC_DEFUN([gt_HEADER_INTTYPES_H], +[ + AC_CACHE_CHECK([for inttypes.h], gt_cv_header_inttypes_h, + [ + AC_TRY_COMPILE( + [#include +#include ], + [], gt_cv_header_inttypes_h=yes, gt_cv_header_inttypes_h=no) + ]) + if test $gt_cv_header_inttypes_h = yes; then + AC_DEFINE_UNQUOTED(HAVE_INTTYPES_H, 1, + [Define if exists and doesn't clash with .]) + fi +]) diff --git a/m4/inttypes_h.m4 b/m4/inttypes_h.m4 new file mode 100644 index 0000000..a5d075d --- /dev/null +++ b/m4/inttypes_h.m4 @@ -0,0 +1,26 @@ +# inttypes_h.m4 serial 6 +dnl Copyright (C) 1997-2004 Free Software 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 From Paul Eggert. + +# Define HAVE_INTTYPES_H_WITH_UINTMAX if exists, +# doesn't clash with , and declares uintmax_t. + +AC_DEFUN([gl_AC_HEADER_INTTYPES_H], +[ + AC_CACHE_CHECK([for inttypes.h], gl_cv_header_inttypes_h, + [AC_TRY_COMPILE( + [#include +#include ], + [uintmax_t i = (uintmax_t) -1;], + gl_cv_header_inttypes_h=yes, + gl_cv_header_inttypes_h=no)]) + if test $gl_cv_header_inttypes_h = yes; then + AC_DEFINE_UNQUOTED(HAVE_INTTYPES_H_WITH_UINTMAX, 1, + [Define if exists, doesn't clash with , + and declares uintmax_t. ]) + fi +]) diff --git a/m4/isc-posix.m4 b/m4/isc-posix.m4 new file mode 100644 index 0000000..1319dd1 --- /dev/null +++ b/m4/isc-posix.m4 @@ -0,0 +1,26 @@ +# isc-posix.m4 serial 2 (gettext-0.11.2) +dnl Copyright (C) 1995-2002 Free Software Foundation, Inc. +dnl This file is free software, distributed under the terms of the GNU +dnl General Public License. As a special exception to the GNU General +dnl Public License, this file may be distributed as part of a program +dnl that contains a configuration script generated by Autoconf, under +dnl the same distribution terms as the rest of that program. + +# This file is not needed with autoconf-2.53 and newer. Remove it in 2005. + +# This test replaces the one in autoconf. +# Currently this macro should have the same name as the autoconf macro +# because gettext's gettext.m4 (distributed in the automake package) +# still uses it. Otherwise, the use in gettext.m4 makes autoheader +# give these diagnostics: +# configure.in:556: AC_TRY_COMPILE was called before AC_ISC_POSIX +# configure.in:556: AC_TRY_RUN was called before AC_ISC_POSIX + +undefine([AC_ISC_POSIX]) + +AC_DEFUN([AC_ISC_POSIX], + [ + dnl This test replaces the obsolescent AC_ISC_POSIX kludge. + AC_CHECK_LIB(cposix, strerror, [LIBS="$LIBS -lcposix"]) + ] +) diff --git a/m4/japhar_grep_cflags.m4 b/m4/japhar_grep_cflags.m4 new file mode 100644 index 0000000..246b698 --- /dev/null +++ b/m4/japhar_grep_cflags.m4 @@ -0,0 +1,16 @@ +dnl +dnl JAPHAR_GREP_CFLAGS(flag, cmd_if_missing, cmd_if_present) +dnl +dnl From Japhar. Report changes to japhar@hungry.com +dnl +AC_DEFUN([JAPHAR_GREP_CFLAGS], +[case "$CFLAGS" in +"$1" | "$1 "* | *" $1" | *" $1 "* ) + ifelse($#, 3, [$3], [:]) + ;; +*) + $2 + ;; +esac +]) + diff --git a/m4/lcmessage.m4 b/m4/lcmessage.m4 new file mode 100644 index 0000000..19aa77e --- /dev/null +++ b/m4/lcmessage.m4 @@ -0,0 +1,30 @@ +# lcmessage.m4 serial 4 (gettext-0.14.2) +dnl Copyright (C) 1995-2002, 2004-2005 Free Software 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 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 package is covered by the GNU General Public License. +dnl They are *not* in the public domain. + +dnl Authors: +dnl Ulrich Drepper , 1995. + +# Check whether LC_MESSAGES is available in . + +AC_DEFUN([gt_LC_MESSAGES], +[ + AC_CACHE_CHECK([for LC_MESSAGES], gt_cv_val_LC_MESSAGES, + [AC_TRY_LINK([#include ], [return LC_MESSAGES], + gt_cv_val_LC_MESSAGES=yes, gt_cv_val_LC_MESSAGES=no)]) + if test $gt_cv_val_LC_MESSAGES = yes; then + AC_DEFINE(HAVE_LC_MESSAGES, 1, + [Define if your file defines LC_MESSAGES.]) + fi +]) diff --git a/m4/lib-ld.m4 b/m4/lib-ld.m4 new file mode 100644 index 0000000..96c4e2c --- /dev/null +++ b/m4/lib-ld.m4 @@ -0,0 +1,110 @@ +# lib-ld.m4 serial 3 (gettext-0.13) +dnl Copyright (C) 1996-2003 Free Software 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 Subroutines of libtool.m4, +dnl with replacements s/AC_/AC_LIB/ and s/lt_cv/acl_cv/ to avoid collision +dnl with libtool.m4. + +dnl From libtool-1.4. Sets the variable with_gnu_ld to yes or no. +AC_DEFUN([AC_LIB_PROG_LD_GNU], +[AC_CACHE_CHECK([if the linker ($LD) is GNU ld], acl_cv_prog_gnu_ld, +[# I'd rather use --version here, but apparently some GNU ld's only accept -v. +case `$LD -v 2>&1 conf$$.sh + echo "exit 0" >>conf$$.sh + chmod +x conf$$.sh + if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then + PATH_SEPARATOR=';' + else + PATH_SEPARATOR=: + fi + rm -f conf$$.sh +fi +ac_prog=ld +if test "$GCC" = yes; then + # Check if gcc -print-prog-name=ld gives a path. + AC_MSG_CHECKING([for ld used by GCC]) + case $host in + *-*-mingw*) + # gcc leaves a trailing carriage return which upsets mingw + ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; + *) + ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; + esac + case $ac_prog in + # Accept absolute paths. + [[\\/]* | [A-Za-z]:[\\/]*)] + [re_direlt='/[^/][^/]*/\.\./'] + # Canonicalize the path of ld + ac_prog=`echo $ac_prog| sed 's%\\\\%/%g'` + while echo $ac_prog | grep "$re_direlt" > /dev/null 2>&1; do + ac_prog=`echo $ac_prog| sed "s%$re_direlt%/%"` + done + test -z "$LD" && LD="$ac_prog" + ;; + "") + # If it fails, then pretend we aren't using GCC. + ac_prog=ld + ;; + *) + # If it is relative, then search for the first ld in PATH. + with_gnu_ld=unknown + ;; + esac +elif test "$with_gnu_ld" = yes; then + AC_MSG_CHECKING([for GNU ld]) +else + AC_MSG_CHECKING([for non-GNU ld]) +fi +AC_CACHE_VAL(acl_cv_path_LD, +[if test -z "$LD"; then + IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}${PATH_SEPARATOR-:}" + for ac_dir in $PATH; do + test -z "$ac_dir" && ac_dir=. + if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then + acl_cv_path_LD="$ac_dir/$ac_prog" + # Check to see if the program is GNU ld. I'd rather use --version, + # but apparently some GNU ld's only accept -v. + # Break only if it was the GNU/non-GNU ld that we prefer. + case `"$acl_cv_path_LD" -v 2>&1 < /dev/null` in + *GNU* | *'with BFD'*) + test "$with_gnu_ld" != no && break ;; + *) + test "$with_gnu_ld" != yes && break ;; + esac + fi + done + IFS="$ac_save_ifs" +else + acl_cv_path_LD="$LD" # Let the user override the test with a path. +fi]) +LD="$acl_cv_path_LD" +if test -n "$LD"; then + AC_MSG_RESULT($LD) +else + AC_MSG_RESULT(no) +fi +test -z "$LD" && AC_MSG_ERROR([no acceptable ld found in \$PATH]) +AC_LIB_PROG_LD_GNU +]) diff --git a/m4/lib-link.m4 b/m4/lib-link.m4 new file mode 100644 index 0000000..9292919 --- /dev/null +++ b/m4/lib-link.m4 @@ -0,0 +1,630 @@ +# lib-link.m4 serial 8 (gettext-0.15) +dnl Copyright (C) 2001-2006 Free Software 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 From Bruno Haible. + +AC_PREREQ(2.50) + +dnl AC_LIB_LINKFLAGS(name [, dependencies]) searches for libname and +dnl the libraries corresponding to explicit and implicit dependencies. +dnl Sets and AC_SUBSTs the LIB${NAME} and LTLIB${NAME} variables and +dnl augments the CPPFLAGS variable. +AC_DEFUN([AC_LIB_LINKFLAGS], +[ + AC_REQUIRE([AC_LIB_PREPARE_PREFIX]) + AC_REQUIRE([AC_LIB_RPATH]) + define([Name],[translit([$1],[./-], [___])]) + define([NAME],[translit([$1],[abcdefghijklmnopqrstuvwxyz./-], + [ABCDEFGHIJKLMNOPQRSTUVWXYZ___])]) + AC_CACHE_CHECK([how to link with lib[]$1], [ac_cv_lib[]Name[]_libs], [ + AC_LIB_LINKFLAGS_BODY([$1], [$2]) + ac_cv_lib[]Name[]_libs="$LIB[]NAME" + ac_cv_lib[]Name[]_ltlibs="$LTLIB[]NAME" + ac_cv_lib[]Name[]_cppflags="$INC[]NAME" + ]) + LIB[]NAME="$ac_cv_lib[]Name[]_libs" + LTLIB[]NAME="$ac_cv_lib[]Name[]_ltlibs" + INC[]NAME="$ac_cv_lib[]Name[]_cppflags" + AC_LIB_APPENDTOVAR([CPPFLAGS], [$INC]NAME) + AC_SUBST([LIB]NAME) + AC_SUBST([LTLIB]NAME) + dnl Also set HAVE_LIB[]NAME so that AC_LIB_HAVE_LINKFLAGS can reuse the + dnl results of this search when this library appears as a dependency. + HAVE_LIB[]NAME=yes + undefine([Name]) + undefine([NAME]) +]) + +dnl AC_LIB_HAVE_LINKFLAGS(name, dependencies, includes, testcode) +dnl searches for libname and the libraries corresponding to explicit and +dnl implicit dependencies, together with the specified include files and +dnl the ability to compile and link the specified testcode. If found, it +dnl sets and AC_SUBSTs HAVE_LIB${NAME}=yes and the LIB${NAME} and +dnl LTLIB${NAME} variables and augments the CPPFLAGS variable, and +dnl #defines HAVE_LIB${NAME} to 1. Otherwise, it sets and AC_SUBSTs +dnl HAVE_LIB${NAME}=no and LIB${NAME} and LTLIB${NAME} to empty. +AC_DEFUN([AC_LIB_HAVE_LINKFLAGS], +[ + AC_REQUIRE([AC_LIB_PREPARE_PREFIX]) + AC_REQUIRE([AC_LIB_RPATH]) + define([Name],[translit([$1],[./-], [___])]) + define([NAME],[translit([$1],[abcdefghijklmnopqrstuvwxyz./-], + [ABCDEFGHIJKLMNOPQRSTUVWXYZ___])]) + + dnl Search for lib[]Name and define LIB[]NAME, LTLIB[]NAME and INC[]NAME + dnl accordingly. + AC_LIB_LINKFLAGS_BODY([$1], [$2]) + + dnl Add $INC[]NAME to CPPFLAGS before performing the following checks, + dnl because if the user has installed lib[]Name and not disabled its use + dnl via --without-lib[]Name-prefix, he wants to use it. + ac_save_CPPFLAGS="$CPPFLAGS" + AC_LIB_APPENDTOVAR([CPPFLAGS], [$INC]NAME) + + AC_CACHE_CHECK([for lib[]$1], [ac_cv_lib[]Name], [ + ac_save_LIBS="$LIBS" + LIBS="$LIBS $LIB[]NAME" + AC_TRY_LINK([$3], [$4], [ac_cv_lib[]Name=yes], [ac_cv_lib[]Name=no]) + LIBS="$ac_save_LIBS" + ]) + if test "$ac_cv_lib[]Name" = yes; then + HAVE_LIB[]NAME=yes + AC_DEFINE([HAVE_LIB]NAME, 1, [Define if you have the $1 library.]) + AC_MSG_CHECKING([how to link with lib[]$1]) + AC_MSG_RESULT([$LIB[]NAME]) + else + HAVE_LIB[]NAME=no + dnl If $LIB[]NAME didn't lead to a usable library, we don't need + dnl $INC[]NAME either. + CPPFLAGS="$ac_save_CPPFLAGS" + LIB[]NAME= + LTLIB[]NAME= + fi + AC_SUBST([HAVE_LIB]NAME) + AC_SUBST([LIB]NAME) + AC_SUBST([LTLIB]NAME) + undefine([Name]) + undefine([NAME]) +]) + +dnl Determine the platform dependent parameters needed to use rpath: +dnl libext, shlibext, hardcode_libdir_flag_spec, hardcode_libdir_separator, +dnl hardcode_direct, hardcode_minus_L. +AC_DEFUN([AC_LIB_RPATH], +[ + dnl Tell automake >= 1.10 to complain if config.rpath is missing. + m4_ifdef([AC_REQUIRE_AUX_FILE], [AC_REQUIRE_AUX_FILE([config.rpath])]) + AC_REQUIRE([AC_PROG_CC]) dnl we use $CC, $GCC, $LDFLAGS + AC_REQUIRE([AC_LIB_PROG_LD]) dnl we use $LD, $with_gnu_ld + AC_REQUIRE([AC_CANONICAL_HOST]) dnl we use $host + AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT]) dnl we use $ac_aux_dir + AC_CACHE_CHECK([for shared library run path origin], acl_cv_rpath, [ + CC="$CC" GCC="$GCC" LDFLAGS="$LDFLAGS" LD="$LD" with_gnu_ld="$with_gnu_ld" \ + ${CONFIG_SHELL-/bin/sh} "$ac_aux_dir/config.rpath" "$host" > conftest.sh + . ./conftest.sh + rm -f ./conftest.sh + acl_cv_rpath=done + ]) + wl="$acl_cv_wl" + libext="$acl_cv_libext" + shlibext="$acl_cv_shlibext" + hardcode_libdir_flag_spec="$acl_cv_hardcode_libdir_flag_spec" + hardcode_libdir_separator="$acl_cv_hardcode_libdir_separator" + hardcode_direct="$acl_cv_hardcode_direct" + hardcode_minus_L="$acl_cv_hardcode_minus_L" + dnl Determine whether the user wants rpath handling at all. + AC_ARG_ENABLE(rpath, + [ --disable-rpath do not hardcode runtime library paths], + :, enable_rpath=yes) +]) + +dnl AC_LIB_LINKFLAGS_BODY(name [, dependencies]) searches for libname and +dnl the libraries corresponding to explicit and implicit dependencies. +dnl Sets the LIB${NAME}, LTLIB${NAME} and INC${NAME} variables. +AC_DEFUN([AC_LIB_LINKFLAGS_BODY], +[ + AC_REQUIRE([AC_LIB_PREPARE_MULTILIB]) + define([NAME],[translit([$1],[abcdefghijklmnopqrstuvwxyz./-], + [ABCDEFGHIJKLMNOPQRSTUVWXYZ___])]) + dnl By default, look in $includedir and $libdir. + use_additional=yes + AC_LIB_WITH_FINAL_PREFIX([ + eval additional_includedir=\"$includedir\" + eval additional_libdir=\"$libdir\" + ]) + AC_LIB_ARG_WITH([lib$1-prefix], +[ --with-lib$1-prefix[=DIR] search for lib$1 in DIR/include and DIR/lib + --without-lib$1-prefix don't search for lib$1 in includedir and libdir], +[ + if test "X$withval" = "Xno"; then + use_additional=no + else + if test "X$withval" = "X"; then + AC_LIB_WITH_FINAL_PREFIX([ + eval additional_includedir=\"$includedir\" + eval additional_libdir=\"$libdir\" + ]) + else + additional_includedir="$withval/include" + additional_libdir="$withval/$acl_libdirstem" + fi + fi +]) + dnl Search the library and its dependencies in $additional_libdir and + dnl $LDFLAGS. Using breadth-first-seach. + LIB[]NAME= + LTLIB[]NAME= + INC[]NAME= + rpathdirs= + ltrpathdirs= + names_already_handled= + names_next_round='$1 $2' + while test -n "$names_next_round"; do + names_this_round="$names_next_round" + names_next_round= + for name in $names_this_round; do + already_handled= + for n in $names_already_handled; do + if test "$n" = "$name"; then + already_handled=yes + break + fi + done + if test -z "$already_handled"; then + names_already_handled="$names_already_handled $name" + dnl See if it was already located by an earlier AC_LIB_LINKFLAGS + dnl or AC_LIB_HAVE_LINKFLAGS call. + uppername=`echo "$name" | sed -e 'y|abcdefghijklmnopqrstuvwxyz./-|ABCDEFGHIJKLMNOPQRSTUVWXYZ___|'` + eval value=\"\$HAVE_LIB$uppername\" + if test -n "$value"; then + if test "$value" = yes; then + eval value=\"\$LIB$uppername\" + test -z "$value" || LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$value" + eval value=\"\$LTLIB$uppername\" + test -z "$value" || LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }$value" + else + dnl An earlier call to AC_LIB_HAVE_LINKFLAGS has determined + dnl that this library doesn't exist. So just drop it. + : + fi + else + dnl Search the library lib$name in $additional_libdir and $LDFLAGS + dnl and the already constructed $LIBNAME/$LTLIBNAME. + found_dir= + found_la= + found_so= + found_a= + if test $use_additional = yes; then + if test -n "$shlibext" && test -f "$additional_libdir/lib$name.$shlibext"; then + found_dir="$additional_libdir" + found_so="$additional_libdir/lib$name.$shlibext" + if test -f "$additional_libdir/lib$name.la"; then + found_la="$additional_libdir/lib$name.la" + fi + else + if test -f "$additional_libdir/lib$name.$libext"; then + found_dir="$additional_libdir" + found_a="$additional_libdir/lib$name.$libext" + if test -f "$additional_libdir/lib$name.la"; then + found_la="$additional_libdir/lib$name.la" + fi + fi + fi + fi + if test "X$found_dir" = "X"; then + for x in $LDFLAGS $LTLIB[]NAME; do + AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) + case "$x" in + -L*) + dir=`echo "X$x" | sed -e 's/^X-L//'` + if test -n "$shlibext" && test -f "$dir/lib$name.$shlibext"; then + found_dir="$dir" + found_so="$dir/lib$name.$shlibext" + if test -f "$dir/lib$name.la"; then + found_la="$dir/lib$name.la" + fi + else + if test -f "$dir/lib$name.$libext"; then + found_dir="$dir" + found_a="$dir/lib$name.$libext" + if test -f "$dir/lib$name.la"; then + found_la="$dir/lib$name.la" + fi + fi + fi + ;; + esac + if test "X$found_dir" != "X"; then + break + fi + done + fi + if test "X$found_dir" != "X"; then + dnl Found the library. + LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-L$found_dir -l$name" + if test "X$found_so" != "X"; then + dnl Linking with a shared library. We attempt to hardcode its + dnl directory into the executable's runpath, unless it's the + dnl standard /usr/lib. + if test "$enable_rpath" = no || test "X$found_dir" = "X/usr/$acl_libdirstem"; then + dnl No hardcoding is needed. + LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so" + else + dnl Use an explicit option to hardcode DIR into the resulting + dnl binary. + dnl Potentially add DIR to ltrpathdirs. + dnl The ltrpathdirs will be appended to $LTLIBNAME at the end. + haveit= + for x in $ltrpathdirs; do + if test "X$x" = "X$found_dir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + ltrpathdirs="$ltrpathdirs $found_dir" + fi + dnl The hardcoding into $LIBNAME is system dependent. + if test "$hardcode_direct" = yes; then + dnl Using DIR/libNAME.so during linking hardcodes DIR into the + dnl resulting binary. + LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so" + else + if test -n "$hardcode_libdir_flag_spec" && test "$hardcode_minus_L" = no; then + dnl Use an explicit option to hardcode DIR into the resulting + dnl binary. + LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so" + dnl Potentially add DIR to rpathdirs. + dnl The rpathdirs will be appended to $LIBNAME at the end. + haveit= + for x in $rpathdirs; do + if test "X$x" = "X$found_dir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + rpathdirs="$rpathdirs $found_dir" + fi + else + dnl Rely on "-L$found_dir". + dnl But don't add it if it's already contained in the LDFLAGS + dnl or the already constructed $LIBNAME + haveit= + for x in $LDFLAGS $LIB[]NAME; do + AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) + if test "X$x" = "X-L$found_dir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-L$found_dir" + fi + if test "$hardcode_minus_L" != no; then + dnl FIXME: Not sure whether we should use + dnl "-L$found_dir -l$name" or "-L$found_dir $found_so" + dnl here. + LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so" + else + dnl We cannot use $hardcode_runpath_var and LD_RUN_PATH + dnl here, because this doesn't fit in flags passed to the + dnl compiler. So give up. No hardcoding. This affects only + dnl very old systems. + dnl FIXME: Not sure whether we should use + dnl "-L$found_dir -l$name" or "-L$found_dir $found_so" + dnl here. + LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-l$name" + fi + fi + fi + fi + else + if test "X$found_a" != "X"; then + dnl Linking with a static library. + LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_a" + else + dnl We shouldn't come here, but anyway it's good to have a + dnl fallback. + LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-L$found_dir -l$name" + fi + fi + dnl Assume the include files are nearby. + additional_includedir= + case "$found_dir" in + */$acl_libdirstem | */$acl_libdirstem/) + basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem/"'*$,,'` + additional_includedir="$basedir/include" + ;; + esac + if test "X$additional_includedir" != "X"; then + dnl Potentially add $additional_includedir to $INCNAME. + dnl But don't add it + dnl 1. if it's the standard /usr/include, + dnl 2. if it's /usr/local/include and we are using GCC on Linux, + dnl 3. if it's already present in $CPPFLAGS or the already + dnl constructed $INCNAME, + dnl 4. if it doesn't exist as a directory. + if test "X$additional_includedir" != "X/usr/include"; then + haveit= + if test "X$additional_includedir" = "X/usr/local/include"; then + if test -n "$GCC"; then + case $host_os in + linux* | gnu* | k*bsd*-gnu) haveit=yes;; + esac + fi + fi + if test -z "$haveit"; then + for x in $CPPFLAGS $INC[]NAME; do + AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) + if test "X$x" = "X-I$additional_includedir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + if test -d "$additional_includedir"; then + dnl Really add $additional_includedir to $INCNAME. + INC[]NAME="${INC[]NAME}${INC[]NAME:+ }-I$additional_includedir" + fi + fi + fi + fi + fi + dnl Look for dependencies. + if test -n "$found_la"; then + dnl Read the .la file. It defines the variables + dnl dlname, library_names, old_library, dependency_libs, current, + dnl age, revision, installed, dlopen, dlpreopen, libdir. + save_libdir="$libdir" + case "$found_la" in + */* | *\\*) . "$found_la" ;; + *) . "./$found_la" ;; + esac + libdir="$save_libdir" + dnl We use only dependency_libs. + for dep in $dependency_libs; do + case "$dep" in + -L*) + additional_libdir=`echo "X$dep" | sed -e 's/^X-L//'` + dnl Potentially add $additional_libdir to $LIBNAME and $LTLIBNAME. + dnl But don't add it + dnl 1. if it's the standard /usr/lib, + dnl 2. if it's /usr/local/lib and we are using GCC on Linux, + dnl 3. if it's already present in $LDFLAGS or the already + dnl constructed $LIBNAME, + dnl 4. if it doesn't exist as a directory. + if test "X$additional_libdir" != "X/usr/$acl_libdirstem"; then + haveit= + if test "X$additional_libdir" = "X/usr/local/$acl_libdirstem"; then + if test -n "$GCC"; then + case $host_os in + linux* | gnu* | k*bsd*-gnu) haveit=yes;; + esac + fi + fi + if test -z "$haveit"; then + haveit= + for x in $LDFLAGS $LIB[]NAME; do + AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) + if test "X$x" = "X-L$additional_libdir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + if test -d "$additional_libdir"; then + dnl Really add $additional_libdir to $LIBNAME. + LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-L$additional_libdir" + fi + fi + haveit= + for x in $LDFLAGS $LTLIB[]NAME; do + AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) + if test "X$x" = "X-L$additional_libdir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + if test -d "$additional_libdir"; then + dnl Really add $additional_libdir to $LTLIBNAME. + LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-L$additional_libdir" + fi + fi + fi + fi + ;; + -R*) + dir=`echo "X$dep" | sed -e 's/^X-R//'` + if test "$enable_rpath" != no; then + dnl Potentially add DIR to rpathdirs. + dnl The rpathdirs will be appended to $LIBNAME at the end. + haveit= + for x in $rpathdirs; do + if test "X$x" = "X$dir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + rpathdirs="$rpathdirs $dir" + fi + dnl Potentially add DIR to ltrpathdirs. + dnl The ltrpathdirs will be appended to $LTLIBNAME at the end. + haveit= + for x in $ltrpathdirs; do + if test "X$x" = "X$dir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + ltrpathdirs="$ltrpathdirs $dir" + fi + fi + ;; + -l*) + dnl Handle this in the next round. + names_next_round="$names_next_round "`echo "X$dep" | sed -e 's/^X-l//'` + ;; + *.la) + dnl Handle this in the next round. Throw away the .la's + dnl directory; it is already contained in a preceding -L + dnl option. + names_next_round="$names_next_round "`echo "X$dep" | sed -e 's,^X.*/,,' -e 's,^lib,,' -e 's,\.la$,,'` + ;; + *) + dnl Most likely an immediate library name. + LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$dep" + LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }$dep" + ;; + esac + done + fi + else + dnl Didn't find the library; assume it is in the system directories + dnl known to the linker and runtime loader. (All the system + dnl directories known to the linker should also be known to the + dnl runtime loader, otherwise the system is severely misconfigured.) + LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-l$name" + LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-l$name" + fi + fi + fi + done + done + if test "X$rpathdirs" != "X"; then + if test -n "$hardcode_libdir_separator"; then + dnl Weird platform: only the last -rpath option counts, the user must + dnl pass all path elements in one option. We can arrange that for a + dnl single library, but not when more than one $LIBNAMEs are used. + alldirs= + for found_dir in $rpathdirs; do + alldirs="${alldirs}${alldirs:+$hardcode_libdir_separator}$found_dir" + done + dnl Note: hardcode_libdir_flag_spec uses $libdir and $wl. + acl_save_libdir="$libdir" + libdir="$alldirs" + eval flag=\"$hardcode_libdir_flag_spec\" + libdir="$acl_save_libdir" + LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$flag" + else + dnl The -rpath options are cumulative. + for found_dir in $rpathdirs; do + acl_save_libdir="$libdir" + libdir="$found_dir" + eval flag=\"$hardcode_libdir_flag_spec\" + libdir="$acl_save_libdir" + LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$flag" + done + fi + fi + if test "X$ltrpathdirs" != "X"; then + dnl When using libtool, the option that works for both libraries and + dnl executables is -R. The -R options are cumulative. + for found_dir in $ltrpathdirs; do + LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-R$found_dir" + done + fi +]) + +dnl AC_LIB_APPENDTOVAR(VAR, CONTENTS) appends the elements of CONTENTS to VAR, +dnl unless already present in VAR. +dnl Works only for CPPFLAGS, not for LIB* variables because that sometimes +dnl contains two or three consecutive elements that belong together. +AC_DEFUN([AC_LIB_APPENDTOVAR], +[ + for element in [$2]; do + haveit= + for x in $[$1]; do + AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) + if test "X$x" = "X$element"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + [$1]="${[$1]}${[$1]:+ }$element" + fi + done +]) + +dnl For those cases where a variable contains several -L and -l options +dnl referring to unknown libraries and directories, this macro determines the +dnl necessary additional linker options for the runtime path. +dnl AC_LIB_LINKFLAGS_FROM_LIBS([LDADDVAR], [LIBSVALUE], [USE-LIBTOOL]) +dnl sets LDADDVAR to linker options needed together with LIBSVALUE. +dnl If USE-LIBTOOL evaluates to non-empty, linking with libtool is assumed, +dnl otherwise linking without libtool is assumed. +AC_DEFUN([AC_LIB_LINKFLAGS_FROM_LIBS], +[ + AC_REQUIRE([AC_LIB_RPATH]) + AC_REQUIRE([AC_LIB_PREPARE_MULTILIB]) + $1= + if test "$enable_rpath" != no; then + if test -n "$hardcode_libdir_flag_spec" && test "$hardcode_minus_L" = no; then + dnl Use an explicit option to hardcode directories into the resulting + dnl binary. + rpathdirs= + next= + for opt in $2; do + if test -n "$next"; then + dir="$next" + dnl No need to hardcode the standard /usr/lib. + if test "X$dir" != "X/usr/$acl_libdirstem"; then + rpathdirs="$rpathdirs $dir" + fi + next= + else + case $opt in + -L) next=yes ;; + -L*) dir=`echo "X$opt" | sed -e 's,^X-L,,'` + dnl No need to hardcode the standard /usr/lib. + if test "X$dir" != "X/usr/$acl_libdirstem"; then + rpathdirs="$rpathdirs $dir" + fi + next= ;; + *) next= ;; + esac + fi + done + if test "X$rpathdirs" != "X"; then + if test -n ""$3""; then + dnl libtool is used for linking. Use -R options. + for dir in $rpathdirs; do + $1="${$1}${$1:+ }-R$dir" + done + else + dnl The linker is used for linking directly. + if test -n "$hardcode_libdir_separator"; then + dnl Weird platform: only the last -rpath option counts, the user + dnl must pass all path elements in one option. + alldirs= + for dir in $rpathdirs; do + alldirs="${alldirs}${alldirs:+$hardcode_libdir_separator}$dir" + done + acl_save_libdir="$libdir" + libdir="$alldirs" + eval flag=\"$hardcode_libdir_flag_spec\" + libdir="$acl_save_libdir" + $1="$flag" + else + dnl The -rpath options are cumulative. + for dir in $rpathdirs; do + acl_save_libdir="$libdir" + libdir="$dir" + eval flag=\"$hardcode_libdir_flag_spec\" + libdir="$acl_save_libdir" + $1="${$1}${$1:+ }$flag" + done + fi + fi + fi + fi + fi + AC_SUBST([$1]) +]) diff --git a/m4/lib-prefix.m4 b/m4/lib-prefix.m4 new file mode 100644 index 0000000..a8684e1 --- /dev/null +++ b/m4/lib-prefix.m4 @@ -0,0 +1,185 @@ +# lib-prefix.m4 serial 5 (gettext-0.15) +dnl Copyright (C) 2001-2005 Free Software 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 From Bruno Haible. + +dnl AC_LIB_ARG_WITH is synonymous to AC_ARG_WITH in autoconf-2.13, and +dnl similar to AC_ARG_WITH in autoconf 2.52...2.57 except that is doesn't +dnl require excessive bracketing. +ifdef([AC_HELP_STRING], +[AC_DEFUN([AC_LIB_ARG_WITH], [AC_ARG_WITH([$1],[[$2]],[$3],[$4])])], +[AC_DEFUN([AC_][LIB_ARG_WITH], [AC_ARG_WITH([$1],[$2],[$3],[$4])])]) + +dnl AC_LIB_PREFIX adds to the CPPFLAGS and LDFLAGS the flags that are needed +dnl to access previously installed libraries. The basic assumption is that +dnl a user will want packages to use other packages he previously installed +dnl with the same --prefix option. +dnl This macro is not needed if only AC_LIB_LINKFLAGS is used to locate +dnl libraries, but is otherwise very convenient. +AC_DEFUN([AC_LIB_PREFIX], +[ + AC_BEFORE([$0], [AC_LIB_LINKFLAGS]) + AC_REQUIRE([AC_PROG_CC]) + AC_REQUIRE([AC_CANONICAL_HOST]) + AC_REQUIRE([AC_LIB_PREPARE_MULTILIB]) + AC_REQUIRE([AC_LIB_PREPARE_PREFIX]) + dnl By default, look in $includedir and $libdir. + use_additional=yes + AC_LIB_WITH_FINAL_PREFIX([ + eval additional_includedir=\"$includedir\" + eval additional_libdir=\"$libdir\" + ]) + AC_LIB_ARG_WITH([lib-prefix], +[ --with-lib-prefix[=DIR] search for libraries in DIR/include and DIR/lib + --without-lib-prefix don't search for libraries in includedir and libdir], +[ + if test "X$withval" = "Xno"; then + use_additional=no + else + if test "X$withval" = "X"; then + AC_LIB_WITH_FINAL_PREFIX([ + eval additional_includedir=\"$includedir\" + eval additional_libdir=\"$libdir\" + ]) + else + additional_includedir="$withval/include" + additional_libdir="$withval/$acl_libdirstem" + fi + fi +]) + if test $use_additional = yes; then + dnl Potentially add $additional_includedir to $CPPFLAGS. + dnl But don't add it + dnl 1. if it's the standard /usr/include, + dnl 2. if it's already present in $CPPFLAGS, + dnl 3. if it's /usr/local/include and we are using GCC on Linux, + dnl 4. if it doesn't exist as a directory. + if test "X$additional_includedir" != "X/usr/include"; then + haveit= + for x in $CPPFLAGS; do + AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) + if test "X$x" = "X-I$additional_includedir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + if test "X$additional_includedir" = "X/usr/local/include"; then + if test -n "$GCC"; then + case $host_os in + linux* | gnu* | k*bsd*-gnu) haveit=yes;; + esac + fi + fi + if test -z "$haveit"; then + if test -d "$additional_includedir"; then + dnl Really add $additional_includedir to $CPPFLAGS. + CPPFLAGS="${CPPFLAGS}${CPPFLAGS:+ }-I$additional_includedir" + fi + fi + fi + fi + dnl Potentially add $additional_libdir to $LDFLAGS. + dnl But don't add it + dnl 1. if it's the standard /usr/lib, + dnl 2. if it's already present in $LDFLAGS, + dnl 3. if it's /usr/local/lib and we are using GCC on Linux, + dnl 4. if it doesn't exist as a directory. + if test "X$additional_libdir" != "X/usr/$acl_libdirstem"; then + haveit= + for x in $LDFLAGS; do + AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) + if test "X$x" = "X-L$additional_libdir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + if test "X$additional_libdir" = "X/usr/local/$acl_libdirstem"; then + if test -n "$GCC"; then + case $host_os in + linux*) haveit=yes;; + esac + fi + fi + if test -z "$haveit"; then + if test -d "$additional_libdir"; then + dnl Really add $additional_libdir to $LDFLAGS. + LDFLAGS="${LDFLAGS}${LDFLAGS:+ }-L$additional_libdir" + fi + fi + fi + fi + fi +]) + +dnl AC_LIB_PREPARE_PREFIX creates variables acl_final_prefix, +dnl acl_final_exec_prefix, containing the values to which $prefix and +dnl $exec_prefix will expand at the end of the configure script. +AC_DEFUN([AC_LIB_PREPARE_PREFIX], +[ + dnl Unfortunately, prefix and exec_prefix get only finally determined + dnl at the end of configure. + if test "X$prefix" = "XNONE"; then + acl_final_prefix="$ac_default_prefix" + else + acl_final_prefix="$prefix" + fi + if test "X$exec_prefix" = "XNONE"; then + acl_final_exec_prefix='${prefix}' + else + acl_final_exec_prefix="$exec_prefix" + fi + acl_save_prefix="$prefix" + prefix="$acl_final_prefix" + eval acl_final_exec_prefix=\"$acl_final_exec_prefix\" + prefix="$acl_save_prefix" +]) + +dnl AC_LIB_WITH_FINAL_PREFIX([statement]) evaluates statement, with the +dnl variables prefix and exec_prefix bound to the values they will have +dnl at the end of the configure script. +AC_DEFUN([AC_LIB_WITH_FINAL_PREFIX], +[ + acl_save_prefix="$prefix" + prefix="$acl_final_prefix" + acl_save_exec_prefix="$exec_prefix" + exec_prefix="$acl_final_exec_prefix" + $1 + exec_prefix="$acl_save_exec_prefix" + prefix="$acl_save_prefix" +]) + +dnl AC_LIB_PREPARE_MULTILIB creates a variable acl_libdirstem, containing +dnl the basename of the libdir, either "lib" or "lib64". +AC_DEFUN([AC_LIB_PREPARE_MULTILIB], +[ + dnl There is no formal standard regarding lib and lib64. The current + dnl practice is that on a system supporting 32-bit and 64-bit instruction + dnl sets or ABIs, 64-bit libraries go under $prefix/lib64 and 32-bit + dnl libraries go under $prefix/lib. We determine the compiler's default + dnl mode by looking at the compiler's library search path. If at least + dnl of its elements ends in /lib64 or points to a directory whose absolute + dnl pathname ends in /lib64, we assume a 64-bit ABI. Otherwise we use the + dnl default, namely "lib". + acl_libdirstem=lib + searchpath=`(LC_ALL=C $CC -print-search-dirs) 2>/dev/null | sed -n -e 's,^libraries: ,,p' | sed -e 's,^=,,'` + if test -n "$searchpath"; then + acl_save_IFS="${IFS= }"; IFS=":" + for searchdir in $searchpath; do + if test -d "$searchdir"; then + case "$searchdir" in + */lib64/ | */lib64 ) acl_libdirstem=lib64 ;; + *) searchdir=`cd "$searchdir" && pwd` + case "$searchdir" in + */lib64 ) acl_libdirstem=lib64 ;; + esac ;; + esac + fi + done + IFS="$acl_save_IFS" + fi +]) diff --git a/m4/libtool.m4 b/m4/libtool.m4 new file mode 100644 index 0000000..39ba996 --- /dev/null +++ b/m4/libtool.m4 @@ -0,0 +1,7357 @@ +# libtool.m4 - Configure libtool for the host system. -*-Autoconf-*- +# +# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, +# 2006, 2007, 2008 Free Software Foundation, Inc. +# Written 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. + +m4_define([_LT_COPYING], [dnl +# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, +# 2006, 2007, 2008 Free Software Foundation, Inc. +# Written by Gordon Matzigkeit, 1996 +# +# This file is part of GNU Libtool. +# +# GNU Libtool 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. +# +# As a special exception to the GNU General Public License, +# if you distribute this file as part of a program or library that +# is built using GNU Libtool, you may include this file under the +# same distribution terms that you use for the rest of that program. +# +# GNU Libtool 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 GNU Libtool; see the file COPYING. If not, a copy +# can be downloaded from http://www.gnu.org/licenses/gpl.html, or +# obtained by writing to the Free Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +]) + +# serial 56 LT_INIT + + +# LT_PREREQ(VERSION) +# ------------------ +# Complain and exit if this libtool version is less that VERSION. +m4_defun([LT_PREREQ], +[m4_if(m4_version_compare(m4_defn([LT_PACKAGE_VERSION]), [$1]), -1, + [m4_default([$3], + [m4_fatal([Libtool version $1 or higher is required], + 63)])], + [$2])]) + + +# _LT_CHECK_BUILDDIR +# ------------------ +# Complain if the absolute build directory name contains unusual characters +m4_defun([_LT_CHECK_BUILDDIR], +[case `pwd` in + *\ * | *\ *) + AC_MSG_WARN([Libtool does not cope well with whitespace in `pwd`]) ;; +esac +]) + + +# LT_INIT([OPTIONS]) +# ------------------ +AC_DEFUN([LT_INIT], +[AC_PREREQ([2.58])dnl We use AC_INCLUDES_DEFAULT +AC_BEFORE([$0], [LT_LANG])dnl +AC_BEFORE([$0], [LT_OUTPUT])dnl +AC_BEFORE([$0], [LTDL_INIT])dnl +m4_require([_LT_CHECK_BUILDDIR])dnl + +dnl Autoconf doesn't catch unexpanded LT_ macros by default: +m4_pattern_forbid([^_?LT_[A-Z_]+$])dnl +m4_pattern_allow([^(_LT_EOF|LT_DLGLOBAL|LT_DLLAZY_OR_NOW|LT_MULTI_MODULE)$])dnl +dnl aclocal doesn't pull ltoptions.m4, ltsugar.m4, or ltversion.m4 +dnl unless we require an AC_DEFUNed macro: +AC_REQUIRE([LTOPTIONS_VERSION])dnl +AC_REQUIRE([LTSUGAR_VERSION])dnl +AC_REQUIRE([LTVERSION_VERSION])dnl +AC_REQUIRE([LTOBSOLETE_VERSION])dnl +m4_require([_LT_PROG_LTMAIN])dnl + +dnl Parse OPTIONS +_LT_SET_OPTIONS([$0], [$1]) + +# This can be used to rebuild libtool when needed +LIBTOOL_DEPS="$ltmain" + +# Always use our own libtool. +LIBTOOL='$(SHELL) $(top_builddir)/libtool' +AC_SUBST(LIBTOOL)dnl + +_LT_SETUP + +# Only expand once: +m4_define([LT_INIT]) +])# LT_INIT + +# Old names: +AU_ALIAS([AC_PROG_LIBTOOL], [LT_INIT]) +AU_ALIAS([AM_PROG_LIBTOOL], [LT_INIT]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_PROG_LIBTOOL], []) +dnl AC_DEFUN([AM_PROG_LIBTOOL], []) + + +# _LT_CC_BASENAME(CC) +# ------------------- +# Calculate cc_basename. Skip known compiler wrappers and cross-prefix. +m4_defun([_LT_CC_BASENAME], +[for cc_temp in $1""; do + case $cc_temp in + compile | *[[\\/]]compile | ccache | *[[\\/]]ccache ) ;; + distcc | *[[\\/]]distcc | purify | *[[\\/]]purify ) ;; + \-*) ;; + *) break;; + esac +done +cc_basename=`$ECHO "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"` +]) + + +# _LT_FILEUTILS_DEFAULTS +# ---------------------- +# It is okay to use these file commands and assume they have been set +# sensibly after `m4_require([_LT_FILEUTILS_DEFAULTS])'. +m4_defun([_LT_FILEUTILS_DEFAULTS], +[: ${CP="cp -f"} +: ${MV="mv -f"} +: ${RM="rm -f"} +])# _LT_FILEUTILS_DEFAULTS + + +# _LT_SETUP +# --------- +m4_defun([_LT_SETUP], +[AC_REQUIRE([AC_CANONICAL_HOST])dnl +AC_REQUIRE([AC_CANONICAL_BUILD])dnl +_LT_DECL([], [host_alias], [0], [The host system])dnl +_LT_DECL([], [host], [0])dnl +_LT_DECL([], [host_os], [0])dnl +dnl +_LT_DECL([], [build_alias], [0], [The build system])dnl +_LT_DECL([], [build], [0])dnl +_LT_DECL([], [build_os], [0])dnl +dnl +AC_REQUIRE([AC_PROG_CC])dnl +AC_REQUIRE([LT_PATH_LD])dnl +AC_REQUIRE([LT_PATH_NM])dnl +dnl +AC_REQUIRE([AC_PROG_LN_S])dnl +test -z "$LN_S" && LN_S="ln -s" +_LT_DECL([], [LN_S], [1], [Whether we need soft or hard links])dnl +dnl +AC_REQUIRE([LT_CMD_MAX_LEN])dnl +_LT_DECL([objext], [ac_objext], [0], [Object file suffix (normally "o")])dnl +_LT_DECL([], [exeext], [0], [Executable file suffix (normally "")])dnl +dnl +m4_require([_LT_FILEUTILS_DEFAULTS])dnl +m4_require([_LT_CHECK_SHELL_FEATURES])dnl +m4_require([_LT_CMD_RELOAD])dnl +m4_require([_LT_CHECK_MAGIC_METHOD])dnl +m4_require([_LT_CMD_OLD_ARCHIVE])dnl +m4_require([_LT_CMD_GLOBAL_SYMBOLS])dnl + +_LT_CONFIG_LIBTOOL_INIT([ +# See if we are running on zsh, and set the options which allow our +# commands through without removal of \ escapes INIT. +if test -n "\${ZSH_VERSION+set}" ; then + setopt NO_GLOB_SUBST +fi +]) +if test -n "${ZSH_VERSION+set}" ; then + setopt NO_GLOB_SUBST +fi + +_LT_CHECK_OBJDIR + +m4_require([_LT_TAG_COMPILER])dnl +_LT_PROG_ECHO_BACKSLASH + +case $host_os in +aix3*) + # AIX sometimes has problems with the GCC collect2 program. For some + # reason, if we set the COLLECT_NAMES environment variable, the problems + # vanish in a puff of smoke. + if test "X${COLLECT_NAMES+set}" != Xset; then + COLLECT_NAMES= + export COLLECT_NAMES + fi + ;; +esac + +# Sed substitution that helps us do robust quoting. It backslashifies +# metacharacters that are still active within double-quoted strings. +sed_quote_subst='s/\([["`$\\]]\)/\\\1/g' + +# Same as above, but do not quote variable references. +double_quote_subst='s/\([["`\\]]\)/\\\1/g' + +# Sed substitution to delay expansion of an escaped shell variable in a +# double_quote_subst'ed string. +delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g' + +# Sed substitution to delay expansion of an escaped single quote. +delay_single_quote_subst='s/'\''/'\'\\\\\\\'\''/g' + +# Sed substitution to avoid accidental globbing in evaled expressions +no_glob_subst='s/\*/\\\*/g' + +# Global variables: +ofile=libtool +can_build_shared=yes + +# All known linkers require a `.a' archive for static linking (except MSVC, +# which needs '.lib'). +libext=a + +with_gnu_ld="$lt_cv_prog_gnu_ld" + +old_CC="$CC" +old_CFLAGS="$CFLAGS" + +# Set sane defaults for various variables +test -z "$CC" && CC=cc +test -z "$LTCC" && LTCC=$CC +test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS +test -z "$LD" && LD=ld +test -z "$ac_objext" && ac_objext=o + +_LT_CC_BASENAME([$compiler]) + +# Only perform the check for file, if the check method requires it +test -z "$MAGIC_CMD" && MAGIC_CMD=file +case $deplibs_check_method in +file_magic*) + if test "$file_magic_cmd" = '$MAGIC_CMD'; then + _LT_PATH_MAGIC + fi + ;; +esac + +# Use C for the default configuration in the libtool script +LT_SUPPORTED_TAG([CC]) +_LT_LANG_C_CONFIG +_LT_LANG_DEFAULT_CONFIG +_LT_CONFIG_COMMANDS +])# _LT_SETUP + + +# _LT_PROG_LTMAIN +# --------------- +# Note that this code is called both from `configure', and `config.status' +# now that we use AC_CONFIG_COMMANDS to generate libtool. Notably, +# `config.status' has no value for ac_aux_dir unless we are using Automake, +# so we pass a copy along to make sure it has a sensible value anyway. +m4_defun([_LT_PROG_LTMAIN], +[m4_ifdef([AC_REQUIRE_AUX_FILE], [AC_REQUIRE_AUX_FILE([ltmain.sh])])dnl +_LT_CONFIG_LIBTOOL_INIT([ac_aux_dir='$ac_aux_dir']) +ltmain="$ac_aux_dir/ltmain.sh" +])# _LT_PROG_LTMAIN + + +## ------------------------------------- ## +## Accumulate code for creating libtool. ## +## ------------------------------------- ## + +# So that we can recreate a full libtool script including additional +# tags, we accumulate the chunks of code to send to AC_CONFIG_COMMANDS +# in macros and then make a single call at the end using the `libtool' +# label. + + +# _LT_CONFIG_LIBTOOL_INIT([INIT-COMMANDS]) +# ---------------------------------------- +# Register INIT-COMMANDS to be passed to AC_CONFIG_COMMANDS later. +m4_define([_LT_CONFIG_LIBTOOL_INIT], +[m4_ifval([$1], + [m4_append([_LT_OUTPUT_LIBTOOL_INIT], + [$1 +])])]) + +# Initialize. +m4_define([_LT_OUTPUT_LIBTOOL_INIT]) + + +# _LT_CONFIG_LIBTOOL([COMMANDS]) +# ------------------------------ +# Register COMMANDS to be passed to AC_CONFIG_COMMANDS later. +m4_define([_LT_CONFIG_LIBTOOL], +[m4_ifval([$1], + [m4_append([_LT_OUTPUT_LIBTOOL_COMMANDS], + [$1 +])])]) + +# Initialize. +m4_define([_LT_OUTPUT_LIBTOOL_COMMANDS]) + + +# _LT_CONFIG_SAVE_COMMANDS([COMMANDS], [INIT_COMMANDS]) +# ----------------------------------------------------- +m4_defun([_LT_CONFIG_SAVE_COMMANDS], +[_LT_CONFIG_LIBTOOL([$1]) +_LT_CONFIG_LIBTOOL_INIT([$2]) +]) + + +# _LT_FORMAT_COMMENT([COMMENT]) +# ----------------------------- +# Add leading comment marks to the start of each line, and a trailing +# full-stop to the whole comment if one is not present already. +m4_define([_LT_FORMAT_COMMENT], +[m4_ifval([$1], [ +m4_bpatsubst([m4_bpatsubst([$1], [^ *], [# ])], + [['`$\]], [\\\&])]m4_bmatch([$1], [[!?.]$], [], [.]) +)]) + + + +## ------------------------ ## +## FIXME: Eliminate VARNAME ## +## ------------------------ ## + + +# _LT_DECL([CONFIGNAME], VARNAME, VALUE, [DESCRIPTION], [IS-TAGGED?]) +# ------------------------------------------------------------------- +# CONFIGNAME is the name given to the value in the libtool script. +# VARNAME is the (base) name used in the configure script. +# VALUE may be 0, 1 or 2 for a computed quote escaped value based on +# VARNAME. Any other value will be used directly. +m4_define([_LT_DECL], +[lt_if_append_uniq([lt_decl_varnames], [$2], [, ], + [lt_dict_add_subkey([lt_decl_dict], [$2], [libtool_name], + [m4_ifval([$1], [$1], [$2])]) + lt_dict_add_subkey([lt_decl_dict], [$2], [value], [$3]) + m4_ifval([$4], + [lt_dict_add_subkey([lt_decl_dict], [$2], [description], [$4])]) + lt_dict_add_subkey([lt_decl_dict], [$2], + [tagged?], [m4_ifval([$5], [yes], [no])])]) +]) + + +# _LT_TAGDECL([CONFIGNAME], VARNAME, VALUE, [DESCRIPTION]) +# -------------------------------------------------------- +m4_define([_LT_TAGDECL], [_LT_DECL([$1], [$2], [$3], [$4], [yes])]) + + +# lt_decl_tag_varnames([SEPARATOR], [VARNAME1...]) +# ------------------------------------------------ +m4_define([lt_decl_tag_varnames], +[_lt_decl_filter([tagged?], [yes], $@)]) + + +# _lt_decl_filter(SUBKEY, VALUE, [SEPARATOR], [VARNAME1..]) +# --------------------------------------------------------- +m4_define([_lt_decl_filter], +[m4_case([$#], + [0], [m4_fatal([$0: too few arguments: $#])], + [1], [m4_fatal([$0: too few arguments: $#: $1])], + [2], [lt_dict_filter([lt_decl_dict], [$1], [$2], [], lt_decl_varnames)], + [3], [lt_dict_filter([lt_decl_dict], [$1], [$2], [$3], lt_decl_varnames)], + [lt_dict_filter([lt_decl_dict], $@)])[]dnl +]) + + +# lt_decl_quote_varnames([SEPARATOR], [VARNAME1...]) +# -------------------------------------------------- +m4_define([lt_decl_quote_varnames], +[_lt_decl_filter([value], [1], $@)]) + + +# lt_decl_dquote_varnames([SEPARATOR], [VARNAME1...]) +# --------------------------------------------------- +m4_define([lt_decl_dquote_varnames], +[_lt_decl_filter([value], [2], $@)]) + + +# lt_decl_varnames_tagged([SEPARATOR], [VARNAME1...]) +# --------------------------------------------------- +m4_define([lt_decl_varnames_tagged], +[m4_assert([$# <= 2])dnl +_$0(m4_quote(m4_default([$1], [[, ]])), + m4_ifval([$2], [[$2]], [m4_dquote(lt_decl_tag_varnames)]), + m4_split(m4_normalize(m4_quote(_LT_TAGS)), [ ]))]) +m4_define([_lt_decl_varnames_tagged], +[m4_ifval([$3], [lt_combine([$1], [$2], [_], $3)])]) + + +# lt_decl_all_varnames([SEPARATOR], [VARNAME1...]) +# ------------------------------------------------ +m4_define([lt_decl_all_varnames], +[_$0(m4_quote(m4_default([$1], [[, ]])), + m4_if([$2], [], + m4_quote(lt_decl_varnames), + m4_quote(m4_shift($@))))[]dnl +]) +m4_define([_lt_decl_all_varnames], +[lt_join($@, lt_decl_varnames_tagged([$1], + lt_decl_tag_varnames([[, ]], m4_shift($@))))dnl +]) + + +# _LT_CONFIG_STATUS_DECLARE([VARNAME]) +# ------------------------------------ +# Quote a variable value, and forward it to `config.status' so that its +# declaration there will have the same value as in `configure'. VARNAME +# must have a single quote delimited value for this to work. +m4_define([_LT_CONFIG_STATUS_DECLARE], +[$1='`$ECHO "X$][$1" | $Xsed -e "$delay_single_quote_subst"`']) + + +# _LT_CONFIG_STATUS_DECLARATIONS +# ------------------------------ +# We delimit libtool config variables with single quotes, so when +# we write them to config.status, we have to be sure to quote all +# embedded single quotes properly. In configure, this macro expands +# each variable declared with _LT_DECL (and _LT_TAGDECL) into: +# +# ='`$ECHO "X$" | $Xsed -e "$delay_single_quote_subst"`' +m4_defun([_LT_CONFIG_STATUS_DECLARATIONS], +[m4_foreach([_lt_var], m4_quote(lt_decl_all_varnames), + [m4_n([_LT_CONFIG_STATUS_DECLARE(_lt_var)])])]) + + +# _LT_LIBTOOL_TAGS +# ---------------- +# Output comment and list of tags supported by the script +m4_defun([_LT_LIBTOOL_TAGS], +[_LT_FORMAT_COMMENT([The names of the tagged configurations supported by this script])dnl +available_tags="_LT_TAGS"dnl +]) + + +# _LT_LIBTOOL_DECLARE(VARNAME, [TAG]) +# ----------------------------------- +# Extract the dictionary values for VARNAME (optionally with TAG) and +# expand to a commented shell variable setting: +# +# # Some comment about what VAR is for. +# visible_name=$lt_internal_name +m4_define([_LT_LIBTOOL_DECLARE], +[_LT_FORMAT_COMMENT(m4_quote(lt_dict_fetch([lt_decl_dict], [$1], + [description])))[]dnl +m4_pushdef([_libtool_name], + m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [libtool_name])))[]dnl +m4_case(m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [value])), + [0], [_libtool_name=[$]$1], + [1], [_libtool_name=$lt_[]$1], + [2], [_libtool_name=$lt_[]$1], + [_libtool_name=lt_dict_fetch([lt_decl_dict], [$1], [value])])[]dnl +m4_ifval([$2], [_$2])[]m4_popdef([_libtool_name])[]dnl +]) + + +# _LT_LIBTOOL_CONFIG_VARS +# ----------------------- +# Produce commented declarations of non-tagged libtool config variables +# suitable for insertion in the LIBTOOL CONFIG section of the `libtool' +# script. Tagged libtool config variables (even for the LIBTOOL CONFIG +# section) are produced by _LT_LIBTOOL_TAG_VARS. +m4_defun([_LT_LIBTOOL_CONFIG_VARS], +[m4_foreach([_lt_var], + m4_quote(_lt_decl_filter([tagged?], [no], [], lt_decl_varnames)), + [m4_n([_LT_LIBTOOL_DECLARE(_lt_var)])])]) + + +# _LT_LIBTOOL_TAG_VARS(TAG) +# ------------------------- +m4_define([_LT_LIBTOOL_TAG_VARS], +[m4_foreach([_lt_var], m4_quote(lt_decl_tag_varnames), + [m4_n([_LT_LIBTOOL_DECLARE(_lt_var, [$1])])])]) + + +# _LT_TAGVAR(VARNAME, [TAGNAME]) +# ------------------------------ +m4_define([_LT_TAGVAR], [m4_ifval([$2], [$1_$2], [$1])]) + + +# _LT_CONFIG_COMMANDS +# ------------------- +# Send accumulated output to $CONFIG_STATUS. Thanks to the lists of +# variables for single and double quote escaping we saved from calls +# to _LT_DECL, we can put quote escaped variables declarations +# into `config.status', and then the shell code to quote escape them in +# for loops in `config.status'. Finally, any additional code accumulated +# from calls to _LT_CONFIG_LIBTOOL_INIT is expanded. +m4_defun([_LT_CONFIG_COMMANDS], +[AC_PROVIDE_IFELSE([LT_OUTPUT], + dnl If the libtool generation code has been placed in $CONFIG_LT, + dnl instead of duplicating it all over again into config.status, + dnl then we will have config.status run $CONFIG_LT later, so it + dnl needs to know what name is stored there: + [AC_CONFIG_COMMANDS([libtool], + [$SHELL $CONFIG_LT || AS_EXIT(1)], [CONFIG_LT='$CONFIG_LT'])], + dnl If the libtool generation code is destined for config.status, + dnl expand the accumulated commands and init code now: + [AC_CONFIG_COMMANDS([libtool], + [_LT_OUTPUT_LIBTOOL_COMMANDS], [_LT_OUTPUT_LIBTOOL_COMMANDS_INIT])]) +])#_LT_CONFIG_COMMANDS + + +# Initialize. +m4_define([_LT_OUTPUT_LIBTOOL_COMMANDS_INIT], +[ + +# The HP-UX ksh and POSIX shell print the target directory to stdout +# if CDPATH is set. +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH + +sed_quote_subst='$sed_quote_subst' +double_quote_subst='$double_quote_subst' +delay_variable_subst='$delay_variable_subst' +_LT_CONFIG_STATUS_DECLARATIONS +LTCC='$LTCC' +LTCFLAGS='$LTCFLAGS' +compiler='$compiler_DEFAULT' + +# Quote evaled strings. +for var in lt_decl_all_varnames([[ \ +]], lt_decl_quote_varnames); do + case \`eval \\\\\$ECHO "X\\\\\$\$var"\` in + *[[\\\\\\\`\\"\\\$]]*) + eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"X\\\$\$var\\" | \\\$Xsed -e \\"\\\$sed_quote_subst\\"\\\`\\\\\\"" + ;; + *) + eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" + ;; + esac +done + +# Double-quote double-evaled strings. +for var in lt_decl_all_varnames([[ \ +]], lt_decl_dquote_varnames); do + case \`eval \\\\\$ECHO "X\\\\\$\$var"\` in + *[[\\\\\\\`\\"\\\$]]*) + eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"X\\\$\$var\\" | \\\$Xsed -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\"" + ;; + *) + eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" + ;; + esac +done + +# Fix-up fallback echo if it was mangled by the above quoting rules. +case \$lt_ECHO in +*'\\\[$]0 --fallback-echo"')dnl " + lt_ECHO=\`\$ECHO "X\$lt_ECHO" | \$Xsed -e 's/\\\\\\\\\\\\\\\[$]0 --fallback-echo"\[$]/\[$]0 --fallback-echo"/'\` + ;; +esac + +_LT_OUTPUT_LIBTOOL_INIT +]) + + +# LT_OUTPUT +# --------- +# This macro allows early generation of the libtool script (before +# AC_OUTPUT is called), incase it is used in configure for compilation +# tests. +AC_DEFUN([LT_OUTPUT], +[: ${CONFIG_LT=./config.lt} +AC_MSG_NOTICE([creating $CONFIG_LT]) +cat >"$CONFIG_LT" <<_LTEOF +#! $SHELL +# Generated by $as_me. +# Run this file to recreate a libtool stub with the current configuration. + +lt_cl_silent=false +SHELL=\${CONFIG_SHELL-$SHELL} +_LTEOF + +cat >>"$CONFIG_LT" <<\_LTEOF +AS_SHELL_SANITIZE +_AS_PREPARE + +exec AS_MESSAGE_FD>&1 +exec AS_MESSAGE_LOG_FD>>config.log +{ + echo + AS_BOX([Running $as_me.]) +} >&AS_MESSAGE_LOG_FD + +lt_cl_help="\ +\`$as_me' creates a local libtool stub from the current configuration, +for use in further configure time tests before the real libtool is +generated. + +Usage: $[0] [[OPTIONS]] + + -h, --help print this help, then exit + -V, --version print version number, then exit + -q, --quiet do not print progress messages + -d, --debug don't remove temporary files + +Report bugs to ." + +lt_cl_version="\ +m4_ifset([AC_PACKAGE_NAME], [AC_PACKAGE_NAME ])config.lt[]dnl +m4_ifset([AC_PACKAGE_VERSION], [ AC_PACKAGE_VERSION]) +configured by $[0], generated by m4_PACKAGE_STRING. + +Copyright (C) 2008 Free Software Foundation, Inc. +This config.lt script is free software; the Free Software Foundation +gives unlimited permision to copy, distribute and modify it." + +while test $[#] != 0 +do + case $[1] in + --version | --v* | -V ) + echo "$lt_cl_version"; exit 0 ;; + --help | --h* | -h ) + echo "$lt_cl_help"; exit 0 ;; + --debug | --d* | -d ) + debug=: ;; + --quiet | --q* | --silent | --s* | -q ) + lt_cl_silent=: ;; + + -*) AC_MSG_ERROR([unrecognized option: $[1] +Try \`$[0] --help' for more information.]) ;; + + *) AC_MSG_ERROR([unrecognized argument: $[1] +Try \`$[0] --help' for more information.]) ;; + esac + shift +done + +if $lt_cl_silent; then + exec AS_MESSAGE_FD>/dev/null +fi +_LTEOF + +cat >>"$CONFIG_LT" <<_LTEOF +_LT_OUTPUT_LIBTOOL_COMMANDS_INIT +_LTEOF + +cat >>"$CONFIG_LT" <<\_LTEOF +AC_MSG_NOTICE([creating $ofile]) +_LT_OUTPUT_LIBTOOL_COMMANDS +AS_EXIT(0) +_LTEOF +chmod +x "$CONFIG_LT" + +# configure is writing to config.log, but config.lt does its own redirection, +# appending to config.log, which fails on DOS, as config.log is still kept +# open by configure. Here we exec the FD to /dev/null, effectively closing +# config.log, so it can be properly (re)opened and appended to by config.lt. +if test "$no_create" != yes; then + lt_cl_success=: + test "$silent" = yes && + lt_config_lt_args="$lt_config_lt_args --quiet" + exec AS_MESSAGE_LOG_FD>/dev/null + $SHELL "$CONFIG_LT" $lt_config_lt_args || lt_cl_success=false + exec AS_MESSAGE_LOG_FD>>config.log + $lt_cl_success || AS_EXIT(1) +fi +])# LT_OUTPUT + + +# _LT_CONFIG(TAG) +# --------------- +# If TAG is the built-in tag, create an initial libtool script with a +# default configuration from the untagged config vars. Otherwise add code +# to config.status for appending the configuration named by TAG from the +# matching tagged config vars. +m4_defun([_LT_CONFIG], +[m4_require([_LT_FILEUTILS_DEFAULTS])dnl +_LT_CONFIG_SAVE_COMMANDS([ + m4_define([_LT_TAG], m4_if([$1], [], [C], [$1]))dnl + m4_if(_LT_TAG, [C], [ + # See if we are running on zsh, and set the options which allow our + # commands through without removal of \ escapes. + if test -n "${ZSH_VERSION+set}" ; then + setopt NO_GLOB_SUBST + fi + + cfgfile="${ofile}T" + trap "$RM \"$cfgfile\"; exit 1" 1 2 15 + $RM "$cfgfile" + + cat <<_LT_EOF >> "$cfgfile" +#! $SHELL + +# `$ECHO "$ofile" | sed 's%^.*/%%'` - Provide generalized library-building support services. +# Generated automatically by $as_me ($PACKAGE$TIMESTAMP) $VERSION +# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: +# NOTE: Changes made to this file will be lost: look at ltmain.sh. +# +_LT_COPYING +_LT_LIBTOOL_TAGS + +# ### BEGIN LIBTOOL CONFIG +_LT_LIBTOOL_CONFIG_VARS +_LT_LIBTOOL_TAG_VARS +# ### END LIBTOOL CONFIG + +_LT_EOF + + case $host_os in + aix3*) + cat <<\_LT_EOF >> "$cfgfile" +# AIX sometimes has problems with the GCC collect2 program. For some +# reason, if we set the COLLECT_NAMES environment variable, the problems +# vanish in a puff of smoke. +if test "X${COLLECT_NAMES+set}" != Xset; then + COLLECT_NAMES= + export COLLECT_NAMES +fi +_LT_EOF + ;; + esac + + _LT_PROG_LTMAIN + + # We use sed instead of cat because bash on DJGPP gets confused if + # if finds mixed CR/LF and LF-only lines. Since sed operates in + # text mode, it properly converts lines to CR/LF. This bash problem + # is reportedly fixed, but why not run on old versions too? + sed '/^# Generated shell functions inserted here/q' "$ltmain" >> "$cfgfile" \ + || (rm -f "$cfgfile"; exit 1) + + _LT_PROG_XSI_SHELLFNS + + sed -n '/^# Generated shell functions inserted here/,$p' "$ltmain" >> "$cfgfile" \ + || (rm -f "$cfgfile"; exit 1) + + mv -f "$cfgfile" "$ofile" || + (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile") + chmod +x "$ofile" +], +[cat <<_LT_EOF >> "$ofile" + +dnl Unfortunately we have to use $1 here, since _LT_TAG is not expanded +dnl in a comment (ie after a #). +# ### BEGIN LIBTOOL TAG CONFIG: $1 +_LT_LIBTOOL_TAG_VARS(_LT_TAG) +# ### END LIBTOOL TAG CONFIG: $1 +_LT_EOF +])dnl /m4_if +], +[m4_if([$1], [], [ + PACKAGE='$PACKAGE' + VERSION='$VERSION' + TIMESTAMP='$TIMESTAMP' + RM='$RM' + ofile='$ofile'], []) +])dnl /_LT_CONFIG_SAVE_COMMANDS +])# _LT_CONFIG + + +# LT_SUPPORTED_TAG(TAG) +# --------------------- +# Trace this macro to discover what tags are supported by the libtool +# --tag option, using: +# autoconf --trace 'LT_SUPPORTED_TAG:$1' +AC_DEFUN([LT_SUPPORTED_TAG], []) + + +# C support is built-in for now +m4_define([_LT_LANG_C_enabled], []) +m4_define([_LT_TAGS], []) + + +# LT_LANG(LANG) +# ------------- +# Enable libtool support for the given language if not already enabled. +AC_DEFUN([LT_LANG], +[AC_BEFORE([$0], [LT_OUTPUT])dnl +m4_case([$1], + [C], [_LT_LANG(C)], + [C++], [_LT_LANG(CXX)], + [Java], [_LT_LANG(GCJ)], + [Fortran 77], [_LT_LANG(F77)], + [Fortran], [_LT_LANG(FC)], + [Windows Resource], [_LT_LANG(RC)], + [m4_ifdef([_LT_LANG_]$1[_CONFIG], + [_LT_LANG($1)], + [m4_fatal([$0: unsupported language: "$1"])])])dnl +])# LT_LANG + + +# _LT_LANG(LANGNAME) +# ------------------ +m4_defun([_LT_LANG], +[m4_ifdef([_LT_LANG_]$1[_enabled], [], + [LT_SUPPORTED_TAG([$1])dnl + m4_append([_LT_TAGS], [$1 ])dnl + m4_define([_LT_LANG_]$1[_enabled], [])dnl + _LT_LANG_$1_CONFIG($1)])dnl +])# _LT_LANG + + +# _LT_LANG_DEFAULT_CONFIG +# ----------------------- +m4_defun([_LT_LANG_DEFAULT_CONFIG], +[AC_PROVIDE_IFELSE([AC_PROG_CXX], + [LT_LANG(CXX)], + [m4_define([AC_PROG_CXX], defn([AC_PROG_CXX])[LT_LANG(CXX)])]) + +AC_PROVIDE_IFELSE([AC_PROG_F77], + [LT_LANG(F77)], + [m4_define([AC_PROG_F77], defn([AC_PROG_F77])[LT_LANG(F77)])]) + +AC_PROVIDE_IFELSE([AC_PROG_FC], + [LT_LANG(FC)], + [m4_define([AC_PROG_FC], defn([AC_PROG_FC])[LT_LANG(FC)])]) + +dnl The call to [A][M_PROG_GCJ] is quoted like that to stop aclocal +dnl pulling things in needlessly. +AC_PROVIDE_IFELSE([AC_PROG_GCJ], + [LT_LANG(GCJ)], + [AC_PROVIDE_IFELSE([A][M_PROG_GCJ], + [LT_LANG(GCJ)], + [AC_PROVIDE_IFELSE([LT_PROG_GCJ], + [LT_LANG(GCJ)], + [m4_ifdef([AC_PROG_GCJ], + [m4_define([AC_PROG_GCJ], defn([AC_PROG_GCJ])[LT_LANG(GCJ)])]) + m4_ifdef([A][M_PROG_GCJ], + [m4_define([A][M_PROG_GCJ], defn([A][M_PROG_GCJ])[LT_LANG(GCJ)])]) + m4_ifdef([LT_PROG_GCJ], + [m4_define([LT_PROG_GCJ], defn([LT_PROG_GCJ])[LT_LANG(GCJ)])])])])]) + +AC_PROVIDE_IFELSE([LT_PROG_RC], + [LT_LANG(RC)], + [m4_define([LT_PROG_RC], defn([LT_PROG_RC])[LT_LANG(RC)])]) +])# _LT_LANG_DEFAULT_CONFIG + +# Obsolete macros: +AU_DEFUN([AC_LIBTOOL_CXX], [LT_LANG(C++)]) +AU_DEFUN([AC_LIBTOOL_F77], [LT_LANG(Fortran 77)]) +AU_DEFUN([AC_LIBTOOL_FC], [LT_LANG(Fortran)]) +AU_DEFUN([AC_LIBTOOL_GCJ], [LT_LANG(Java)]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_LIBTOOL_CXX], []) +dnl AC_DEFUN([AC_LIBTOOL_F77], []) +dnl AC_DEFUN([AC_LIBTOOL_FC], []) +dnl AC_DEFUN([AC_LIBTOOL_GCJ], []) + + +# _LT_TAG_COMPILER +# ---------------- +m4_defun([_LT_TAG_COMPILER], +[AC_REQUIRE([AC_PROG_CC])dnl + +_LT_DECL([LTCC], [CC], [1], [A C compiler])dnl +_LT_DECL([LTCFLAGS], [CFLAGS], [1], [LTCC compiler flags])dnl +_LT_TAGDECL([CC], [compiler], [1], [A language specific compiler])dnl +_LT_TAGDECL([with_gcc], [GCC], [0], [Is the compiler the GNU compiler?])dnl + +# If no C compiler was specified, use CC. +LTCC=${LTCC-"$CC"} + +# If no C compiler flags were specified, use CFLAGS. +LTCFLAGS=${LTCFLAGS-"$CFLAGS"} + +# Allow CC to be a program name with arguments. +compiler=$CC +])# _LT_TAG_COMPILER + + +# _LT_COMPILER_BOILERPLATE +# ------------------------ +# Check for compiler boilerplate output or warnings with +# the simple compiler test code. +m4_defun([_LT_COMPILER_BOILERPLATE], +[m4_require([_LT_DECL_SED])dnl +ac_outfile=conftest.$ac_objext +echo "$lt_simple_compile_test_code" >conftest.$ac_ext +eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err +_lt_compiler_boilerplate=`cat conftest.err` +$RM conftest* +])# _LT_COMPILER_BOILERPLATE + + +# _LT_LINKER_BOILERPLATE +# ---------------------- +# Check for linker boilerplate output or warnings with +# the simple link test code. +m4_defun([_LT_LINKER_BOILERPLATE], +[m4_require([_LT_DECL_SED])dnl +ac_outfile=conftest.$ac_objext +echo "$lt_simple_link_test_code" >conftest.$ac_ext +eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err +_lt_linker_boilerplate=`cat conftest.err` +$RM -r conftest* +])# _LT_LINKER_BOILERPLATE + +# _LT_REQUIRED_DARWIN_CHECKS +# ------------------------- +m4_defun_once([_LT_REQUIRED_DARWIN_CHECKS],[ + case $host_os in + rhapsody* | darwin*) + AC_CHECK_TOOL([DSYMUTIL], [dsymutil], [:]) + AC_CHECK_TOOL([NMEDIT], [nmedit], [:]) + AC_CHECK_TOOL([LIPO], [lipo], [:]) + AC_CHECK_TOOL([OTOOL], [otool], [:]) + AC_CHECK_TOOL([OTOOL64], [otool64], [:]) + _LT_DECL([], [DSYMUTIL], [1], + [Tool to manipulate archived DWARF debug symbol files on Mac OS X]) + _LT_DECL([], [NMEDIT], [1], + [Tool to change global to local symbols on Mac OS X]) + _LT_DECL([], [LIPO], [1], + [Tool to manipulate fat objects and archives on Mac OS X]) + _LT_DECL([], [OTOOL], [1], + [ldd/readelf like tool for Mach-O binaries on Mac OS X]) + _LT_DECL([], [OTOOL64], [1], + [ldd/readelf like tool for 64 bit Mach-O binaries on Mac OS X 10.4]) + + AC_CACHE_CHECK([for -single_module linker flag],[lt_cv_apple_cc_single_mod], + [lt_cv_apple_cc_single_mod=no + if test -z "${LT_MULTI_MODULE}"; then + # By default we will add the -single_module flag. You can override + # by either setting the environment variable LT_MULTI_MODULE + # non-empty at configure time, or by adding -multi_module to the + # link flags. + rm -rf libconftest.dylib* + echo "int foo(void){return 1;}" > conftest.c + echo "$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ +-dynamiclib -Wl,-single_module conftest.c" >&AS_MESSAGE_LOG_FD + $LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ + -dynamiclib -Wl,-single_module conftest.c 2>conftest.err + _lt_result=$? + if test -f libconftest.dylib && test ! -s conftest.err && test $_lt_result = 0; then + lt_cv_apple_cc_single_mod=yes + else + cat conftest.err >&AS_MESSAGE_LOG_FD + fi + rm -rf libconftest.dylib* + rm -f conftest.* + fi]) + AC_CACHE_CHECK([for -exported_symbols_list linker flag], + [lt_cv_ld_exported_symbols_list], + [lt_cv_ld_exported_symbols_list=no + save_LDFLAGS=$LDFLAGS + echo "_main" > conftest.sym + LDFLAGS="$LDFLAGS -Wl,-exported_symbols_list,conftest.sym" + AC_LINK_IFELSE([AC_LANG_PROGRAM([],[])], + [lt_cv_ld_exported_symbols_list=yes], + [lt_cv_ld_exported_symbols_list=no]) + LDFLAGS="$save_LDFLAGS" + ]) + case $host_os in + rhapsody* | darwin1.[[012]]) + _lt_dar_allow_undefined='${wl}-undefined ${wl}suppress' ;; + darwin1.*) + _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; + darwin*) # darwin 5.x on + # if running on 10.5 or later, the deployment target defaults + # to the OS version, if on x86, and 10.4, the deployment + # target defaults to 10.4. Don't you love it? + case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in + 10.0,*86*-darwin8*|10.0,*-darwin[[91]]*) + _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;; + 10.[[012]]*) + _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; + 10.*) + _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;; + esac + ;; + esac + if test "$lt_cv_apple_cc_single_mod" = "yes"; then + _lt_dar_single_mod='$single_module' + fi + if test "$lt_cv_ld_exported_symbols_list" = "yes"; then + _lt_dar_export_syms=' ${wl}-exported_symbols_list,$output_objdir/${libname}-symbols.expsym' + else + _lt_dar_export_syms='~$NMEDIT -s $output_objdir/${libname}-symbols.expsym ${lib}' + fi + if test "$DSYMUTIL" != ":"; then + _lt_dsymutil='~$DSYMUTIL $lib || :' + else + _lt_dsymutil= + fi + ;; + esac +]) + + +# _LT_DARWIN_LINKER_FEATURES +# -------------------------- +# Checks for linker and compiler features on darwin +m4_defun([_LT_DARWIN_LINKER_FEATURES], +[ + m4_require([_LT_REQUIRED_DARWIN_CHECKS]) + _LT_TAGVAR(archive_cmds_need_lc, $1)=no + _LT_TAGVAR(hardcode_direct, $1)=no + _LT_TAGVAR(hardcode_automatic, $1)=yes + _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported + _LT_TAGVAR(whole_archive_flag_spec, $1)='' + _LT_TAGVAR(link_all_deplibs, $1)=yes + _LT_TAGVAR(allow_undefined_flag, $1)="$_lt_dar_allow_undefined" + case $cc_basename in + ifort*) _lt_dar_can_shared=yes ;; + *) _lt_dar_can_shared=$GCC ;; + esac + if test "$_lt_dar_can_shared" = "yes"; then + output_verbose_link_cmd=echo + _LT_TAGVAR(archive_cmds, $1)="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}" + _LT_TAGVAR(module_cmds, $1)="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}" + _LT_TAGVAR(archive_expsym_cmds, $1)="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}" + _LT_TAGVAR(module_expsym_cmds, $1)="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}" + m4_if([$1], [CXX], +[ if test "$lt_cv_apple_cc_single_mod" != "yes"; then + _LT_TAGVAR(archive_cmds, $1)="\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dsymutil}" + _LT_TAGVAR(archive_expsym_cmds, $1)="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dar_export_syms}${_lt_dsymutil}" + fi +],[]) + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi +]) + +# _LT_SYS_MODULE_PATH_AIX +# ----------------------- +# Links a minimal program and checks the executable +# for the system default hardcoded library path. In most cases, +# this is /usr/lib:/lib, but when the MPI compilers are used +# the location of the communication and MPI libs are included too. +# If we don't find anything, use the default library path according +# to the aix ld manual. +m4_defun([_LT_SYS_MODULE_PATH_AIX], +[m4_require([_LT_DECL_SED])dnl +AC_LINK_IFELSE(AC_LANG_PROGRAM,[ +lt_aix_libpath_sed=' + /Import File Strings/,/^$/ { + /^0/ { + s/^0 *\(.*\)$/\1/ + p + } + }' +aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` +# Check for a 64-bit object if we didn't find anything. +if test -z "$aix_libpath"; then + aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` +fi],[]) +if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi +])# _LT_SYS_MODULE_PATH_AIX + + +# _LT_SHELL_INIT(ARG) +# ------------------- +m4_define([_LT_SHELL_INIT], +[ifdef([AC_DIVERSION_NOTICE], + [AC_DIVERT_PUSH(AC_DIVERSION_NOTICE)], + [AC_DIVERT_PUSH(NOTICE)]) +$1 +AC_DIVERT_POP +])# _LT_SHELL_INIT + + +# _LT_PROG_ECHO_BACKSLASH +# ----------------------- +# Add some code to the start of the generated configure script which +# will find an echo command which doesn't interpret backslashes. +m4_defun([_LT_PROG_ECHO_BACKSLASH], +[_LT_SHELL_INIT([ +# Check that we are running under the correct shell. +SHELL=${CONFIG_SHELL-/bin/sh} + +case X$lt_ECHO in +X*--fallback-echo) + # Remove one level of quotation (which was required for Make). + ECHO=`echo "$lt_ECHO" | sed 's,\\\\\[$]\\[$]0,'[$]0','` + ;; +esac + +ECHO=${lt_ECHO-echo} +if test "X[$]1" = X--no-reexec; then + # Discard the --no-reexec flag, and continue. + shift +elif test "X[$]1" = X--fallback-echo; then + # Avoid inline document here, it may be left over + : +elif test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t' ; then + # Yippee, $ECHO works! + : +else + # Restart under the correct shell. + exec $SHELL "[$]0" --no-reexec ${1+"[$]@"} +fi + +if test "X[$]1" = X--fallback-echo; then + # used as fallback echo + shift + cat <<_LT_EOF +[$]* +_LT_EOF + exit 0 +fi + +# The HP-UX ksh and POSIX shell print the target directory to stdout +# if CDPATH is set. +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH + +if test -z "$lt_ECHO"; then + if test "X${echo_test_string+set}" != Xset; then + # find a string as large as possible, as long as the shell can cope with it + for cmd in 'sed 50q "[$]0"' 'sed 20q "[$]0"' 'sed 10q "[$]0"' 'sed 2q "[$]0"' 'echo test'; do + # expected sizes: less than 2Kb, 1Kb, 512 bytes, 16 bytes, ... + if { echo_test_string=`eval $cmd`; } 2>/dev/null && + { test "X$echo_test_string" = "X$echo_test_string"; } 2>/dev/null + then + break + fi + done + fi + + if test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t' && + echo_testing_string=`{ $ECHO "$echo_test_string"; } 2>/dev/null` && + test "X$echo_testing_string" = "X$echo_test_string"; then + : + else + # The Solaris, AIX, and Digital Unix default echo programs unquote + # backslashes. This makes it impossible to quote backslashes using + # echo "$something" | sed 's/\\/\\\\/g' + # + # So, first we look for a working echo in the user's PATH. + + lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR + for dir in $PATH /usr/ucb; do + IFS="$lt_save_ifs" + if (test -f $dir/echo || test -f $dir/echo$ac_exeext) && + test "X`($dir/echo '\t') 2>/dev/null`" = 'X\t' && + echo_testing_string=`($dir/echo "$echo_test_string") 2>/dev/null` && + test "X$echo_testing_string" = "X$echo_test_string"; then + ECHO="$dir/echo" + break + fi + done + IFS="$lt_save_ifs" + + if test "X$ECHO" = Xecho; then + # We didn't find a better echo, so look for alternatives. + if test "X`{ print -r '\t'; } 2>/dev/null`" = 'X\t' && + echo_testing_string=`{ print -r "$echo_test_string"; } 2>/dev/null` && + test "X$echo_testing_string" = "X$echo_test_string"; then + # This shell has a builtin print -r that does the trick. + ECHO='print -r' + elif { test -f /bin/ksh || test -f /bin/ksh$ac_exeext; } && + test "X$CONFIG_SHELL" != X/bin/ksh; then + # If we have ksh, try running configure again with it. + ORIGINAL_CONFIG_SHELL=${CONFIG_SHELL-/bin/sh} + export ORIGINAL_CONFIG_SHELL + CONFIG_SHELL=/bin/ksh + export CONFIG_SHELL + exec $CONFIG_SHELL "[$]0" --no-reexec ${1+"[$]@"} + else + # Try using printf. + ECHO='printf %s\n' + if test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t' && + echo_testing_string=`{ $ECHO "$echo_test_string"; } 2>/dev/null` && + test "X$echo_testing_string" = "X$echo_test_string"; then + # Cool, printf works + : + elif echo_testing_string=`($ORIGINAL_CONFIG_SHELL "[$]0" --fallback-echo '\t') 2>/dev/null` && + test "X$echo_testing_string" = 'X\t' && + echo_testing_string=`($ORIGINAL_CONFIG_SHELL "[$]0" --fallback-echo "$echo_test_string") 2>/dev/null` && + test "X$echo_testing_string" = "X$echo_test_string"; then + CONFIG_SHELL=$ORIGINAL_CONFIG_SHELL + export CONFIG_SHELL + SHELL="$CONFIG_SHELL" + export SHELL + ECHO="$CONFIG_SHELL [$]0 --fallback-echo" + elif echo_testing_string=`($CONFIG_SHELL "[$]0" --fallback-echo '\t') 2>/dev/null` && + test "X$echo_testing_string" = 'X\t' && + echo_testing_string=`($CONFIG_SHELL "[$]0" --fallback-echo "$echo_test_string") 2>/dev/null` && + test "X$echo_testing_string" = "X$echo_test_string"; then + ECHO="$CONFIG_SHELL [$]0 --fallback-echo" + else + # maybe with a smaller string... + prev=: + + for cmd in 'echo test' 'sed 2q "[$]0"' 'sed 10q "[$]0"' 'sed 20q "[$]0"' 'sed 50q "[$]0"'; do + if { test "X$echo_test_string" = "X`eval $cmd`"; } 2>/dev/null + then + break + fi + prev="$cmd" + done + + if test "$prev" != 'sed 50q "[$]0"'; then + echo_test_string=`eval $prev` + export echo_test_string + exec ${ORIGINAL_CONFIG_SHELL-${CONFIG_SHELL-/bin/sh}} "[$]0" ${1+"[$]@"} + else + # Oops. We lost completely, so just stick with echo. + ECHO=echo + fi + fi + fi + fi + fi +fi + +# Copy echo and quote the copy suitably for passing to libtool from +# the Makefile, instead of quoting the original, which is used later. +lt_ECHO=$ECHO +if test "X$lt_ECHO" = "X$CONFIG_SHELL [$]0 --fallback-echo"; then + lt_ECHO="$CONFIG_SHELL \\\$\[$]0 --fallback-echo" +fi + +AC_SUBST(lt_ECHO) +]) +_LT_DECL([], [SHELL], [1], [Shell to use when invoking shell scripts]) +_LT_DECL([], [ECHO], [1], + [An echo program that does not interpret backslashes]) +])# _LT_PROG_ECHO_BACKSLASH + + +# _LT_ENABLE_LOCK +# --------------- +m4_defun([_LT_ENABLE_LOCK], +[AC_ARG_ENABLE([libtool-lock], + [AS_HELP_STRING([--disable-libtool-lock], + [avoid locking (might break parallel builds)])]) +test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes + +# Some flags need to be propagated to the compiler or linker for good +# libtool support. +case $host in +ia64-*-hpux*) + # Find out which ABI we are using. + echo 'int i;' > conftest.$ac_ext + if AC_TRY_EVAL(ac_compile); then + case `/usr/bin/file conftest.$ac_objext` in + *ELF-32*) + HPUX_IA64_MODE="32" + ;; + *ELF-64*) + HPUX_IA64_MODE="64" + ;; + esac + fi + rm -rf conftest* + ;; +*-*-irix6*) + # Find out which ABI we are using. + echo '[#]line __oline__ "configure"' > conftest.$ac_ext + if AC_TRY_EVAL(ac_compile); then + if test "$lt_cv_prog_gnu_ld" = yes; then + case `/usr/bin/file conftest.$ac_objext` in + *32-bit*) + LD="${LD-ld} -melf32bsmip" + ;; + *N32*) + LD="${LD-ld} -melf32bmipn32" + ;; + *64-bit*) + LD="${LD-ld} -melf64bmip" + ;; + esac + else + case `/usr/bin/file conftest.$ac_objext` in + *32-bit*) + LD="${LD-ld} -32" + ;; + *N32*) + LD="${LD-ld} -n32" + ;; + *64-bit*) + LD="${LD-ld} -64" + ;; + esac + fi + fi + rm -rf conftest* + ;; + +x86_64-*kfreebsd*-gnu|x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*| \ +s390*-*linux*|s390*-*tpf*|sparc*-*linux*) + # Find out which ABI we are using. + echo 'int i;' > conftest.$ac_ext + if AC_TRY_EVAL(ac_compile); then + case `/usr/bin/file conftest.o` in + *32-bit*) + case $host in + x86_64-*kfreebsd*-gnu) + LD="${LD-ld} -m elf_i386_fbsd" + ;; + x86_64-*linux*) + LD="${LD-ld} -m elf_i386" + ;; + ppc64-*linux*|powerpc64-*linux*) + LD="${LD-ld} -m elf32ppclinux" + ;; + s390x-*linux*) + LD="${LD-ld} -m elf_s390" + ;; + sparc64-*linux*) + LD="${LD-ld} -m elf32_sparc" + ;; + esac + ;; + *64-bit*) + case $host in + x86_64-*kfreebsd*-gnu) + LD="${LD-ld} -m elf_x86_64_fbsd" + ;; + x86_64-*linux*) + LD="${LD-ld} -m elf_x86_64" + ;; + ppc*-*linux*|powerpc*-*linux*) + LD="${LD-ld} -m elf64ppc" + ;; + s390*-*linux*|s390*-*tpf*) + LD="${LD-ld} -m elf64_s390" + ;; + sparc*-*linux*) + LD="${LD-ld} -m elf64_sparc" + ;; + esac + ;; + esac + fi + rm -rf conftest* + ;; + +*-*-sco3.2v5*) + # On SCO OpenServer 5, we need -belf to get full-featured binaries. + SAVE_CFLAGS="$CFLAGS" + CFLAGS="$CFLAGS -belf" + AC_CACHE_CHECK([whether the C compiler needs -belf], lt_cv_cc_needs_belf, + [AC_LANG_PUSH(C) + AC_LINK_IFELSE([AC_LANG_PROGRAM([[]],[[]])],[lt_cv_cc_needs_belf=yes],[lt_cv_cc_needs_belf=no]) + AC_LANG_POP]) + if test x"$lt_cv_cc_needs_belf" != x"yes"; then + # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf + CFLAGS="$SAVE_CFLAGS" + fi + ;; +sparc*-*solaris*) + # Find out which ABI we are using. + echo 'int i;' > conftest.$ac_ext + if AC_TRY_EVAL(ac_compile); then + case `/usr/bin/file conftest.o` in + *64-bit*) + case $lt_cv_prog_gnu_ld in + yes*) LD="${LD-ld} -m elf64_sparc" ;; + *) + if ${LD-ld} -64 -r -o conftest2.o conftest.o >/dev/null 2>&1; then + LD="${LD-ld} -64" + fi + ;; + esac + ;; + esac + fi + rm -rf conftest* + ;; +esac + +need_locks="$enable_libtool_lock" +])# _LT_ENABLE_LOCK + + +# _LT_CMD_OLD_ARCHIVE +# ------------------- +m4_defun([_LT_CMD_OLD_ARCHIVE], +[AC_CHECK_TOOL(AR, ar, false) +test -z "$AR" && AR=ar +test -z "$AR_FLAGS" && AR_FLAGS=cru +_LT_DECL([], [AR], [1], [The archiver]) +_LT_DECL([], [AR_FLAGS], [1]) + +AC_CHECK_TOOL(STRIP, strip, :) +test -z "$STRIP" && STRIP=: +_LT_DECL([], [STRIP], [1], [A symbol stripping program]) + +AC_CHECK_TOOL(RANLIB, ranlib, :) +test -z "$RANLIB" && RANLIB=: +_LT_DECL([], [RANLIB], [1], + [Commands used to install an old-style archive]) + +# Determine commands to create old-style static archives. +old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs' +old_postinstall_cmds='chmod 644 $oldlib' +old_postuninstall_cmds= + +if test -n "$RANLIB"; then + case $host_os in + openbsd*) + old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$oldlib" + ;; + *) + old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$oldlib" + ;; + esac + old_archive_cmds="$old_archive_cmds~\$RANLIB \$oldlib" +fi +_LT_DECL([], [old_postinstall_cmds], [2]) +_LT_DECL([], [old_postuninstall_cmds], [2]) +_LT_TAGDECL([], [old_archive_cmds], [2], + [Commands used to build an old-style archive]) +])# _LT_CMD_OLD_ARCHIVE + + +# _LT_COMPILER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS, +# [OUTPUT-FILE], [ACTION-SUCCESS], [ACTION-FAILURE]) +# ---------------------------------------------------------------- +# Check whether the given compiler option works +AC_DEFUN([_LT_COMPILER_OPTION], +[m4_require([_LT_FILEUTILS_DEFAULTS])dnl +m4_require([_LT_DECL_SED])dnl +AC_CACHE_CHECK([$1], [$2], + [$2=no + m4_if([$4], , [ac_outfile=conftest.$ac_objext], [ac_outfile=$4]) + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + lt_compiler_flag="$3" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + # The option is referenced via a variable to avoid confusing sed. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:__oline__: $lt_compile\"" >&AS_MESSAGE_LOG_FD) + (eval "$lt_compile" 2>conftest.err) + ac_status=$? + cat conftest.err >&AS_MESSAGE_LOG_FD + echo "$as_me:__oline__: \$? = $ac_status" >&AS_MESSAGE_LOG_FD + if (exit $ac_status) && test -s "$ac_outfile"; then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings other than the usual output. + $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp + $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 + if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then + $2=yes + fi + fi + $RM conftest* +]) + +if test x"[$]$2" = xyes; then + m4_if([$5], , :, [$5]) +else + m4_if([$6], , :, [$6]) +fi +])# _LT_COMPILER_OPTION + +# Old name: +AU_ALIAS([AC_LIBTOOL_COMPILER_OPTION], [_LT_COMPILER_OPTION]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_LIBTOOL_COMPILER_OPTION], []) + + +# _LT_LINKER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS, +# [ACTION-SUCCESS], [ACTION-FAILURE]) +# ---------------------------------------------------- +# Check whether the given linker option works +AC_DEFUN([_LT_LINKER_OPTION], +[m4_require([_LT_FILEUTILS_DEFAULTS])dnl +m4_require([_LT_DECL_SED])dnl +AC_CACHE_CHECK([$1], [$2], + [$2=no + save_LDFLAGS="$LDFLAGS" + LDFLAGS="$LDFLAGS $3" + echo "$lt_simple_link_test_code" > conftest.$ac_ext + if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then + # The linker can only warn and ignore the option if not recognized + # So say no if there are warnings + if test -s conftest.err; then + # Append any errors to the config.log. + cat conftest.err 1>&AS_MESSAGE_LOG_FD + $ECHO "X$_lt_linker_boilerplate" | $Xsed -e '/^$/d' > conftest.exp + $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 + if diff conftest.exp conftest.er2 >/dev/null; then + $2=yes + fi + else + $2=yes + fi + fi + $RM -r conftest* + LDFLAGS="$save_LDFLAGS" +]) + +if test x"[$]$2" = xyes; then + m4_if([$4], , :, [$4]) +else + m4_if([$5], , :, [$5]) +fi +])# _LT_LINKER_OPTION + +# Old name: +AU_ALIAS([AC_LIBTOOL_LINKER_OPTION], [_LT_LINKER_OPTION]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_LIBTOOL_LINKER_OPTION], []) + + +# LT_CMD_MAX_LEN +#--------------- +AC_DEFUN([LT_CMD_MAX_LEN], +[AC_REQUIRE([AC_CANONICAL_HOST])dnl +# find the maximum length of command line arguments +AC_MSG_CHECKING([the maximum length of command line arguments]) +AC_CACHE_VAL([lt_cv_sys_max_cmd_len], [dnl + i=0 + teststring="ABCD" + + case $build_os in + msdosdjgpp*) + # On DJGPP, this test can blow up pretty badly due to problems in libc + # (any single argument exceeding 2000 bytes causes a buffer overrun + # during glob expansion). Even if it were fixed, the result of this + # check would be larger than it should be. + lt_cv_sys_max_cmd_len=12288; # 12K is about right + ;; + + gnu*) + # Under GNU Hurd, this test is not required because there is + # no limit to the length of command line arguments. + # Libtool will interpret -1 as no limit whatsoever + lt_cv_sys_max_cmd_len=-1; + ;; + + cygwin* | mingw* | cegcc*) + # On Win9x/ME, this test blows up -- it succeeds, but takes + # about 5 minutes as the teststring grows exponentially. + # Worse, since 9x/ME are not pre-emptively multitasking, + # you end up with a "frozen" computer, even though with patience + # the test eventually succeeds (with a max line length of 256k). + # Instead, let's just punt: use the minimum linelength reported by + # all of the supported platforms: 8192 (on NT/2K/XP). + lt_cv_sys_max_cmd_len=8192; + ;; + + amigaos*) + # On AmigaOS with pdksh, this test takes hours, literally. + # So we just punt and use a minimum line length of 8192. + lt_cv_sys_max_cmd_len=8192; + ;; + + netbsd* | freebsd* | openbsd* | darwin* | dragonfly*) + # This has been around since 386BSD, at least. Likely further. + if test -x /sbin/sysctl; then + lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax` + elif test -x /usr/sbin/sysctl; then + lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax` + else + lt_cv_sys_max_cmd_len=65536 # usable default for all BSDs + fi + # And add a safety zone + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` + ;; + + interix*) + # We know the value 262144 and hardcode it with a safety zone (like BSD) + lt_cv_sys_max_cmd_len=196608 + ;; + + osf*) + # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure + # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not + # nice to cause kernel panics so lets avoid the loop below. + # First set a reasonable default. + lt_cv_sys_max_cmd_len=16384 + # + if test -x /sbin/sysconfig; then + case `/sbin/sysconfig -q proc exec_disable_arg_limit` in + *1*) lt_cv_sys_max_cmd_len=-1 ;; + esac + fi + ;; + sco3.2v5*) + lt_cv_sys_max_cmd_len=102400 + ;; + sysv5* | sco5v6* | sysv4.2uw2*) + kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null` + if test -n "$kargmax"; then + lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[[ ]]//'` + else + lt_cv_sys_max_cmd_len=32768 + fi + ;; + *) + lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null` + if test -n "$lt_cv_sys_max_cmd_len"; then + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` + else + # Make teststring a little bigger before we do anything with it. + # a 1K string should be a reasonable start. + for i in 1 2 3 4 5 6 7 8 ; do + teststring=$teststring$teststring + done + SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}} + # If test is not a shell built-in, we'll probably end up computing a + # maximum length that is only half of the actual maximum length, but + # we can't tell. + while { test "X"`$SHELL [$]0 --fallback-echo "X$teststring$teststring" 2>/dev/null` \ + = "XX$teststring$teststring"; } >/dev/null 2>&1 && + test $i != 17 # 1/2 MB should be enough + do + i=`expr $i + 1` + teststring=$teststring$teststring + done + # Only check the string length outside the loop. + lt_cv_sys_max_cmd_len=`expr "X$teststring" : ".*" 2>&1` + teststring= + # Add a significant safety factor because C++ compilers can tack on + # massive amounts of additional arguments before passing them to the + # linker. It appears as though 1/2 is a usable value. + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2` + fi + ;; + esac +]) +if test -n $lt_cv_sys_max_cmd_len ; then + AC_MSG_RESULT($lt_cv_sys_max_cmd_len) +else + AC_MSG_RESULT(none) +fi +max_cmd_len=$lt_cv_sys_max_cmd_len +_LT_DECL([], [max_cmd_len], [0], + [What is the maximum length of a command?]) +])# LT_CMD_MAX_LEN + +# Old name: +AU_ALIAS([AC_LIBTOOL_SYS_MAX_CMD_LEN], [LT_CMD_MAX_LEN]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_LIBTOOL_SYS_MAX_CMD_LEN], []) + + +# _LT_HEADER_DLFCN +# ---------------- +m4_defun([_LT_HEADER_DLFCN], +[AC_CHECK_HEADERS([dlfcn.h], [], [], [AC_INCLUDES_DEFAULT])dnl +])# _LT_HEADER_DLFCN + + +# _LT_TRY_DLOPEN_SELF (ACTION-IF-TRUE, ACTION-IF-TRUE-W-USCORE, +# ACTION-IF-FALSE, ACTION-IF-CROSS-COMPILING) +# ---------------------------------------------------------------- +m4_defun([_LT_TRY_DLOPEN_SELF], +[m4_require([_LT_HEADER_DLFCN])dnl +if test "$cross_compiling" = yes; then : + [$4] +else + lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 + lt_status=$lt_dlunknown + cat > conftest.$ac_ext <<_LT_EOF +[#line __oline__ "configure" +#include "confdefs.h" + +#if HAVE_DLFCN_H +#include +#endif + +#include + +#ifdef RTLD_GLOBAL +# define LT_DLGLOBAL RTLD_GLOBAL +#else +# ifdef DL_GLOBAL +# define LT_DLGLOBAL DL_GLOBAL +# else +# define LT_DLGLOBAL 0 +# endif +#endif + +/* We may have to define LT_DLLAZY_OR_NOW in the command line if we + find out it does not work in some platform. */ +#ifndef LT_DLLAZY_OR_NOW +# ifdef RTLD_LAZY +# define LT_DLLAZY_OR_NOW RTLD_LAZY +# else +# ifdef DL_LAZY +# define LT_DLLAZY_OR_NOW DL_LAZY +# else +# ifdef RTLD_NOW +# define LT_DLLAZY_OR_NOW RTLD_NOW +# else +# ifdef DL_NOW +# define LT_DLLAZY_OR_NOW DL_NOW +# else +# define LT_DLLAZY_OR_NOW 0 +# endif +# endif +# endif +# endif +#endif + +void fnord() { int i=42;} +int main () +{ + void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); + int status = $lt_dlunknown; + + if (self) + { + if (dlsym (self,"fnord")) status = $lt_dlno_uscore; + else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; + /* dlclose (self); */ + } + else + puts (dlerror ()); + + return status; +}] +_LT_EOF + if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext} 2>/dev/null; then + (./conftest; exit; ) >&AS_MESSAGE_LOG_FD 2>/dev/null + lt_status=$? + case x$lt_status in + x$lt_dlno_uscore) $1 ;; + x$lt_dlneed_uscore) $2 ;; + x$lt_dlunknown|x*) $3 ;; + esac + else : + # compilation failed + $3 + fi +fi +rm -fr conftest* +])# _LT_TRY_DLOPEN_SELF + + +# LT_SYS_DLOPEN_SELF +# ------------------ +AC_DEFUN([LT_SYS_DLOPEN_SELF], +[m4_require([_LT_HEADER_DLFCN])dnl +if test "x$enable_dlopen" != xyes; then + enable_dlopen=unknown + enable_dlopen_self=unknown + enable_dlopen_self_static=unknown +else + lt_cv_dlopen=no + lt_cv_dlopen_libs= + + case $host_os in + beos*) + lt_cv_dlopen="load_add_on" + lt_cv_dlopen_libs= + lt_cv_dlopen_self=yes + ;; + + mingw* | pw32* | cegcc*) + lt_cv_dlopen="LoadLibrary" + lt_cv_dlopen_libs= + ;; + + cygwin*) + lt_cv_dlopen="dlopen" + lt_cv_dlopen_libs= + ;; + + darwin*) + # if libdl is installed we need to link against it + AC_CHECK_LIB([dl], [dlopen], + [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"],[ + lt_cv_dlopen="dyld" + lt_cv_dlopen_libs= + lt_cv_dlopen_self=yes + ]) + ;; + + *) + AC_CHECK_FUNC([shl_load], + [lt_cv_dlopen="shl_load"], + [AC_CHECK_LIB([dld], [shl_load], + [lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-ldld"], + [AC_CHECK_FUNC([dlopen], + [lt_cv_dlopen="dlopen"], + [AC_CHECK_LIB([dl], [dlopen], + [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"], + [AC_CHECK_LIB([svld], [dlopen], + [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld"], + [AC_CHECK_LIB([dld], [dld_link], + [lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-ldld"]) + ]) + ]) + ]) + ]) + ]) + ;; + esac + + if test "x$lt_cv_dlopen" != xno; then + enable_dlopen=yes + else + enable_dlopen=no + fi + + case $lt_cv_dlopen in + dlopen) + save_CPPFLAGS="$CPPFLAGS" + test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H" + + save_LDFLAGS="$LDFLAGS" + wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\" + + save_LIBS="$LIBS" + LIBS="$lt_cv_dlopen_libs $LIBS" + + AC_CACHE_CHECK([whether a program can dlopen itself], + lt_cv_dlopen_self, [dnl + _LT_TRY_DLOPEN_SELF( + lt_cv_dlopen_self=yes, lt_cv_dlopen_self=yes, + lt_cv_dlopen_self=no, lt_cv_dlopen_self=cross) + ]) + + if test "x$lt_cv_dlopen_self" = xyes; then + wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\" + AC_CACHE_CHECK([whether a statically linked program can dlopen itself], + lt_cv_dlopen_self_static, [dnl + _LT_TRY_DLOPEN_SELF( + lt_cv_dlopen_self_static=yes, lt_cv_dlopen_self_static=yes, + lt_cv_dlopen_self_static=no, lt_cv_dlopen_self_static=cross) + ]) + fi + + CPPFLAGS="$save_CPPFLAGS" + LDFLAGS="$save_LDFLAGS" + LIBS="$save_LIBS" + ;; + esac + + case $lt_cv_dlopen_self in + yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;; + *) enable_dlopen_self=unknown ;; + esac + + case $lt_cv_dlopen_self_static in + yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;; + *) enable_dlopen_self_static=unknown ;; + esac +fi +_LT_DECL([dlopen_support], [enable_dlopen], [0], + [Whether dlopen is supported]) +_LT_DECL([dlopen_self], [enable_dlopen_self], [0], + [Whether dlopen of programs is supported]) +_LT_DECL([dlopen_self_static], [enable_dlopen_self_static], [0], + [Whether dlopen of statically linked programs is supported]) +])# LT_SYS_DLOPEN_SELF + +# Old name: +AU_ALIAS([AC_LIBTOOL_DLOPEN_SELF], [LT_SYS_DLOPEN_SELF]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_LIBTOOL_DLOPEN_SELF], []) + + +# _LT_COMPILER_C_O([TAGNAME]) +# --------------------------- +# Check to see if options -c and -o are simultaneously supported by compiler. +# This macro does not hard code the compiler like AC_PROG_CC_C_O. +m4_defun([_LT_COMPILER_C_O], +[m4_require([_LT_DECL_SED])dnl +m4_require([_LT_FILEUTILS_DEFAULTS])dnl +m4_require([_LT_TAG_COMPILER])dnl +AC_CACHE_CHECK([if $compiler supports -c -o file.$ac_objext], + [_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)], + [_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=no + $RM -r conftest 2>/dev/null + mkdir conftest + cd conftest + mkdir out + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + + lt_compiler_flag="-o out/conftest2.$ac_objext" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:__oline__: $lt_compile\"" >&AS_MESSAGE_LOG_FD) + (eval "$lt_compile" 2>out/conftest.err) + ac_status=$? + cat out/conftest.err >&AS_MESSAGE_LOG_FD + echo "$as_me:__oline__: \$? = $ac_status" >&AS_MESSAGE_LOG_FD + if (exit $ac_status) && test -s out/conftest2.$ac_objext + then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings + $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' > out/conftest.exp + $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 + if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then + _LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes + fi + fi + chmod u+w . 2>&AS_MESSAGE_LOG_FD + $RM conftest* + # SGI C++ compiler will create directory out/ii_files/ for + # template instantiation + test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files + $RM out/* && rmdir out + cd .. + $RM -r conftest + $RM conftest* +]) +_LT_TAGDECL([compiler_c_o], [lt_cv_prog_compiler_c_o], [1], + [Does compiler simultaneously support -c and -o options?]) +])# _LT_COMPILER_C_O + + +# _LT_COMPILER_FILE_LOCKS([TAGNAME]) +# ---------------------------------- +# Check to see if we can do hard links to lock some files if needed +m4_defun([_LT_COMPILER_FILE_LOCKS], +[m4_require([_LT_ENABLE_LOCK])dnl +m4_require([_LT_FILEUTILS_DEFAULTS])dnl +_LT_COMPILER_C_O([$1]) + +hard_links="nottested" +if test "$_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)" = no && test "$need_locks" != no; then + # do not overwrite the value of need_locks provided by the user + AC_MSG_CHECKING([if we can lock with hard links]) + hard_links=yes + $RM conftest* + ln conftest.a conftest.b 2>/dev/null && hard_links=no + touch conftest.a + ln conftest.a conftest.b 2>&5 || hard_links=no + ln conftest.a conftest.b 2>/dev/null && hard_links=no + AC_MSG_RESULT([$hard_links]) + if test "$hard_links" = no; then + AC_MSG_WARN([`$CC' does not support `-c -o', so `make -j' may be unsafe]) + need_locks=warn + fi +else + need_locks=no +fi +_LT_DECL([], [need_locks], [1], [Must we lock files when doing compilation?]) +])# _LT_COMPILER_FILE_LOCKS + + +# _LT_CHECK_OBJDIR +# ---------------- +m4_defun([_LT_CHECK_OBJDIR], +[AC_CACHE_CHECK([for objdir], [lt_cv_objdir], +[rm -f .libs 2>/dev/null +mkdir .libs 2>/dev/null +if test -d .libs; then + lt_cv_objdir=.libs +else + # MS-DOS does not allow filenames that begin with a dot. + lt_cv_objdir=_libs +fi +rmdir .libs 2>/dev/null]) +objdir=$lt_cv_objdir +_LT_DECL([], [objdir], [0], + [The name of the directory that contains temporary libtool files])dnl +m4_pattern_allow([LT_OBJDIR])dnl +AC_DEFINE_UNQUOTED(LT_OBJDIR, "$lt_cv_objdir/", + [Define to the sub-directory in which libtool stores uninstalled libraries.]) +])# _LT_CHECK_OBJDIR + + +# _LT_LINKER_HARDCODE_LIBPATH([TAGNAME]) +# -------------------------------------- +# Check hardcoding attributes. +m4_defun([_LT_LINKER_HARDCODE_LIBPATH], +[AC_MSG_CHECKING([how to hardcode library paths into programs]) +_LT_TAGVAR(hardcode_action, $1)= +if test -n "$_LT_TAGVAR(hardcode_libdir_flag_spec, $1)" || + test -n "$_LT_TAGVAR(runpath_var, $1)" || + test "X$_LT_TAGVAR(hardcode_automatic, $1)" = "Xyes" ; then + + # We can hardcode non-existent directories. + if test "$_LT_TAGVAR(hardcode_direct, $1)" != no && + # If the only mechanism to avoid hardcoding is shlibpath_var, we + # have to relink, otherwise we might link with an installed library + # when we should be linking with a yet-to-be-installed one + ## test "$_LT_TAGVAR(hardcode_shlibpath_var, $1)" != no && + test "$_LT_TAGVAR(hardcode_minus_L, $1)" != no; then + # Linking always hardcodes the temporary library directory. + _LT_TAGVAR(hardcode_action, $1)=relink + else + # We can link without hardcoding, and we can hardcode nonexisting dirs. + _LT_TAGVAR(hardcode_action, $1)=immediate + fi +else + # We cannot hardcode anything, or else we can only hardcode existing + # directories. + _LT_TAGVAR(hardcode_action, $1)=unsupported +fi +AC_MSG_RESULT([$_LT_TAGVAR(hardcode_action, $1)]) + +if test "$_LT_TAGVAR(hardcode_action, $1)" = relink || + test "$_LT_TAGVAR(inherit_rpath, $1)" = yes; then + # Fast installation is not supported + enable_fast_install=no +elif test "$shlibpath_overrides_runpath" = yes || + test "$enable_shared" = no; then + # Fast installation is not necessary + enable_fast_install=needless +fi +_LT_TAGDECL([], [hardcode_action], [0], + [How to hardcode a shared library path into an executable]) +])# _LT_LINKER_HARDCODE_LIBPATH + + +# _LT_CMD_STRIPLIB +# ---------------- +m4_defun([_LT_CMD_STRIPLIB], +[m4_require([_LT_DECL_EGREP]) +striplib= +old_striplib= +AC_MSG_CHECKING([whether stripping libraries is possible]) +if test -n "$STRIP" && $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then + test -z "$old_striplib" && old_striplib="$STRIP --strip-debug" + test -z "$striplib" && striplib="$STRIP --strip-unneeded" + AC_MSG_RESULT([yes]) +else +# FIXME - insert some real tests, host_os isn't really good enough + case $host_os in + darwin*) + if test -n "$STRIP" ; then + striplib="$STRIP -x" + old_striplib="$STRIP -S" + AC_MSG_RESULT([yes]) + else + AC_MSG_RESULT([no]) + fi + ;; + *) + AC_MSG_RESULT([no]) + ;; + esac +fi +_LT_DECL([], [old_striplib], [1], [Commands to strip libraries]) +_LT_DECL([], [striplib], [1]) +])# _LT_CMD_STRIPLIB + + +# _LT_SYS_DYNAMIC_LINKER([TAG]) +# ----------------------------- +# PORTME Fill in your ld.so characteristics +m4_defun([_LT_SYS_DYNAMIC_LINKER], +[AC_REQUIRE([AC_CANONICAL_HOST])dnl +m4_require([_LT_DECL_EGREP])dnl +m4_require([_LT_FILEUTILS_DEFAULTS])dnl +m4_require([_LT_DECL_OBJDUMP])dnl +m4_require([_LT_DECL_SED])dnl +AC_MSG_CHECKING([dynamic linker characteristics]) +m4_if([$1], + [], [ +if test "$GCC" = yes; then + case $host_os in + darwin*) lt_awk_arg="/^libraries:/,/LR/" ;; + *) lt_awk_arg="/^libraries:/" ;; + esac + lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e "s,=/,/,g"` + if $ECHO "$lt_search_path_spec" | $GREP ';' >/dev/null ; then + # if the path contains ";" then we assume it to be the separator + # otherwise default to the standard path separator (i.e. ":") - it is + # assumed that no part of a normal pathname contains ";" but that should + # okay in the real world where ";" in dirpaths is itself problematic. + lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED -e 's/;/ /g'` + else + lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` + fi + # Ok, now we have the path, separated by spaces, we can step through it + # and add multilib dir if necessary. + lt_tmp_lt_search_path_spec= + lt_multi_os_dir=`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null` + for lt_sys_path in $lt_search_path_spec; do + if test -d "$lt_sys_path/$lt_multi_os_dir"; then + lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path/$lt_multi_os_dir" + else + test -d "$lt_sys_path" && \ + lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path" + fi + done + lt_search_path_spec=`$ECHO $lt_tmp_lt_search_path_spec | awk ' +BEGIN {RS=" "; FS="/|\n";} { + lt_foo=""; + lt_count=0; + for (lt_i = NF; lt_i > 0; lt_i--) { + if ($lt_i != "" && $lt_i != ".") { + if ($lt_i == "..") { + lt_count++; + } else { + if (lt_count == 0) { + lt_foo="/" $lt_i lt_foo; + } else { + lt_count--; + } + } + } + } + if (lt_foo != "") { lt_freq[[lt_foo]]++; } + if (lt_freq[[lt_foo]] == 1) { print lt_foo; } +}'` + sys_lib_search_path_spec=`$ECHO $lt_search_path_spec` +else + sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" +fi]) +library_names_spec= +libname_spec='lib$name' +soname_spec= +shrext_cmds=".so" +postinstall_cmds= +postuninstall_cmds= +finish_cmds= +finish_eval= +shlibpath_var= +shlibpath_overrides_runpath=unknown +version_type=none +dynamic_linker="$host_os ld.so" +sys_lib_dlsearch_path_spec="/lib /usr/lib" +need_lib_prefix=unknown +hardcode_into_libs=no + +# when you set need_version to no, make sure it does not cause -set_version +# flags to be left without arguments +need_version=unknown + +case $host_os in +aix3*) + version_type=linux + library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a' + shlibpath_var=LIBPATH + + # AIX 3 has no versioning support, so we append a major version to the name. + soname_spec='${libname}${release}${shared_ext}$major' + ;; + +aix[[4-9]]*) + version_type=linux + need_lib_prefix=no + need_version=no + hardcode_into_libs=yes + if test "$host_cpu" = ia64; then + # AIX 5 supports IA64 + library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + else + # With GCC up to 2.95.x, collect2 would create an import file + # for dependence libraries. The import file would start with + # the line `#! .'. This would cause the generated library to + # depend on `.', always an invalid library. This was fixed in + # development snapshots of GCC prior to 3.0. + case $host_os in + aix4 | aix4.[[01]] | aix4.[[01]].*) + if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' + echo ' yes ' + echo '#endif'; } | ${CC} -E - | $GREP yes > /dev/null; then + : + else + can_build_shared=no + fi + ;; + esac + # AIX (on Power*) has no versioning support, so currently we can not hardcode correct + # soname into executable. Probably we can add versioning support to + # collect2, so additional links can be useful in future. + if test "$aix_use_runtimelinking" = yes; then + # If using run time linking (on AIX 4.2 or later) use lib.so + # instead of lib.a to let people know that these are not + # typical AIX shared libraries. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + else + # We preserve .a as extension for shared libraries through AIX4.2 + # and later when we are not doing run time linking. + library_names_spec='${libname}${release}.a $libname.a' + soname_spec='${libname}${release}${shared_ext}$major' + fi + shlibpath_var=LIBPATH + fi + ;; + +amigaos*) + case $host_cpu in + powerpc) + # Since July 2007 AmigaOS4 officially supports .so libraries. + # When compiling the executable, add -use-dynld -Lsobjs: to the compileline. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + ;; + m68k) + library_names_spec='$libname.ixlibrary $libname.a' + # Create ${libname}_ixlibrary.a entries in /sys/libs. + finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$ECHO "X$lib" | $Xsed -e '\''s%^.*/\([[^/]]*\)\.ixlibrary$%\1%'\''`; test $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' + ;; + esac + ;; + +beos*) + library_names_spec='${libname}${shared_ext}' + dynamic_linker="$host_os ld.so" + shlibpath_var=LIBRARY_PATH + ;; + +bsdi[[45]]*) + version_type=linux + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' + shlibpath_var=LD_LIBRARY_PATH + sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" + sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" + # the default ld.so.conf also contains /usr/contrib/lib and + # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow + # libtool to hard-code these into programs + ;; + +cygwin* | mingw* | pw32* | cegcc*) + version_type=windows + shrext_cmds=".dll" + need_version=no + need_lib_prefix=no + + case $GCC,$host_os in + yes,cygwin* | yes,mingw* | yes,pw32* | yes,cegcc*) + library_names_spec='$libname.dll.a' + # DLL is installed to $(libdir)/../bin by postinstall_cmds + postinstall_cmds='base_file=`basename \${file}`~ + dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ + dldir=$destdir/`dirname \$dlpath`~ + test -d \$dldir || mkdir -p \$dldir~ + $install_prog $dir/$dlname \$dldir/$dlname~ + chmod a+x \$dldir/$dlname~ + if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then + eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; + fi' + postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ + dlpath=$dir/\$dldll~ + $RM \$dlpath' + shlibpath_overrides_runpath=yes + + case $host_os in + cygwin*) + # Cygwin DLLs use 'cyg' prefix rather than 'lib' + soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}' + sys_lib_search_path_spec="/usr/lib /lib/w32api /lib /usr/local/lib" + ;; + mingw* | cegcc*) + # MinGW DLLs use traditional 'lib' prefix + soname_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}' + sys_lib_search_path_spec=`$CC -print-search-dirs | $GREP "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"` + if $ECHO "$sys_lib_search_path_spec" | [$GREP ';[c-zC-Z]:/' >/dev/null]; then + # It is most probably a Windows format PATH printed by + # mingw gcc, but we are running on Cygwin. Gcc prints its search + # path with ; separators, and with drive letters. We can handle the + # drive letters (cygwin fileutils understands them), so leave them, + # especially as we might pass files found there to a mingw objdump, + # which wouldn't understand a cygwinified path. Ahh. + sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` + else + sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` + fi + ;; + pw32*) + # pw32 DLLs use 'pw' prefix rather than 'lib' + library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}' + ;; + esac + ;; + + *) + library_names_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext} $libname.lib' + ;; + esac + dynamic_linker='Win32 ld.exe' + # FIXME: first we should search . and the directory the executable is in + shlibpath_var=PATH + ;; + +darwin* | rhapsody*) + dynamic_linker="$host_os dyld" + version_type=darwin + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${major}$shared_ext ${libname}$shared_ext' + soname_spec='${libname}${release}${major}$shared_ext' + shlibpath_overrides_runpath=yes + shlibpath_var=DYLD_LIBRARY_PATH + shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' +m4_if([$1], [],[ + sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/local/lib"]) + sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' + ;; + +dgux*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + ;; + +freebsd1*) + dynamic_linker=no + ;; + +freebsd* | dragonfly*) + # DragonFly does not have aout. When/if they implement a new + # versioning mechanism, adjust this. + if test -x /usr/bin/objformat; then + objformat=`/usr/bin/objformat` + else + case $host_os in + freebsd[[123]]*) objformat=aout ;; + *) objformat=elf ;; + esac + fi + version_type=freebsd-$objformat + case $version_type in + freebsd-elf*) + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' + need_version=no + need_lib_prefix=no + ;; + freebsd-*) + library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix' + need_version=yes + ;; + esac + shlibpath_var=LD_LIBRARY_PATH + case $host_os in + freebsd2*) + shlibpath_overrides_runpath=yes + ;; + freebsd3.[[01]]* | freebsdelf3.[[01]]*) + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + freebsd3.[[2-9]]* | freebsdelf3.[[2-9]]* | \ + freebsd4.[[0-5]] | freebsdelf4.[[0-5]] | freebsd4.1.1 | freebsdelf4.1.1) + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + *) # from 4.6 on, and DragonFly + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + esac + ;; + +gnu*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + hardcode_into_libs=yes + ;; + +hpux9* | hpux10* | hpux11*) + # Give a soname corresponding to the major version so that dld.sl refuses to + # link against other versions. + version_type=sunos + need_lib_prefix=no + need_version=no + case $host_cpu in + ia64*) + shrext_cmds='.so' + hardcode_into_libs=yes + dynamic_linker="$host_os dld.so" + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + if test "X$HPUX_IA64_MODE" = X32; then + sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" + else + sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" + fi + sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec + ;; + hppa*64*) + shrext_cmds='.sl' + hardcode_into_libs=yes + dynamic_linker="$host_os dld.sl" + shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH + shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" + sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec + ;; + *) + shrext_cmds='.sl' + dynamic_linker="$host_os dld.sl" + shlibpath_var=SHLIB_PATH + shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + ;; + esac + # HP-UX runs *really* slowly unless shared libraries are mode 555. + postinstall_cmds='chmod 555 $lib' + ;; + +interix[[3-9]]*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + +irix5* | irix6* | nonstopux*) + case $host_os in + nonstopux*) version_type=nonstopux ;; + *) + if test "$lt_cv_prog_gnu_ld" = yes; then + version_type=linux + else + version_type=irix + fi ;; + esac + need_lib_prefix=no + need_version=no + soname_spec='${libname}${release}${shared_ext}$major' + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}' + case $host_os in + irix5* | nonstopux*) + libsuff= shlibsuff= + ;; + *) + case $LD in # libtool.m4 will add one of these switches to LD + *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") + libsuff= shlibsuff= libmagic=32-bit;; + *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") + libsuff=32 shlibsuff=N32 libmagic=N32;; + *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") + libsuff=64 shlibsuff=64 libmagic=64-bit;; + *) libsuff= shlibsuff= libmagic=never-match;; + esac + ;; + esac + shlibpath_var=LD_LIBRARY${shlibsuff}_PATH + shlibpath_overrides_runpath=no + sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" + sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" + hardcode_into_libs=yes + ;; + +# No shared lib support for Linux oldld, aout, or coff. +linux*oldld* | linux*aout* | linux*coff*) + dynamic_linker=no + ;; + +# This must be Linux ELF. +linux* | k*bsd*-gnu) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + # Some binutils ld are patched to set DT_RUNPATH + save_LDFLAGS=$LDFLAGS + save_libdir=$libdir + eval "libdir=/foo; wl=\"$_LT_TAGVAR(lt_prog_compiler_wl, $1)\"; \ + LDFLAGS=\"\$LDFLAGS $_LT_TAGVAR(hardcode_libdir_flag_spec, $1)\"" + AC_LINK_IFELSE([AC_LANG_PROGRAM([],[])], + [AS_IF([ ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null], + [shlibpath_overrides_runpath=yes])]) + LDFLAGS=$save_LDFLAGS + libdir=$save_libdir + + # This implies no fast_install, which is unacceptable. + # Some rework will be needed to allow for fast_install + # before this can be enabled. + hardcode_into_libs=yes + + # Append ld.so.conf contents to the search path + if test -f /etc/ld.so.conf; then + lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \[$]2)); skip = 1; } { if (!skip) print \[$]0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;/^$/d' | tr '\n' ' '` + sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" + fi + + # We used to test for /lib/ld.so.1 and disable shared libraries on + # powerpc, because MkLinux only supported shared libraries with the + # GNU dynamic linker. Since this was broken with cross compilers, + # most powerpc-linux boxes support dynamic linking these days and + # people can always --disable-shared, the test was removed, and we + # assume the GNU/Linux dynamic linker is in use. + dynamic_linker='GNU/Linux ld.so' + ;; + +netbsd*) + version_type=sunos + need_lib_prefix=no + need_version=no + if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' + dynamic_linker='NetBSD (a.out) ld.so' + else + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + dynamic_linker='NetBSD ld.elf_so' + fi + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + +newsos6) + version_type=linux + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + ;; + +*nto* | *qnx*) + version_type=qnx + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + dynamic_linker='ldqnx.so' + ;; + +openbsd*) + version_type=sunos + sys_lib_dlsearch_path_spec="/usr/lib" + need_lib_prefix=no + # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs. + case $host_os in + openbsd3.3 | openbsd3.3.*) need_version=yes ;; + *) need_version=no ;; + esac + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' + shlibpath_var=LD_LIBRARY_PATH + if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + case $host_os in + openbsd2.[[89]] | openbsd2.[[89]].*) + shlibpath_overrides_runpath=no + ;; + *) + shlibpath_overrides_runpath=yes + ;; + esac + else + shlibpath_overrides_runpath=yes + fi + ;; + +os2*) + libname_spec='$name' + shrext_cmds=".dll" + need_lib_prefix=no + library_names_spec='$libname${shared_ext} $libname.a' + dynamic_linker='OS/2 ld.exe' + shlibpath_var=LIBPATH + ;; + +osf3* | osf4* | osf5*) + version_type=osf + need_lib_prefix=no + need_version=no + soname_spec='${libname}${release}${shared_ext}$major' + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" + sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" + ;; + +rdos*) + dynamic_linker=no + ;; + +solaris*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + # ldd complains unless libraries are executable + postinstall_cmds='chmod +x $lib' + ;; + +sunos4*) + version_type=sunos + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + if test "$with_gnu_ld" = yes; then + need_lib_prefix=no + fi + need_version=yes + ;; + +sysv4 | sysv4.3*) + version_type=linux + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + case $host_vendor in + sni) + shlibpath_overrides_runpath=no + need_lib_prefix=no + runpath_var=LD_RUN_PATH + ;; + siemens) + need_lib_prefix=no + ;; + motorola) + need_lib_prefix=no + need_version=no + shlibpath_overrides_runpath=no + sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' + ;; + esac + ;; + +sysv4*MP*) + if test -d /usr/nec ;then + version_type=linux + library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}' + soname_spec='$libname${shared_ext}.$major' + shlibpath_var=LD_LIBRARY_PATH + fi + ;; + +sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) + version_type=freebsd-elf + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + if test "$with_gnu_ld" = yes; then + sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' + else + sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' + case $host_os in + sco3.2v5*) + sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" + ;; + esac + fi + sys_lib_dlsearch_path_spec='/usr/lib' + ;; + +tpf*) + # TPF is a cross-target only. Preferred cross-host = GNU/Linux. + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + +uts4*) + version_type=linux + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + ;; + +*) + dynamic_linker=no + ;; +esac +AC_MSG_RESULT([$dynamic_linker]) +test "$dynamic_linker" = no && can_build_shared=no + +variables_saved_for_relink="PATH $shlibpath_var $runpath_var" +if test "$GCC" = yes; then + variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" +fi + +if test "${lt_cv_sys_lib_search_path_spec+set}" = set; then + sys_lib_search_path_spec="$lt_cv_sys_lib_search_path_spec" +fi +if test "${lt_cv_sys_lib_dlsearch_path_spec+set}" = set; then + sys_lib_dlsearch_path_spec="$lt_cv_sys_lib_dlsearch_path_spec" +fi + +_LT_DECL([], [variables_saved_for_relink], [1], + [Variables whose values should be saved in libtool wrapper scripts and + restored at link time]) +_LT_DECL([], [need_lib_prefix], [0], + [Do we need the "lib" prefix for modules?]) +_LT_DECL([], [need_version], [0], [Do we need a version for libraries?]) +_LT_DECL([], [version_type], [0], [Library versioning type]) +_LT_DECL([], [runpath_var], [0], [Shared library runtime path variable]) +_LT_DECL([], [shlibpath_var], [0],[Shared library path variable]) +_LT_DECL([], [shlibpath_overrides_runpath], [0], + [Is shlibpath searched before the hard-coded library search path?]) +_LT_DECL([], [libname_spec], [1], [Format of library name prefix]) +_LT_DECL([], [library_names_spec], [1], + [[List of archive names. First name is the real one, the rest are links. + The last name is the one that the linker finds with -lNAME]]) +_LT_DECL([], [soname_spec], [1], + [[The coded name of the library, if different from the real name]]) +_LT_DECL([], [postinstall_cmds], [2], + [Command to use after installation of a shared archive]) +_LT_DECL([], [postuninstall_cmds], [2], + [Command to use after uninstallation of a shared archive]) +_LT_DECL([], [finish_cmds], [2], + [Commands used to finish a libtool library installation in a directory]) +_LT_DECL([], [finish_eval], [1], + [[As "finish_cmds", except a single script fragment to be evaled but + not shown]]) +_LT_DECL([], [hardcode_into_libs], [0], + [Whether we should hardcode library paths into libraries]) +_LT_DECL([], [sys_lib_search_path_spec], [2], + [Compile-time system search path for libraries]) +_LT_DECL([], [sys_lib_dlsearch_path_spec], [2], + [Run-time system search path for libraries]) +])# _LT_SYS_DYNAMIC_LINKER + + +# _LT_PATH_TOOL_PREFIX(TOOL) +# -------------------------- +# find a file program which can recognize shared library +AC_DEFUN([_LT_PATH_TOOL_PREFIX], +[m4_require([_LT_DECL_EGREP])dnl +AC_MSG_CHECKING([for $1]) +AC_CACHE_VAL(lt_cv_path_MAGIC_CMD, +[case $MAGIC_CMD in +[[\\/*] | ?:[\\/]*]) + lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path. + ;; +*) + lt_save_MAGIC_CMD="$MAGIC_CMD" + lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR +dnl $ac_dummy forces splitting on constant user-supplied paths. +dnl POSIX.2 word splitting is done only on the output of word expansions, +dnl not every word. This closes a longstanding sh security hole. + ac_dummy="m4_if([$2], , $PATH, [$2])" + for ac_dir in $ac_dummy; do + IFS="$lt_save_ifs" + test -z "$ac_dir" && ac_dir=. + if test -f $ac_dir/$1; then + lt_cv_path_MAGIC_CMD="$ac_dir/$1" + if test -n "$file_magic_test_file"; then + case $deplibs_check_method in + "file_magic "*) + file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` + MAGIC_CMD="$lt_cv_path_MAGIC_CMD" + if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | + $EGREP "$file_magic_regex" > /dev/null; then + : + else + cat <<_LT_EOF 1>&2 + +*** Warning: the command libtool uses to detect shared libraries, +*** $file_magic_cmd, produces output that libtool cannot recognize. +*** The result is that libtool may fail to recognize shared libraries +*** as such. This will affect the creation of libtool libraries that +*** depend on shared libraries, but programs linked with such libtool +*** libraries will work regardless of this problem. Nevertheless, you +*** may want to report the problem to your system manager and/or to +*** bug-libtool@gnu.org + +_LT_EOF + fi ;; + esac + fi + break + fi + done + IFS="$lt_save_ifs" + MAGIC_CMD="$lt_save_MAGIC_CMD" + ;; +esac]) +MAGIC_CMD="$lt_cv_path_MAGIC_CMD" +if test -n "$MAGIC_CMD"; then + AC_MSG_RESULT($MAGIC_CMD) +else + AC_MSG_RESULT(no) +fi +_LT_DECL([], [MAGIC_CMD], [0], + [Used to examine libraries when file_magic_cmd begins with "file"])dnl +])# _LT_PATH_TOOL_PREFIX + +# Old name: +AU_ALIAS([AC_PATH_TOOL_PREFIX], [_LT_PATH_TOOL_PREFIX]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_PATH_TOOL_PREFIX], []) + + +# _LT_PATH_MAGIC +# -------------- +# find a file program which can recognize a shared library +m4_defun([_LT_PATH_MAGIC], +[_LT_PATH_TOOL_PREFIX(${ac_tool_prefix}file, /usr/bin$PATH_SEPARATOR$PATH) +if test -z "$lt_cv_path_MAGIC_CMD"; then + if test -n "$ac_tool_prefix"; then + _LT_PATH_TOOL_PREFIX(file, /usr/bin$PATH_SEPARATOR$PATH) + else + MAGIC_CMD=: + fi +fi +])# _LT_PATH_MAGIC + + +# LT_PATH_LD +# ---------- +# find the pathname to the GNU or non-GNU linker +AC_DEFUN([LT_PATH_LD], +[AC_REQUIRE([AC_PROG_CC])dnl +AC_REQUIRE([AC_CANONICAL_HOST])dnl +AC_REQUIRE([AC_CANONICAL_BUILD])dnl +m4_require([_LT_DECL_SED])dnl +m4_require([_LT_DECL_EGREP])dnl + +AC_ARG_WITH([gnu-ld], + [AS_HELP_STRING([--with-gnu-ld], + [assume the C compiler uses GNU ld @<:@default=no@:>@])], + [test "$withval" = no || with_gnu_ld=yes], + [with_gnu_ld=no])dnl + +ac_prog=ld +if test "$GCC" = yes; then + # Check if gcc -print-prog-name=ld gives a path. + AC_MSG_CHECKING([for ld used by $CC]) + case $host in + *-*-mingw*) + # gcc leaves a trailing carriage return which upsets mingw + ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; + *) + ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; + esac + case $ac_prog in + # Accept absolute paths. + [[\\/]]* | ?:[[\\/]]*) + re_direlt='/[[^/]][[^/]]*/\.\./' + # Canonicalize the pathname of ld + ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'` + while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do + ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"` + done + test -z "$LD" && LD="$ac_prog" + ;; + "") + # If it fails, then pretend we aren't using GCC. + ac_prog=ld + ;; + *) + # If it is relative, then search for the first ld in PATH. + with_gnu_ld=unknown + ;; + esac +elif test "$with_gnu_ld" = yes; then + AC_MSG_CHECKING([for GNU ld]) +else + AC_MSG_CHECKING([for non-GNU ld]) +fi +AC_CACHE_VAL(lt_cv_path_LD, +[if test -z "$LD"; then + lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR + for ac_dir in $PATH; do + IFS="$lt_save_ifs" + test -z "$ac_dir" && ac_dir=. + if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then + lt_cv_path_LD="$ac_dir/$ac_prog" + # Check to see if the program is GNU ld. I'd rather use --version, + # but apparently some variants of GNU ld only accept -v. + # Break only if it was the GNU/non-GNU ld that we prefer. + case `"$lt_cv_path_LD" -v 2>&1 &1 /dev/null 2>&1; then + lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' + lt_cv_file_magic_cmd='func_win32_libid' + else + lt_cv_deplibs_check_method='file_magic file format pei*-i386(.*architecture: i386)?' + lt_cv_file_magic_cmd='$OBJDUMP -f' + fi + ;; + +cegcc) + # use the weaker test based on 'objdump'. See mingw*. + lt_cv_deplibs_check_method='file_magic file format pe-arm-.*little(.*architecture: arm)?' + lt_cv_file_magic_cmd='$OBJDUMP -f' + ;; + +darwin* | rhapsody*) + lt_cv_deplibs_check_method=pass_all + ;; + +freebsd* | dragonfly*) + if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then + case $host_cpu in + i*86 ) + # Not sure whether the presence of OpenBSD here was a mistake. + # Let's accept both of them until this is cleared up. + lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[[3-9]]86 (compact )?demand paged shared library' + lt_cv_file_magic_cmd=/usr/bin/file + lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*` + ;; + esac + else + lt_cv_deplibs_check_method=pass_all + fi + ;; + +gnu*) + lt_cv_deplibs_check_method=pass_all + ;; + +hpux10.20* | hpux11*) + lt_cv_file_magic_cmd=/usr/bin/file + case $host_cpu in + ia64*) + lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|ELF-[[0-9]][[0-9]]) shared object file - IA64' + lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so + ;; + hppa*64*) + [lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - PA-RISC [0-9].[0-9]'] + lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl + ;; + *) + lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|PA-RISC[[0-9]].[[0-9]]) shared library' + lt_cv_file_magic_test_file=/usr/lib/libc.sl + ;; + esac + ;; + +interix[[3-9]]*) + # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here + lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|\.a)$' + ;; + +irix5* | irix6* | nonstopux*) + case $LD in + *-32|*"-32 ") libmagic=32-bit;; + *-n32|*"-n32 ") libmagic=N32;; + *-64|*"-64 ") libmagic=64-bit;; + *) libmagic=never-match;; + esac + lt_cv_deplibs_check_method=pass_all + ;; + +# This must be Linux ELF. +linux* | k*bsd*-gnu) + lt_cv_deplibs_check_method=pass_all + ;; + +netbsd*) + if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then + lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$' + else + lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|_pic\.a)$' + fi + ;; + +newos6*) + lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (executable|dynamic lib)' + lt_cv_file_magic_cmd=/usr/bin/file + lt_cv_file_magic_test_file=/usr/lib/libnls.so + ;; + +*nto* | *qnx*) + lt_cv_deplibs_check_method=pass_all + ;; + +openbsd*) + if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|\.so|_pic\.a)$' + else + lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$' + fi + ;; + +osf3* | osf4* | osf5*) + lt_cv_deplibs_check_method=pass_all + ;; + +rdos*) + lt_cv_deplibs_check_method=pass_all + ;; + +solaris*) + lt_cv_deplibs_check_method=pass_all + ;; + +sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) + lt_cv_deplibs_check_method=pass_all + ;; + +sysv4 | sysv4.3*) + case $host_vendor in + motorola) + lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (shared object|dynamic lib) M[[0-9]][[0-9]]* Version [[0-9]]' + lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*` + ;; + ncr) + lt_cv_deplibs_check_method=pass_all + ;; + sequent) + lt_cv_file_magic_cmd='/bin/file' + lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB (shared object|dynamic lib )' + ;; + sni) + lt_cv_file_magic_cmd='/bin/file' + lt_cv_deplibs_check_method="file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB dynamic lib" + lt_cv_file_magic_test_file=/lib/libc.so + ;; + siemens) + lt_cv_deplibs_check_method=pass_all + ;; + pc) + lt_cv_deplibs_check_method=pass_all + ;; + esac + ;; + +tpf*) + lt_cv_deplibs_check_method=pass_all + ;; +esac +]) +file_magic_cmd=$lt_cv_file_magic_cmd +deplibs_check_method=$lt_cv_deplibs_check_method +test -z "$deplibs_check_method" && deplibs_check_method=unknown + +_LT_DECL([], [deplibs_check_method], [1], + [Method to check whether dependent libraries are shared objects]) +_LT_DECL([], [file_magic_cmd], [1], + [Command to use when deplibs_check_method == "file_magic"]) +])# _LT_CHECK_MAGIC_METHOD + + +# LT_PATH_NM +# ---------- +# find the pathname to a BSD- or MS-compatible name lister +AC_DEFUN([LT_PATH_NM], +[AC_REQUIRE([AC_PROG_CC])dnl +AC_CACHE_CHECK([for BSD- or MS-compatible name lister (nm)], lt_cv_path_NM, +[if test -n "$NM"; then + # Let the user override the test. + lt_cv_path_NM="$NM" +else + lt_nm_to_check="${ac_tool_prefix}nm" + if test -n "$ac_tool_prefix" && test "$build" = "$host"; then + lt_nm_to_check="$lt_nm_to_check nm" + fi + for lt_tmp_nm in $lt_nm_to_check; do + lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR + for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do + IFS="$lt_save_ifs" + test -z "$ac_dir" && ac_dir=. + tmp_nm="$ac_dir/$lt_tmp_nm" + if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext" ; then + # Check to see if the nm accepts a BSD-compat flag. + # Adding the `sed 1q' prevents false positives on HP-UX, which says: + # nm: unknown option "B" ignored + # Tru64's nm complains that /dev/null is an invalid object file + case `"$tmp_nm" -B /dev/null 2>&1 | sed '1q'` in + */dev/null* | *'Invalid file or object type'*) + lt_cv_path_NM="$tmp_nm -B" + break + ;; + *) + case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in + */dev/null*) + lt_cv_path_NM="$tmp_nm -p" + break + ;; + *) + lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but + continue # so that we can try to find one that supports BSD flags + ;; + esac + ;; + esac + fi + done + IFS="$lt_save_ifs" + done + : ${lt_cv_path_NM=no} +fi]) +if test "$lt_cv_path_NM" != "no"; then + NM="$lt_cv_path_NM" +else + # Didn't find any BSD compatible name lister, look for dumpbin. + AC_CHECK_TOOLS(DUMPBIN, ["dumpbin -symbols" "link -dump -symbols"], :) + AC_SUBST([DUMPBIN]) + if test "$DUMPBIN" != ":"; then + NM="$DUMPBIN" + fi +fi +test -z "$NM" && NM=nm +AC_SUBST([NM]) +_LT_DECL([], [NM], [1], [A BSD- or MS-compatible name lister])dnl + +AC_CACHE_CHECK([the name lister ($NM) interface], [lt_cv_nm_interface], + [lt_cv_nm_interface="BSD nm" + echo "int some_variable = 0;" > conftest.$ac_ext + (eval echo "\"\$as_me:__oline__: $ac_compile\"" >&AS_MESSAGE_LOG_FD) + (eval "$ac_compile" 2>conftest.err) + cat conftest.err >&AS_MESSAGE_LOG_FD + (eval echo "\"\$as_me:__oline__: $NM \\\"conftest.$ac_objext\\\"\"" >&AS_MESSAGE_LOG_FD) + (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out) + cat conftest.err >&AS_MESSAGE_LOG_FD + (eval echo "\"\$as_me:__oline__: output\"" >&AS_MESSAGE_LOG_FD) + cat conftest.out >&AS_MESSAGE_LOG_FD + if $GREP 'External.*some_variable' conftest.out > /dev/null; then + lt_cv_nm_interface="MS dumpbin" + fi + rm -f conftest*]) +])# LT_PATH_NM + +# Old names: +AU_ALIAS([AM_PROG_NM], [LT_PATH_NM]) +AU_ALIAS([AC_PROG_NM], [LT_PATH_NM]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AM_PROG_NM], []) +dnl AC_DEFUN([AC_PROG_NM], []) + + +# LT_LIB_M +# -------- +# check for math library +AC_DEFUN([LT_LIB_M], +[AC_REQUIRE([AC_CANONICAL_HOST])dnl +LIBM= +case $host in +*-*-beos* | *-*-cygwin* | *-*-pw32* | *-*-darwin*) + # These system don't have libm, or don't need it + ;; +*-ncr-sysv4.3*) + AC_CHECK_LIB(mw, _mwvalidcheckl, LIBM="-lmw") + AC_CHECK_LIB(m, cos, LIBM="$LIBM -lm") + ;; +*) + AC_CHECK_LIB(m, cos, LIBM="-lm") + ;; +esac +AC_SUBST([LIBM]) +])# LT_LIB_M + +# Old name: +AU_ALIAS([AC_CHECK_LIBM], [LT_LIB_M]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_CHECK_LIBM], []) + + +# _LT_COMPILER_NO_RTTI([TAGNAME]) +# ------------------------------- +m4_defun([_LT_COMPILER_NO_RTTI], +[m4_require([_LT_TAG_COMPILER])dnl + +_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)= + +if test "$GCC" = yes; then + _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin' + + _LT_COMPILER_OPTION([if $compiler supports -fno-rtti -fno-exceptions], + lt_cv_prog_compiler_rtti_exceptions, + [-fno-rtti -fno-exceptions], [], + [_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)="$_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1) -fno-rtti -fno-exceptions"]) +fi +_LT_TAGDECL([no_builtin_flag], [lt_prog_compiler_no_builtin_flag], [1], + [Compiler flag to turn off builtin functions]) +])# _LT_COMPILER_NO_RTTI + + +# _LT_CMD_GLOBAL_SYMBOLS +# ---------------------- +m4_defun([_LT_CMD_GLOBAL_SYMBOLS], +[AC_REQUIRE([AC_CANONICAL_HOST])dnl +AC_REQUIRE([AC_PROG_CC])dnl +AC_REQUIRE([LT_PATH_NM])dnl +AC_REQUIRE([LT_PATH_LD])dnl +m4_require([_LT_DECL_SED])dnl +m4_require([_LT_DECL_EGREP])dnl +m4_require([_LT_TAG_COMPILER])dnl + +# Check for command to grab the raw symbol name followed by C symbol from nm. +AC_MSG_CHECKING([command to parse $NM output from $compiler object]) +AC_CACHE_VAL([lt_cv_sys_global_symbol_pipe], +[ +# These are sane defaults that work on at least a few old systems. +# [They come from Ultrix. What could be older than Ultrix?!! ;)] + +# Character class describing NM global symbol codes. +symcode='[[BCDEGRST]]' + +# Regexp to match symbols that can be accessed directly from C. +sympat='\([[_A-Za-z]][[_A-Za-z0-9]]*\)' + +# Define system-specific variables. +case $host_os in +aix*) + symcode='[[BCDT]]' + ;; +cygwin* | mingw* | pw32* | cegcc*) + symcode='[[ABCDGISTW]]' + ;; +hpux*) + if test "$host_cpu" = ia64; then + symcode='[[ABCDEGRST]]' + fi + ;; +irix* | nonstopux*) + symcode='[[BCDEGRST]]' + ;; +osf*) + symcode='[[BCDEGQRST]]' + ;; +solaris*) + symcode='[[BDRT]]' + ;; +sco3.2v5*) + symcode='[[DT]]' + ;; +sysv4.2uw2*) + symcode='[[DT]]' + ;; +sysv5* | sco5v6* | unixware* | OpenUNIX*) + symcode='[[ABDT]]' + ;; +sysv4) + symcode='[[DFNSTU]]' + ;; +esac + +# If we're using GNU nm, then use its standard symbol codes. +case `$NM -V 2>&1` in +*GNU* | *'with BFD'*) + symcode='[[ABCDGIRSTW]]' ;; +esac + +# Transform an extracted symbol line into a proper C declaration. +# Some systems (esp. on ia64) link data and code symbols differently, +# so use this general approach. +lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'" + +# Transform an extracted symbol line into symbol name and symbol address +lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([[^ ]]*\) $/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/ {\"\2\", (void *) \&\2},/p'" +lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n -e 's/^: \([[^ ]]*\) $/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \(lib[[^ ]]*\)$/ {\"\2\", (void *) \&\2},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/ {\"lib\2\", (void *) \&\2},/p'" + +# Handle CRLF in mingw tool chain +opt_cr= +case $build_os in +mingw*) + opt_cr=`$ECHO 'x\{0,1\}' | tr x '\015'` # option cr in regexp + ;; +esac + +# Try without a prefix underscore, then with it. +for ac_symprfx in "" "_"; do + + # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol. + symxfrm="\\1 $ac_symprfx\\2 \\2" + + # Write the raw and C identifiers. + if test "$lt_cv_nm_interface" = "MS dumpbin"; then + # Fake it for dumpbin and say T for any non-static function + # and D for any global variable. + # Also find C++ and __fastcall symbols from MSVC++, + # which start with @ or ?. + lt_cv_sys_global_symbol_pipe="$AWK ['"\ +" {last_section=section; section=\$ 3};"\ +" /Section length .*#relocs.*(pick any)/{hide[last_section]=1};"\ +" \$ 0!~/External *\|/{next};"\ +" / 0+ UNDEF /{next}; / UNDEF \([^|]\)*()/{next};"\ +" {if(hide[section]) next};"\ +" {f=0}; \$ 0~/\(\).*\|/{f=1}; {printf f ? \"T \" : \"D \"};"\ +" {split(\$ 0, a, /\||\r/); split(a[2], s)};"\ +" s[1]~/^[@?]/{print s[1], s[1]; next};"\ +" s[1]~prfx {split(s[1],t,\"@\"); print t[1], substr(t[1],length(prfx))}"\ +" ' prfx=^$ac_symprfx]" + else + lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[[ ]]\($symcode$symcode*\)[[ ]][[ ]]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'" + fi + + # Check to see that the pipe works correctly. + pipe_works=no + + rm -f conftest* + cat > conftest.$ac_ext <<_LT_EOF +#ifdef __cplusplus +extern "C" { +#endif +char nm_test_var; +void nm_test_func(void); +void nm_test_func(void){} +#ifdef __cplusplus +} +#endif +int main(){nm_test_var='a';nm_test_func();return(0);} +_LT_EOF + + if AC_TRY_EVAL(ac_compile); then + # Now try to grab the symbols. + nlist=conftest.nm + if AC_TRY_EVAL(NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $nlist) && test -s "$nlist"; then + # Try sorting and uniquifying the output. + if sort "$nlist" | uniq > "$nlist"T; then + mv -f "$nlist"T "$nlist" + else + rm -f "$nlist"T + fi + + # Make sure that we snagged all the symbols we need. + if $GREP ' nm_test_var$' "$nlist" >/dev/null; then + if $GREP ' nm_test_func$' "$nlist" >/dev/null; then + cat <<_LT_EOF > conftest.$ac_ext +#ifdef __cplusplus +extern "C" { +#endif + +_LT_EOF + # Now generate the symbol file. + eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | $GREP -v main >> conftest.$ac_ext' + + cat <<_LT_EOF >> conftest.$ac_ext + +/* The mapping between symbol names and symbols. */ +const struct { + const char *name; + void *address; +} +lt__PROGRAM__LTX_preloaded_symbols[[]] = +{ + { "@PROGRAM@", (void *) 0 }, +_LT_EOF + $SED "s/^$symcode$symcode* \(.*\) \(.*\)$/ {\"\2\", (void *) \&\2},/" < "$nlist" | $GREP -v main >> conftest.$ac_ext + cat <<\_LT_EOF >> conftest.$ac_ext + {0, (void *) 0} +}; + +/* This works around a problem in FreeBSD linker */ +#ifdef FREEBSD_WORKAROUND +static const void *lt_preloaded_setup() { + return lt__PROGRAM__LTX_preloaded_symbols; +} +#endif + +#ifdef __cplusplus +} +#endif +_LT_EOF + # Now try linking the two files. + mv conftest.$ac_objext conftstm.$ac_objext + lt_save_LIBS="$LIBS" + lt_save_CFLAGS="$CFLAGS" + LIBS="conftstm.$ac_objext" + CFLAGS="$CFLAGS$_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)" + if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext}; then + pipe_works=yes + fi + LIBS="$lt_save_LIBS" + CFLAGS="$lt_save_CFLAGS" + else + echo "cannot find nm_test_func in $nlist" >&AS_MESSAGE_LOG_FD + fi + else + echo "cannot find nm_test_var in $nlist" >&AS_MESSAGE_LOG_FD + fi + else + echo "cannot run $lt_cv_sys_global_symbol_pipe" >&AS_MESSAGE_LOG_FD + fi + else + echo "$progname: failed program was:" >&AS_MESSAGE_LOG_FD + cat conftest.$ac_ext >&5 + fi + rm -rf conftest* conftst* + + # Do not use the global_symbol_pipe unless it works. + if test "$pipe_works" = yes; then + break + else + lt_cv_sys_global_symbol_pipe= + fi +done +]) +if test -z "$lt_cv_sys_global_symbol_pipe"; then + lt_cv_sys_global_symbol_to_cdecl= +fi +if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then + AC_MSG_RESULT(failed) +else + AC_MSG_RESULT(ok) +fi + +_LT_DECL([global_symbol_pipe], [lt_cv_sys_global_symbol_pipe], [1], + [Take the output of nm and produce a listing of raw symbols and C names]) +_LT_DECL([global_symbol_to_cdecl], [lt_cv_sys_global_symbol_to_cdecl], [1], + [Transform the output of nm in a proper C declaration]) +_LT_DECL([global_symbol_to_c_name_address], + [lt_cv_sys_global_symbol_to_c_name_address], [1], + [Transform the output of nm in a C name address pair]) +_LT_DECL([global_symbol_to_c_name_address_lib_prefix], + [lt_cv_sys_global_symbol_to_c_name_address_lib_prefix], [1], + [Transform the output of nm in a C name address pair when lib prefix is needed]) +]) # _LT_CMD_GLOBAL_SYMBOLS + + +# _LT_COMPILER_PIC([TAGNAME]) +# --------------------------- +m4_defun([_LT_COMPILER_PIC], +[m4_require([_LT_TAG_COMPILER])dnl +_LT_TAGVAR(lt_prog_compiler_wl, $1)= +_LT_TAGVAR(lt_prog_compiler_pic, $1)= +_LT_TAGVAR(lt_prog_compiler_static, $1)= + +AC_MSG_CHECKING([for $compiler option to produce PIC]) +m4_if([$1], [CXX], [ + # C++ specific cases for pic, static, wl, etc. + if test "$GXX" = yes; then + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' + + case $host_os in + aix*) + # All AIX code is PIC. + if test "$host_cpu" = ia64; then + # AIX 5 now supports IA64 processor + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + fi + ;; + + amigaos*) + case $host_cpu in + powerpc) + # see comment about AmigaOS4 .so support + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + ;; + m68k) + # FIXME: we need at least 68020 code to build shared libraries, but + # adding the `-m68020' flag to GCC prevents building anything better, + # like `-m68040'. + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4' + ;; + esac + ;; + + beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) + # PIC is the default for these OSes. + ;; + mingw* | cygwin* | os2* | pw32* | cegcc*) + # This hack is so that the source file can tell whether it is being + # built for inclusion in a dll (and should export symbols for example). + # Although the cygwin gcc ignores -fPIC, still need this for old-style + # (--disable-auto-import) libraries + m4_if([$1], [GCJ], [], + [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) + ;; + darwin* | rhapsody*) + # PIC is the default on this platform + # Common symbols not allowed in MH_DYLIB files + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common' + ;; + *djgpp*) + # DJGPP does not support shared libraries at all + _LT_TAGVAR(lt_prog_compiler_pic, $1)= + ;; + interix[[3-9]]*) + # Interix 3.x gcc -fpic/-fPIC options generate broken code. + # Instead, we relocate shared libraries at runtime. + ;; + sysv4*MP*) + if test -d /usr/nec; then + _LT_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic + fi + ;; + hpux*) + # PIC is the default for 64-bit PA HP-UX, but not for 32-bit + # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag + # sets the default TLS model and affects inlining. + case $host_cpu in + hppa*64*) + ;; + *) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + ;; + esac + ;; + *qnx* | *nto*) + # QNX uses GNU C++, but need to define -shared option too, otherwise + # it will coredump. + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' + ;; + *) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + ;; + esac + else + case $host_os in + aix[[4-9]]*) + # All AIX code is PIC. + if test "$host_cpu" = ia64; then + # AIX 5 now supports IA64 processor + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + else + _LT_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp' + fi + ;; + chorus*) + case $cc_basename in + cxch68*) + # Green Hills C++ Compiler + # _LT_TAGVAR(lt_prog_compiler_static, $1)="--no_auto_instantiation -u __main -u __premain -u _abort -r $COOL_DIR/lib/libOrb.a $MVME_DIR/lib/CC/libC.a $MVME_DIR/lib/classix/libcx.s.a" + ;; + esac + ;; + dgux*) + case $cc_basename in + ec++*) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + ;; + ghcx*) + # Green Hills C++ Compiler + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' + ;; + *) + ;; + esac + ;; + freebsd* | dragonfly*) + # FreeBSD uses GNU C++ + ;; + hpux9* | hpux10* | hpux11*) + case $cc_basename in + CC*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive' + if test "$host_cpu" != ia64; then + _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z' + fi + ;; + aCC*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive' + case $host_cpu in + hppa*64*|ia64*) + # +Z the default + ;; + *) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z' + ;; + esac + ;; + *) + ;; + esac + ;; + interix*) + # This is c89, which is MS Visual C++ (no shared libs) + # Anyone wants to do a port? + ;; + irix5* | irix6* | nonstopux*) + case $cc_basename in + CC*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' + # CC pic flag -KPIC is the default. + ;; + *) + ;; + esac + ;; + linux* | k*bsd*-gnu) + case $cc_basename in + KCC*) + # KAI C++ Compiler + _LT_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + ;; + ecpc* ) + # old Intel C++ for x86_64 which still supported -KPIC. + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' + ;; + icpc* ) + # Intel C++, used to be incompatible with GCC. + # ICC 10 doesn't accept -KPIC any more. + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' + ;; + pgCC* | pgcpp*) + # Portland Group C++ compiler + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + cxx*) + # Compaq C++ + # Make sure the PIC flag is empty. It appears that all Alpha + # Linux and Compaq Tru64 Unix objects are PIC. + _LT_TAGVAR(lt_prog_compiler_pic, $1)= + _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' + ;; + xlc* | xlC*) + # IBM XL 8.0 on PPC + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-qpic' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-qstaticlink' + ;; + *) + case `$CC -V 2>&1 | sed 5q` in + *Sun\ C*) + # Sun C++ 5.9 + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' + ;; + esac + ;; + esac + ;; + lynxos*) + ;; + m88k*) + ;; + mvs*) + case $cc_basename in + cxx*) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-W c,exportall' + ;; + *) + ;; + esac + ;; + netbsd*) + ;; + *qnx* | *nto*) + # QNX uses GNU C++, but need to define -shared option too, otherwise + # it will coredump. + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' + ;; + osf3* | osf4* | osf5*) + case $cc_basename in + KCC*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,' + ;; + RCC*) + # Rational C++ 2.4.1 + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' + ;; + cxx*) + # Digital/Compaq C++ + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + # Make sure the PIC flag is empty. It appears that all Alpha + # Linux and Compaq Tru64 Unix objects are PIC. + _LT_TAGVAR(lt_prog_compiler_pic, $1)= + _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' + ;; + *) + ;; + esac + ;; + psos*) + ;; + solaris*) + case $cc_basename in + CC*) + # Sun C++ 4.2, 5.x and Centerline C++ + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' + ;; + gcx*) + # Green Hills C++ Compiler + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' + ;; + *) + ;; + esac + ;; + sunos4*) + case $cc_basename in + CC*) + # Sun C++ 4.x + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + lcc*) + # Lucid + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' + ;; + *) + ;; + esac + ;; + sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) + case $cc_basename in + CC*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + esac + ;; + tandem*) + case $cc_basename in + NCC*) + # NonStop-UX NCC 3.20 + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + ;; + *) + ;; + esac + ;; + vxworks*) + ;; + *) + _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no + ;; + esac + fi +], +[ + if test "$GCC" = yes; then + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' + + case $host_os in + aix*) + # All AIX code is PIC. + if test "$host_cpu" = ia64; then + # AIX 5 now supports IA64 processor + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + fi + ;; + + amigaos*) + case $host_cpu in + powerpc) + # see comment about AmigaOS4 .so support + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + ;; + m68k) + # FIXME: we need at least 68020 code to build shared libraries, but + # adding the `-m68020' flag to GCC prevents building anything better, + # like `-m68040'. + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4' + ;; + esac + ;; + + beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) + # PIC is the default for these OSes. + ;; + + mingw* | cygwin* | pw32* | os2* | cegcc*) + # This hack is so that the source file can tell whether it is being + # built for inclusion in a dll (and should export symbols for example). + # Although the cygwin gcc ignores -fPIC, still need this for old-style + # (--disable-auto-import) libraries + m4_if([$1], [GCJ], [], + [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) + ;; + + darwin* | rhapsody*) + # PIC is the default on this platform + # Common symbols not allowed in MH_DYLIB files + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common' + ;; + + hpux*) + # PIC is the default for 64-bit PA HP-UX, but not for 32-bit + # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag + # sets the default TLS model and affects inlining. + case $host_cpu in + hppa*64*) + # +Z the default + ;; + *) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + ;; + esac + ;; + + interix[[3-9]]*) + # Interix 3.x gcc -fpic/-fPIC options generate broken code. + # Instead, we relocate shared libraries at runtime. + ;; + + msdosdjgpp*) + # Just because we use GCC doesn't mean we suddenly get shared libraries + # on systems that don't support them. + _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no + enable_shared=no + ;; + + *nto* | *qnx*) + # QNX uses GNU C++, but need to define -shared option too, otherwise + # it will coredump. + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' + ;; + + sysv4*MP*) + if test -d /usr/nec; then + _LT_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic + fi + ;; + + *) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + ;; + esac + else + # PORTME Check for flag to pass linker flags through the system compiler. + case $host_os in + aix*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + if test "$host_cpu" = ia64; then + # AIX 5 now supports IA64 processor + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + else + _LT_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp' + fi + ;; + + mingw* | cygwin* | pw32* | os2* | cegcc*) + # This hack is so that the source file can tell whether it is being + # built for inclusion in a dll (and should export symbols for example). + m4_if([$1], [GCJ], [], + [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) + ;; + + hpux9* | hpux10* | hpux11*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but + # not for PA HP-UX. + case $host_cpu in + hppa*64*|ia64*) + # +Z the default + ;; + *) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z' + ;; + esac + # Is there a better lt_prog_compiler_static that works with the bundled CC? + _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive' + ;; + + irix5* | irix6* | nonstopux*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + # PIC (with -KPIC) is the default. + _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' + ;; + + linux* | k*bsd*-gnu) + case $cc_basename in + # old Intel for x86_64 which still supported -KPIC. + ecc*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' + ;; + # icc used to be incompatible with GCC. + # ICC 10 doesn't accept -KPIC any more. + icc* | ifort*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' + ;; + # Lahey Fortran 8.1. + lf95*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='--shared' + _LT_TAGVAR(lt_prog_compiler_static, $1)='--static' + ;; + pgcc* | pgf77* | pgf90* | pgf95*) + # Portland Group compilers (*not* the Pentium gcc compiler, + # which looks to be a dead project) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + ccc*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + # All Alpha code is PIC. + _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' + ;; + xl*) + # IBM XL C 8.0/Fortran 10.1 on PPC + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-qpic' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-qstaticlink' + ;; + *) + case `$CC -V 2>&1 | sed 5q` in + *Sun\ C*) + # Sun C 5.9 + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + ;; + *Sun\ F*) + # Sun Fortran 8.3 passes all unrecognized flags to the linker + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + _LT_TAGVAR(lt_prog_compiler_wl, $1)='' + ;; + esac + ;; + esac + ;; + + newsos6) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + + *nto* | *qnx*) + # QNX uses GNU C++, but need to define -shared option too, otherwise + # it will coredump. + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' + ;; + + osf3* | osf4* | osf5*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + # All OSF/1 code is PIC. + _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' + ;; + + rdos*) + _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' + ;; + + solaris*) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + case $cc_basename in + f77* | f90* | f95*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ';; + *) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,';; + esac + ;; + + sunos4*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + + sysv4 | sysv4.2uw2* | sysv4.3*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + + sysv4*MP*) + if test -d /usr/nec ;then + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-Kconform_pic' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + fi + ;; + + sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + + unicos*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no + ;; + + uts4*) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + + *) + _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no + ;; + esac + fi +]) +case $host_os in + # For platforms which do not support PIC, -DPIC is meaningless: + *djgpp*) + _LT_TAGVAR(lt_prog_compiler_pic, $1)= + ;; + *) + _LT_TAGVAR(lt_prog_compiler_pic, $1)="$_LT_TAGVAR(lt_prog_compiler_pic, $1)@&t@m4_if([$1],[],[ -DPIC],[m4_if([$1],[CXX],[ -DPIC],[])])" + ;; +esac +AC_MSG_RESULT([$_LT_TAGVAR(lt_prog_compiler_pic, $1)]) +_LT_TAGDECL([wl], [lt_prog_compiler_wl], [1], + [How to pass a linker flag through the compiler]) + +# +# Check to make sure the PIC flag actually works. +# +if test -n "$_LT_TAGVAR(lt_prog_compiler_pic, $1)"; then + _LT_COMPILER_OPTION([if $compiler PIC flag $_LT_TAGVAR(lt_prog_compiler_pic, $1) works], + [_LT_TAGVAR(lt_cv_prog_compiler_pic_works, $1)], + [$_LT_TAGVAR(lt_prog_compiler_pic, $1)@&t@m4_if([$1],[],[ -DPIC],[m4_if([$1],[CXX],[ -DPIC],[])])], [], + [case $_LT_TAGVAR(lt_prog_compiler_pic, $1) in + "" | " "*) ;; + *) _LT_TAGVAR(lt_prog_compiler_pic, $1)=" $_LT_TAGVAR(lt_prog_compiler_pic, $1)" ;; + esac], + [_LT_TAGVAR(lt_prog_compiler_pic, $1)= + _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no]) +fi +_LT_TAGDECL([pic_flag], [lt_prog_compiler_pic], [1], + [Additional compiler flags for building library objects]) + +# +# Check to make sure the static flag actually works. +# +wl=$_LT_TAGVAR(lt_prog_compiler_wl, $1) eval lt_tmp_static_flag=\"$_LT_TAGVAR(lt_prog_compiler_static, $1)\" +_LT_LINKER_OPTION([if $compiler static flag $lt_tmp_static_flag works], + _LT_TAGVAR(lt_cv_prog_compiler_static_works, $1), + $lt_tmp_static_flag, + [], + [_LT_TAGVAR(lt_prog_compiler_static, $1)=]) +_LT_TAGDECL([link_static_flag], [lt_prog_compiler_static], [1], + [Compiler flag to prevent dynamic linking]) +])# _LT_COMPILER_PIC + + +# _LT_LINKER_SHLIBS([TAGNAME]) +# ---------------------------- +# See if the linker supports building shared libraries. +m4_defun([_LT_LINKER_SHLIBS], +[AC_REQUIRE([LT_PATH_LD])dnl +AC_REQUIRE([LT_PATH_NM])dnl +m4_require([_LT_FILEUTILS_DEFAULTS])dnl +m4_require([_LT_DECL_EGREP])dnl +m4_require([_LT_DECL_SED])dnl +m4_require([_LT_CMD_GLOBAL_SYMBOLS])dnl +m4_require([_LT_TAG_COMPILER])dnl +AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries]) +m4_if([$1], [CXX], [ + _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' + case $host_os in + aix[[4-9]]*) + # If we're using GNU nm, then we don't want the "-C" option. + # -C means demangle to AIX nm, but means don't demangle with GNU nm + if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then + _LT_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' + else + _LT_TAGVAR(export_symbols_cmds, $1)='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' + fi + ;; + pw32*) + _LT_TAGVAR(export_symbols_cmds, $1)="$ltdll_cmds" + ;; + cygwin* | mingw* | cegcc*) + _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/;/^.*[[ ]]__nm__/s/^.*[[ ]]__nm__\([[^ ]]*\)[[ ]][[^ ]]*/\1 DATA/;/^I[[ ]]/d;/^[[AITW]][[ ]]/s/.* //'\'' | sort | uniq > $export_symbols' + ;; + *) + _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' + ;; + esac + _LT_TAGVAR(exclude_expsyms, $1)=['_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*'] +], [ + runpath_var= + _LT_TAGVAR(allow_undefined_flag, $1)= + _LT_TAGVAR(always_export_symbols, $1)=no + _LT_TAGVAR(archive_cmds, $1)= + _LT_TAGVAR(archive_expsym_cmds, $1)= + _LT_TAGVAR(compiler_needs_object, $1)=no + _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no + _LT_TAGVAR(export_dynamic_flag_spec, $1)= + _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' + _LT_TAGVAR(hardcode_automatic, $1)=no + _LT_TAGVAR(hardcode_direct, $1)=no + _LT_TAGVAR(hardcode_direct_absolute, $1)=no + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= + _LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)= + _LT_TAGVAR(hardcode_libdir_separator, $1)= + _LT_TAGVAR(hardcode_minus_L, $1)=no + _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported + _LT_TAGVAR(inherit_rpath, $1)=no + _LT_TAGVAR(link_all_deplibs, $1)=unknown + _LT_TAGVAR(module_cmds, $1)= + _LT_TAGVAR(module_expsym_cmds, $1)= + _LT_TAGVAR(old_archive_from_new_cmds, $1)= + _LT_TAGVAR(old_archive_from_expsyms_cmds, $1)= + _LT_TAGVAR(thread_safe_flag_spec, $1)= + _LT_TAGVAR(whole_archive_flag_spec, $1)= + # include_expsyms should be a list of space-separated symbols to be *always* + # included in the symbol list + _LT_TAGVAR(include_expsyms, $1)= + # exclude_expsyms can be an extended regexp of symbols to exclude + # it will be wrapped by ` (' and `)$', so one must not match beginning or + # end of line. Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc', + # as well as any symbol that contains `d'. + _LT_TAGVAR(exclude_expsyms, $1)=['_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*'] + # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out + # platforms (ab)use it in PIC code, but their linkers get confused if + # the symbol is explicitly referenced. Since portable code cannot + # rely on this symbol name, it's probably fine to never include it in + # preloaded symbol tables. + # Exclude shared library initialization/finalization symbols. +dnl Note also adjust exclude_expsyms for C++ above. + extract_expsyms_cmds= + + 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 + + _LT_TAGVAR(ld_shlibs, $1)=yes + if test "$with_gnu_ld" = yes; then + # If archive_cmds runs LD, not CC, wlarc should be empty + wlarc='${wl}' + + # 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. + runpath_var=LD_RUN_PATH + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' + # ancient GNU ld didn't support --whole-archive et. al. + if $LD --help 2>&1 | $GREP 'no-whole-archive' > /dev/null; then + _LT_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' + else + _LT_TAGVAR(whole_archive_flag_spec, $1)= + fi + supports_anon_versioning=no + case `$LD -v 2>&1` in + *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.10.*) ;; # catch versions < 2.11 + *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ... + *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ... + *\ 2.11.*) ;; # other 2.11 versions + *) supports_anon_versioning=yes ;; + esac + + # See if GNU ld supports shared libraries. + case $host_os in + aix[[3-9]]*) + # On AIX/PPC, the GNU linker is very broken + if test "$host_cpu" != ia64; then + _LT_TAGVAR(ld_shlibs, $1)=no + cat <<_LT_EOF 1>&2 + +*** Warning: the GNU linker, at least up to release 2.9.1, is reported +*** to be unable to reliably create shared libraries on AIX. +*** Therefore, libtool is disabling shared libraries support. If you +*** really care for shared libraries, you may want to modify your PATH +*** so that a non-GNU linker is found, and then restart. + +_LT_EOF + fi + ;; + + amigaos*) + case $host_cpu in + powerpc) + # see comment about AmigaOS4 .so support + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='' + ;; + m68k) + _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(hardcode_minus_L, $1)=yes + ;; + esac + ;; + + beos*) + if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + _LT_TAGVAR(allow_undefined_flag, $1)=unsupported + # Joseph Beckenbach says some releases of gcc + # support --undefined. This deserves some investigation. FIXME + _LT_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + + cygwin* | mingw* | pw32* | cegcc*) + # _LT_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless, + # as there is no search path for DLLs. + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(allow_undefined_flag, $1)=unsupported + _LT_TAGVAR(always_export_symbols, $1)=no + _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes + _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/'\'' | $SED -e '\''/^[[AITW]][[ ]]/s/.*[[ ]]//'\'' | sort | uniq > $export_symbols' + + if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' + # If the export-symbols file already is a .def file (1st line + # is EXPORTS), use it as is; otherwise, prepend... + _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then + cp $export_symbols $output_objdir/$soname.def; + else + echo EXPORTS > $output_objdir/$soname.def; + cat $export_symbols >> $output_objdir/$soname.def; + fi~ + $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + + interix[[3-9]]*) + _LT_TAGVAR(hardcode_direct, $1)=no + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' + # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. + # Instead, shared libraries are loaded at an image base (0x10000000 by + # default) and relocated if they conflict, which is a slow very memory + # consuming and fragmenting process. To avoid this, we pick a random, + # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link + # time. Moving up from 0x10000000 also allows more sbrk(2) space. + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' + ;; + + gnu* | linux* | tpf* | k*bsd*-gnu) + tmp_diet=no + if test "$host_os" = linux-dietlibc; then + case $cc_basename in + diet\ *) tmp_diet=yes;; # linux-dietlibc with static linking (!diet-dyn) + esac + fi + if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \ + && test "$tmp_diet" = no + then + tmp_addflag= + tmp_sharedflag='-shared' + case $cc_basename,$host_cpu in + pgcc*) # Portland Group C compiler + _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive' + tmp_addflag=' $pic_flag' + ;; + pgf77* | pgf90* | pgf95*) # Portland Group f77 and f90 compilers + _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive' + tmp_addflag=' $pic_flag -Mnomain' ;; + ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64 + tmp_addflag=' -i_dynamic' ;; + efc*,ia64* | ifort*,ia64*) # Intel Fortran compiler on ia64 + tmp_addflag=' -i_dynamic -nofor_main' ;; + ifc* | ifort*) # Intel Fortran compiler + tmp_addflag=' -nofor_main' ;; + lf95*) # Lahey Fortran 8.1 + _LT_TAGVAR(whole_archive_flag_spec, $1)= + tmp_sharedflag='--shared' ;; + xl[[cC]]*) # IBM XL C 8.0 on PPC (deal with xlf below) + tmp_sharedflag='-qmkshrobj' + tmp_addflag= ;; + esac + case `$CC -V 2>&1 | sed 5q` in + *Sun\ C*) # Sun C 5.9 + _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive' + _LT_TAGVAR(compiler_needs_object, $1)=yes + tmp_sharedflag='-G' ;; + *Sun\ F*) # Sun Fortran 8.3 + tmp_sharedflag='-G' ;; + esac + _LT_TAGVAR(archive_cmds, $1)='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + + if test "x$supports_anon_versioning" = xyes; then + _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~ + cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ + echo "local: *; };" >> $output_objdir/$libname.ver~ + $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' + fi + + case $cc_basename in + xlf*) + # IBM XL Fortran 10.1 on PPC cannot create shared libs itself + _LT_TAGVAR(whole_archive_flag_spec, $1)='--whole-archive$convenience --no-whole-archive' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= + _LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)='-rpath $libdir' + _LT_TAGVAR(archive_cmds, $1)='$LD -shared $libobjs $deplibs $compiler_flags -soname $soname -o $lib' + if test "x$supports_anon_versioning" = xyes; then + _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~ + cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ + echo "local: *; };" >> $output_objdir/$libname.ver~ + $LD -shared $libobjs $deplibs $compiler_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib' + fi + ;; + esac + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + + netbsd*) + if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then + _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' + wlarc= + else + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + fi + ;; + + solaris*) + if $LD -v 2>&1 | $GREP 'BFD 2\.8' > /dev/null; then + _LT_TAGVAR(ld_shlibs, $1)=no + cat <<_LT_EOF 1>&2 + +*** Warning: The releases 2.8.* of the GNU linker cannot reliably +*** create shared libraries on Solaris systems. Therefore, libtool +*** is disabling shared libraries support. We urge you to upgrade GNU +*** binutils to release 2.9.1 or newer. Another option is to modify +*** your PATH or compiler configuration so that the native linker is +*** used, and then restart. + +_LT_EOF + elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + + sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*) + case `$LD -v 2>&1` in + *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.1[[0-5]].*) + _LT_TAGVAR(ld_shlibs, $1)=no + cat <<_LT_EOF 1>&2 + +*** Warning: Releases of the GNU linker prior to 2.16.91.0.3 can not +*** reliably create shared libraries on SCO systems. Therefore, libtool +*** is disabling shared libraries support. We urge you to upgrade GNU +*** binutils to release 2.16.91.0.3 or newer. Another option is to modify +*** your PATH or compiler configuration so that the native linker is +*** used, and then restart. + +_LT_EOF + ;; + *) + # For security reasons, it is highly recommended that you always + # use absolute paths for naming shared libraries, and exclude the + # DT_RUNPATH tag from executables and libraries. But doing so + # requires that you compile everything twice, which is a pain. + if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + esac + ;; + + sunos4*) + _LT_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' + wlarc= + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + *) + if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + esac + + if test "$_LT_TAGVAR(ld_shlibs, $1)" = no; then + runpath_var= + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= + _LT_TAGVAR(export_dynamic_flag_spec, $1)= + _LT_TAGVAR(whole_archive_flag_spec, $1)= + fi + else + # PORTME fill in a description of your system's linker (not GNU ld) + case $host_os in + aix3*) + _LT_TAGVAR(allow_undefined_flag, $1)=unsupported + _LT_TAGVAR(always_export_symbols, $1)=yes + _LT_TAGVAR(archive_expsym_cmds, $1)='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname' + # Note: this linker hardcodes the directories in LIBPATH if there + # are no directories specified by -L. + _LT_TAGVAR(hardcode_minus_L, $1)=yes + if test "$GCC" = yes && test -z "$lt_prog_compiler_static"; then + # Neither direct hardcoding nor static linking is supported with a + # broken collect2. + _LT_TAGVAR(hardcode_direct, $1)=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 + exp_sym_flag='-Bexport' + no_entry_flag="" + else + # If we're using GNU nm, then we don't want the "-C" option. + # -C means demangle to AIX nm, but means don't demangle with GNU nm + if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then + _LT_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' + else + _LT_TAGVAR(export_symbols_cmds, $1)='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' + fi + 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 + + exp_sym_flag='-bexport' + no_entry_flag='-bnoentry' + fi + + # When large executables or shared objects are built, AIX ld can + # have problems creating the table of contents. If linking a library + # or program results in "error TOC overflow" add -mminimal-toc to + # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not + # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. + + _LT_TAGVAR(archive_cmds, $1)='' + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_direct_absolute, $1)=yes + _LT_TAGVAR(hardcode_libdir_separator, $1)=':' + _LT_TAGVAR(link_all_deplibs, $1)=yes + _LT_TAGVAR(file_list_spec, $1)='${wl}-f,' + + if test "$GCC" = yes; then + case $host_os in aix4.[[012]]|aix4.[[012]].*) + # We only want to do this on AIX 4.2 and lower, the check + # below for broken collect2 doesn't work under 4.3+ + 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 + _LT_TAGVAR(hardcode_direct, $1)=unsupported + # It fails to find uninstalled libraries when the uninstalled + # path is not listed in the libpath. Setting hardcode_minus_L + # to unsupported forces relinking + _LT_TAGVAR(hardcode_minus_L, $1)=yes + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)= + fi + ;; + esac + shared_flag='-shared' + if test "$aix_use_runtimelinking" = yes; then + shared_flag="$shared_flag "'${wl}-G' + fi + else + # not using gcc + if test "$host_cpu" = ia64; then + # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release + # chokes on -Wl,-G. The following line is correct: + shared_flag='-G' + else + if test "$aix_use_runtimelinking" = yes; then + shared_flag='${wl}-G' + else + shared_flag='${wl}-bM:SRE' + fi + fi + fi + + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-bexpall' + # It seems that -bexpall does not export symbols beginning with + # underscore (_), so it is better to generate a list of symbols to export. + _LT_TAGVAR(always_export_symbols, $1)=yes + if test "$aix_use_runtimelinking" = yes; then + # Warning - without using the other runtime loading flags (-brtl), + # -berok will link without error, but may produce a broken library. + _LT_TAGVAR(allow_undefined_flag, $1)='-berok' + # Determine the default libpath from the value encoded in an + # empty executable. + _LT_SYS_MODULE_PATH_AIX + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then $ECHO "X${wl}${allow_undefined_flag}" | $Xsed; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" + else + if test "$host_cpu" = ia64; then + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $libdir:/usr/lib:/lib' + _LT_TAGVAR(allow_undefined_flag, $1)="-z nodefs" + _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" + else + # Determine the default libpath from the value encoded in an + # empty executable. + _LT_SYS_MODULE_PATH_AIX + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" + # Warning - without using the other run time loading flags, + # -berok will link without error, but may produce a broken library. + _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-bernotok' + _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-berok' + # Exported symbols can be pulled into shared objects from archives + _LT_TAGVAR(whole_archive_flag_spec, $1)='$convenience' + _LT_TAGVAR(archive_cmds_need_lc, $1)=yes + # This is similar to how AIX traditionally builds its shared libraries. + _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' + fi + fi + ;; + + amigaos*) + case $host_cpu in + powerpc) + # see comment about AmigaOS4 .so support + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='' + ;; + m68k) + _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(hardcode_minus_L, $1)=yes + ;; + esac + ;; + + bsdi[[45]]*) + _LT_TAGVAR(export_dynamic_flag_spec, $1)=-rdynamic + ;; + + 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. + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' ' + _LT_TAGVAR(allow_undefined_flag, $1)=unsupported + # Tell ltmain to make .lib files, not .a files. + libext=lib + # Tell ltmain to make .dll files, not .so files. + shrext_cmds=".dll" + # FIXME: Setting linknames here is a bad hack. + _LT_TAGVAR(archive_cmds, $1)='$CC -o $lib $libobjs $compiler_flags `$ECHO "X$deplibs" | $Xsed -e '\''s/ -lc$//'\''` -link -dll~linknames=' + # The linker will automatically build a .lib file if we build a DLL. + _LT_TAGVAR(old_archive_from_new_cmds, $1)='true' + # FIXME: Should let the user specify the lib program. + _LT_TAGVAR(old_archive_cmds, $1)='lib -OUT:$oldlib$oldobjs$old_deplibs' + _LT_TAGVAR(fix_srcfile_path, $1)='`cygpath -w "$srcfile"`' + _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes + ;; + + darwin* | rhapsody*) + _LT_DARWIN_LINKER_FEATURES($1) + ;; + + dgux*) + _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + freebsd1*) + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + + # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor + # support. Future versions do this automatically, but an explicit c++rt0.o + # does not break anything, and helps significantly (at the cost of a little + # extra space). + freebsd2.2*) + _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + # Unfortunately, older versions of FreeBSD 2 do not have this feature. + freebsd2*) + _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_minus_L, $1)=yes + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + # FreeBSD 3 and greater uses gcc -shared to do shared libraries. + freebsd* | dragonfly*) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + hpux9*) + if test "$GCC" = yes; then + _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' + else + _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' + fi + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + _LT_TAGVAR(hardcode_direct, $1)=yes + + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + _LT_TAGVAR(hardcode_minus_L, $1)=yes + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' + ;; + + hpux10*) + if test "$GCC" = yes -a "$with_gnu_ld" = no; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' + else + _LT_TAGVAR(archive_cmds, $1)='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' + fi + if test "$with_gnu_ld" = no; then + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' + _LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)='+b $libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_direct_absolute, $1)=yes + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + _LT_TAGVAR(hardcode_minus_L, $1)=yes + fi + ;; + + hpux11*) + if test "$GCC" = yes -a "$with_gnu_ld" = no; then + case $host_cpu in + hppa*64*) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + ia64*) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' + ;; + *) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' + ;; + esac + else + case $host_cpu in + hppa*64*) + _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + ia64*) + _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' + ;; + *) + _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' + ;; + esac + fi + if test "$with_gnu_ld" = no; then + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + + case $host_cpu in + hppa*64*|ia64*) + _LT_TAGVAR(hardcode_direct, $1)=no + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + *) + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_direct_absolute, $1)=yes + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' + + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + _LT_TAGVAR(hardcode_minus_L, $1)=yes + ;; + esac + fi + ;; + + irix5* | irix6* | nonstopux*) + if test "$GCC" = yes; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + # Try to use the -exported_symbol ld option, if it does not + # work, assume that -exports_file does not work either and + # implicitly export all symbols. + save_LDFLAGS="$LDFLAGS" + LDFLAGS="$LDFLAGS -shared ${wl}-exported_symbol ${wl}foo ${wl}-update_registry ${wl}/dev/null" + AC_LINK_IFELSE(int foo(void) {}, + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib' + ) + LDFLAGS="$save_LDFLAGS" + else + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -exports_file $export_symbols -o $lib' + fi + _LT_TAGVAR(archive_cmds_need_lc, $1)='no' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + _LT_TAGVAR(inherit_rpath, $1)=yes + _LT_TAGVAR(link_all_deplibs, $1)=yes + ;; + + netbsd*) + if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then + _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out + else + _LT_TAGVAR(archive_cmds, $1)='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF + fi + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + newsos6) + _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + *nto* | *qnx*) + ;; + + openbsd*) + if test -f /usr/libexec/ld.so; then + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + _LT_TAGVAR(hardcode_direct_absolute, $1)=yes + if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' + else + case $host_os in + openbsd[[01]].* | openbsd2.[[0-7]] | openbsd2.[[0-7]].*) + _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' + ;; + *) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' + ;; + esac + fi + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + + os2*) + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(hardcode_minus_L, $1)=yes + _LT_TAGVAR(allow_undefined_flag, $1)=unsupported + _LT_TAGVAR(archive_cmds, $1)='$ECHO "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~$ECHO DATA >> $output_objdir/$libname.def~$ECHO " SINGLE NONSHARED" >> $output_objdir/$libname.def~$ECHO EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def' + _LT_TAGVAR(old_archive_from_new_cmds, $1)='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def' + ;; + + osf3*) + if test "$GCC" = yes; then + _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + else + _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib' + fi + _LT_TAGVAR(archive_cmds_need_lc, $1)='no' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + ;; + + osf4* | osf5*) # as osf3* with the addition of -msym flag + if test "$GCC" = yes; then + _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + else + _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; printf "%s\\n" "-hidden">> $lib.exp~ + $CC -shared${allow_undefined_flag} ${wl}-input ${wl}$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib~$RM $lib.exp' + + # Both c and cxx compiler support -rpath directly + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' + fi + _LT_TAGVAR(archive_cmds_need_lc, $1)='no' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + ;; + + solaris*) + _LT_TAGVAR(no_undefined_flag, $1)=' -z defs' + if test "$GCC" = yes; then + wlarc='${wl}' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-z ${wl}text ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $CC -shared ${wl}-z ${wl}text ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' + else + case `$CC -V 2>&1` in + *"Compilers 5.0"*) + wlarc='' + _LT_TAGVAR(archive_cmds, $1)='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$RM $lib.exp' + ;; + *) + wlarc='${wl}' + _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $CC -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' + ;; + esac + fi + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + case $host_os in + solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; + *) + # The compiler driver will combine and reorder linker options, + # but understands `-z linker_flag'. GCC discards it without `$wl', + # but is careful enough not to reorder. + # Supported since Solaris 2.6 (maybe 2.5.1?) + if test "$GCC" = yes; then + _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' + else + _LT_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract' + fi + ;; + esac + _LT_TAGVAR(link_all_deplibs, $1)=yes + ;; + + sunos4*) + if test "x$host_vendor" = xsequent; then + # Use $CC to link under sequent, because it throws in some extra .o + # files that make .init and .fini sections work. + _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags' + else + _LT_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' + fi + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_minus_L, $1)=yes + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + sysv4) + case $host_vendor in + sni) + _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_TAGVAR(hardcode_direct, $1)=yes # is this really true??? + ;; + siemens) + ## LD is ld it makes a PLAMLIB + ## CC just makes a GrossModule. + _LT_TAGVAR(archive_cmds, $1)='$LD -G -o $lib $libobjs $deplibs $linker_flags' + _LT_TAGVAR(reload_cmds, $1)='$CC -r -o $output$reload_objs' + _LT_TAGVAR(hardcode_direct, $1)=no + ;; + motorola) + _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_TAGVAR(hardcode_direct, $1)=no #Motorola manual says yes, but my tests say they lie + ;; + esac + runpath_var='LD_RUN_PATH' + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + sysv4.3*) + _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + _LT_TAGVAR(export_dynamic_flag_spec, $1)='-Bexport' + ;; + + sysv4*MP*) + if test -d /usr/nec; then + _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + runpath_var=LD_RUN_PATH + hardcode_runpath_var=yes + _LT_TAGVAR(ld_shlibs, $1)=yes + fi + ;; + + sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7* | sco3.2v5.0.[[024]]*) + _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text' + _LT_TAGVAR(archive_cmds_need_lc, $1)=no + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + runpath_var='LD_RUN_PATH' + + if test "$GCC" = yes; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + else + _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + fi + ;; + + sysv5* | sco3.2v5* | sco5v6*) + # Note: We can NOT use -z defs as we might desire, because we do not + # link with -lc, and that would cause any symbols used from libc to + # always be unresolved, which means just about no library would + # ever link correctly. If we're not using GNU ld we use -z text + # though, which does catch some bad symbols but isn't as heavy-handed + # as -z defs. + _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text' + _LT_TAGVAR(allow_undefined_flag, $1)='${wl}-z,nodefs' + _LT_TAGVAR(archive_cmds_need_lc, $1)=no + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R,$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=':' + _LT_TAGVAR(link_all_deplibs, $1)=yes + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Bexport' + runpath_var='LD_RUN_PATH' + + if test "$GCC" = yes; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + else + _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + fi + ;; + + uts4*) + _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + *) + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + esac + + if test x$host_vendor = xsni; then + case $host in + sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Blargedynsym' + ;; + esac + fi + fi +]) +AC_MSG_RESULT([$_LT_TAGVAR(ld_shlibs, $1)]) +test "$_LT_TAGVAR(ld_shlibs, $1)" = no && can_build_shared=no + +_LT_TAGVAR(with_gnu_ld, $1)=$with_gnu_ld + +_LT_DECL([], [libext], [0], [Old archive suffix (normally "a")])dnl +_LT_DECL([], [shrext_cmds], [1], [Shared library suffix (normally ".so")])dnl +_LT_DECL([], [extract_expsyms_cmds], [2], + [The commands to extract the exported symbol list from a shared archive]) + +# +# Do we need to explicitly link libc? +# +case "x$_LT_TAGVAR(archive_cmds_need_lc, $1)" in +x|xyes) + # Assume -lc should be added + _LT_TAGVAR(archive_cmds_need_lc, $1)=yes + + if test "$enable_shared" = yes && test "$GCC" = yes; then + case $_LT_TAGVAR(archive_cmds, $1) in + *'~'*) + # FIXME: we may have to deal with multi-command sequences. + ;; + '$CC '*) + # Test whether the compiler implicitly links with -lc since on some + # systems, -lgcc has to come before -lc. If gcc already passes -lc + # to ld, don't add -lc before -lgcc. + AC_MSG_CHECKING([whether -lc should be explicitly linked in]) + $RM conftest* + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + + if AC_TRY_EVAL(ac_compile) 2>conftest.err; then + soname=conftest + lib=conftest + libobjs=conftest.$ac_objext + deplibs= + wl=$_LT_TAGVAR(lt_prog_compiler_wl, $1) + pic_flag=$_LT_TAGVAR(lt_prog_compiler_pic, $1) + compiler_flags=-v + linker_flags=-v + verstring= + output_objdir=. + libname=conftest + lt_save_allow_undefined_flag=$_LT_TAGVAR(allow_undefined_flag, $1) + _LT_TAGVAR(allow_undefined_flag, $1)= + if AC_TRY_EVAL(_LT_TAGVAR(archive_cmds, $1) 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) + then + _LT_TAGVAR(archive_cmds_need_lc, $1)=no + else + _LT_TAGVAR(archive_cmds_need_lc, $1)=yes + fi + _LT_TAGVAR(allow_undefined_flag, $1)=$lt_save_allow_undefined_flag + else + cat conftest.err 1>&5 + fi + $RM conftest* + AC_MSG_RESULT([$_LT_TAGVAR(archive_cmds_need_lc, $1)]) + ;; + esac + fi + ;; +esac + +_LT_TAGDECL([build_libtool_need_lc], [archive_cmds_need_lc], [0], + [Whether or not to add -lc for building shared libraries]) +_LT_TAGDECL([allow_libtool_libs_with_static_runtimes], + [enable_shared_with_static_runtimes], [0], + [Whether or not to disallow shared libs when runtime libs are static]) +_LT_TAGDECL([], [export_dynamic_flag_spec], [1], + [Compiler flag to allow reflexive dlopens]) +_LT_TAGDECL([], [whole_archive_flag_spec], [1], + [Compiler flag to generate shared objects directly from archives]) +_LT_TAGDECL([], [compiler_needs_object], [1], + [Whether the compiler copes with passing no objects directly]) +_LT_TAGDECL([], [old_archive_from_new_cmds], [2], + [Create an old-style archive from a shared archive]) +_LT_TAGDECL([], [old_archive_from_expsyms_cmds], [2], + [Create a temporary old-style archive to link instead of a shared archive]) +_LT_TAGDECL([], [archive_cmds], [2], [Commands used to build a shared archive]) +_LT_TAGDECL([], [archive_expsym_cmds], [2]) +_LT_TAGDECL([], [module_cmds], [2], + [Commands used to build a loadable module if different from building + a shared archive.]) +_LT_TAGDECL([], [module_expsym_cmds], [2]) +_LT_TAGDECL([], [with_gnu_ld], [1], + [Whether we are building with GNU ld or not]) +_LT_TAGDECL([], [allow_undefined_flag], [1], + [Flag that allows shared libraries with undefined symbols to be built]) +_LT_TAGDECL([], [no_undefined_flag], [1], + [Flag that enforces no undefined symbols]) +_LT_TAGDECL([], [hardcode_libdir_flag_spec], [1], + [Flag to hardcode $libdir into a binary during linking. + This must work even if $libdir does not exist]) +_LT_TAGDECL([], [hardcode_libdir_flag_spec_ld], [1], + [[If ld is used when linking, flag to hardcode $libdir into a binary + during linking. This must work even if $libdir does not exist]]) +_LT_TAGDECL([], [hardcode_libdir_separator], [1], + [Whether we need a single "-rpath" flag with a separated argument]) +_LT_TAGDECL([], [hardcode_direct], [0], + [Set to "yes" if using DIR/libNAME${shared_ext} during linking hardcodes + DIR into the resulting binary]) +_LT_TAGDECL([], [hardcode_direct_absolute], [0], + [Set to "yes" if using DIR/libNAME${shared_ext} during linking hardcodes + DIR into the resulting binary and the resulting library dependency is + "absolute", i.e impossible to change by setting ${shlibpath_var} if the + library is relocated]) +_LT_TAGDECL([], [hardcode_minus_L], [0], + [Set to "yes" if using the -LDIR flag during linking hardcodes DIR + into the resulting binary]) +_LT_TAGDECL([], [hardcode_shlibpath_var], [0], + [Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR + into the resulting binary]) +_LT_TAGDECL([], [hardcode_automatic], [0], + [Set to "yes" if building a shared library automatically hardcodes DIR + into the library and all subsequent libraries and executables linked + against it]) +_LT_TAGDECL([], [inherit_rpath], [0], + [Set to yes if linker adds runtime paths of dependent libraries + to runtime path list]) +_LT_TAGDECL([], [link_all_deplibs], [0], + [Whether libtool must link a program against all its dependency libraries]) +_LT_TAGDECL([], [fix_srcfile_path], [1], + [Fix the shell variable $srcfile for the compiler]) +_LT_TAGDECL([], [always_export_symbols], [0], + [Set to "yes" if exported symbols are required]) +_LT_TAGDECL([], [export_symbols_cmds], [2], + [The commands to list exported symbols]) +_LT_TAGDECL([], [exclude_expsyms], [1], + [Symbols that should not be listed in the preloaded symbols]) +_LT_TAGDECL([], [include_expsyms], [1], + [Symbols that must always be exported]) +_LT_TAGDECL([], [prelink_cmds], [2], + [Commands necessary for linking programs (against libraries) with templates]) +_LT_TAGDECL([], [file_list_spec], [1], + [Specify filename containing input files]) +dnl FIXME: Not yet implemented +dnl _LT_TAGDECL([], [thread_safe_flag_spec], [1], +dnl [Compiler flag to generate thread safe objects]) +])# _LT_LINKER_SHLIBS + + +# _LT_LANG_C_CONFIG([TAG]) +# ------------------------ +# Ensure that the configuration variables for a C compiler are suitably +# defined. These variables are subsequently used by _LT_CONFIG to write +# the compiler configuration to `libtool'. +m4_defun([_LT_LANG_C_CONFIG], +[m4_require([_LT_DECL_EGREP])dnl +lt_save_CC="$CC" +AC_LANG_PUSH(C) + +# Source file extension for C test sources. +ac_ext=c + +# Object file extension for compiled C test sources. +objext=o +_LT_TAGVAR(objext, $1)=$objext + +# Code to be used in simple compile tests +lt_simple_compile_test_code="int some_variable = 0;" + +# Code to be used in simple link tests +lt_simple_link_test_code='int main(){return(0);}' + +_LT_TAG_COMPILER +# Save the default compiler, since it gets overwritten when the other +# tags are being tested, and _LT_TAGVAR(compiler, []) is a NOP. +compiler_DEFAULT=$CC + +# save warnings/boilerplate of simple test code +_LT_COMPILER_BOILERPLATE +_LT_LINKER_BOILERPLATE + +## CAVEAT EMPTOR: +## There is no encapsulation within the following macros, do not change +## the running order or otherwise move them around unless you know exactly +## what you are doing... +if test -n "$compiler"; then + _LT_COMPILER_NO_RTTI($1) + _LT_COMPILER_PIC($1) + _LT_COMPILER_C_O($1) + _LT_COMPILER_FILE_LOCKS($1) + _LT_LINKER_SHLIBS($1) + _LT_SYS_DYNAMIC_LINKER($1) + _LT_LINKER_HARDCODE_LIBPATH($1) + LT_SYS_DLOPEN_SELF + _LT_CMD_STRIPLIB + + # Report which library types will actually be built + AC_MSG_CHECKING([if libtool supports shared libraries]) + AC_MSG_RESULT([$can_build_shared]) + + AC_MSG_CHECKING([whether to build shared libraries]) + test "$can_build_shared" = "no" && enable_shared=no + + # On AIX, shared libraries and static libraries use the same namespace, and + # are all built from PIC. + case $host_os in + aix3*) + test "$enable_shared" = yes && enable_static=no + if test -n "$RANLIB"; then + archive_cmds="$archive_cmds~\$RANLIB \$lib" + postinstall_cmds='$RANLIB $lib' + fi + ;; + + aix[[4-9]]*) + if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then + test "$enable_shared" = yes && enable_static=no + fi + ;; + esac + AC_MSG_RESULT([$enable_shared]) + + AC_MSG_CHECKING([whether to build static libraries]) + # Make sure either enable_shared or enable_static is yes. + test "$enable_shared" = yes || enable_static=yes + AC_MSG_RESULT([$enable_static]) + + _LT_CONFIG($1) +fi +AC_LANG_POP +CC="$lt_save_CC" +])# _LT_LANG_C_CONFIG + + +# _LT_PROG_CXX +# ------------ +# Since AC_PROG_CXX is broken, in that it returns g++ if there is no c++ +# compiler, we have our own version here. +m4_defun([_LT_PROG_CXX], +[ +pushdef([AC_MSG_ERROR], [_lt_caught_CXX_error=yes]) +AC_PROG_CXX +if test -n "$CXX" && ( test "X$CXX" != "Xno" && + ( (test "X$CXX" = "Xg++" && `g++ -v >/dev/null 2>&1` ) || + (test "X$CXX" != "Xg++"))) ; then + AC_PROG_CXXCPP +else + _lt_caught_CXX_error=yes +fi +popdef([AC_MSG_ERROR]) +])# _LT_PROG_CXX + +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([_LT_PROG_CXX], []) + + +# _LT_LANG_CXX_CONFIG([TAG]) +# -------------------------- +# Ensure that the configuration variables for a C++ compiler are suitably +# defined. These variables are subsequently used by _LT_CONFIG to write +# the compiler configuration to `libtool'. +m4_defun([_LT_LANG_CXX_CONFIG], +[AC_REQUIRE([_LT_PROG_CXX])dnl +m4_require([_LT_FILEUTILS_DEFAULTS])dnl +m4_require([_LT_DECL_EGREP])dnl + +AC_LANG_PUSH(C++) +_LT_TAGVAR(archive_cmds_need_lc, $1)=no +_LT_TAGVAR(allow_undefined_flag, $1)= +_LT_TAGVAR(always_export_symbols, $1)=no +_LT_TAGVAR(archive_expsym_cmds, $1)= +_LT_TAGVAR(compiler_needs_object, $1)=no +_LT_TAGVAR(export_dynamic_flag_spec, $1)= +_LT_TAGVAR(hardcode_direct, $1)=no +_LT_TAGVAR(hardcode_direct_absolute, $1)=no +_LT_TAGVAR(hardcode_libdir_flag_spec, $1)= +_LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)= +_LT_TAGVAR(hardcode_libdir_separator, $1)= +_LT_TAGVAR(hardcode_minus_L, $1)=no +_LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported +_LT_TAGVAR(hardcode_automatic, $1)=no +_LT_TAGVAR(inherit_rpath, $1)=no +_LT_TAGVAR(module_cmds, $1)= +_LT_TAGVAR(module_expsym_cmds, $1)= +_LT_TAGVAR(link_all_deplibs, $1)=unknown +_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds +_LT_TAGVAR(no_undefined_flag, $1)= +_LT_TAGVAR(whole_archive_flag_spec, $1)= +_LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no + +# Source file extension for C++ test sources. +ac_ext=cpp + +# Object file extension for compiled C++ test sources. +objext=o +_LT_TAGVAR(objext, $1)=$objext + +# No sense in running all these tests if we already determined that +# the CXX compiler isn't working. Some variables (like enable_shared) +# are currently assumed to apply to all compilers on this platform, +# and will be corrupted by setting them based on a non-working compiler. +if test "$_lt_caught_CXX_error" != yes; then + # Code to be used in simple compile tests + lt_simple_compile_test_code="int some_variable = 0;" + + # Code to be used in simple link tests + lt_simple_link_test_code='int main(int, char *[[]]) { return(0); }' + + # ltmain only uses $CC for tagged configurations so make sure $CC is set. + _LT_TAG_COMPILER + + # save warnings/boilerplate of simple test code + _LT_COMPILER_BOILERPLATE + _LT_LINKER_BOILERPLATE + + # Allow CC to be a program name with arguments. + lt_save_CC=$CC + lt_save_LD=$LD + lt_save_GCC=$GCC + GCC=$GXX + lt_save_with_gnu_ld=$with_gnu_ld + lt_save_path_LD=$lt_cv_path_LD + if test -n "${lt_cv_prog_gnu_ldcxx+set}"; then + lt_cv_prog_gnu_ld=$lt_cv_prog_gnu_ldcxx + else + $as_unset lt_cv_prog_gnu_ld + fi + if test -n "${lt_cv_path_LDCXX+set}"; then + lt_cv_path_LD=$lt_cv_path_LDCXX + else + $as_unset lt_cv_path_LD + fi + test -z "${LDCXX+set}" || LD=$LDCXX + CC=${CXX-"c++"} + compiler=$CC + _LT_TAGVAR(compiler, $1)=$CC + _LT_CC_BASENAME([$compiler]) + + if test -n "$compiler"; then + # We don't want -fno-exception when compiling C++ code, so set the + # no_builtin_flag separately + if test "$GXX" = yes; then + _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin' + else + _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)= + fi + + if test "$GXX" = yes; then + # Set up default GNU C++ configuration + + LT_PATH_LD + + # Check if GNU C++ uses GNU ld as the underlying linker, since the + # archiving commands below assume that GNU ld is being used. + if test "$with_gnu_ld" = yes; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' + + # If archive_cmds runs LD, not CC, wlarc should be empty + # XXX I think wlarc can be eliminated in ltcf-cxx, but I need to + # investigate it a little bit more. (MM) + wlarc='${wl}' + + # ancient GNU ld didn't support --whole-archive et. al. + if eval "`$CC -print-prog-name=ld` --help 2>&1" | + $GREP 'no-whole-archive' > /dev/null; then + _LT_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' + else + _LT_TAGVAR(whole_archive_flag_spec, $1)= + fi + else + with_gnu_ld=no + wlarc= + + # A generic and very simple default shared library creation + # command for GNU C++ for the case where it uses the native + # linker, instead of GNU ld. If possible, this setting should + # overridden to take advantage of the native linker features on + # the platform it is being used on. + _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' + fi + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "\-L"' + + else + GXX=no + with_gnu_ld=no + wlarc= + fi + + # PORTME: fill in a description of your system's C++ link characteristics + AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries]) + _LT_TAGVAR(ld_shlibs, $1)=yes + case $host_os in + aix3*) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + 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 + exp_sym_flag='-Bexport' + no_entry_flag="" + 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 + case $ld_flag in + *-brtl*) + aix_use_runtimelinking=yes + break + ;; + esac + done + ;; + esac + + exp_sym_flag='-bexport' + no_entry_flag='-bnoentry' + fi + + # When large executables or shared objects are built, AIX ld can + # have problems creating the table of contents. If linking a library + # or program results in "error TOC overflow" add -mminimal-toc to + # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not + # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. + + _LT_TAGVAR(archive_cmds, $1)='' + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_direct_absolute, $1)=yes + _LT_TAGVAR(hardcode_libdir_separator, $1)=':' + _LT_TAGVAR(link_all_deplibs, $1)=yes + _LT_TAGVAR(file_list_spec, $1)='${wl}-f,' + + if test "$GXX" = yes; then + case $host_os in aix4.[[012]]|aix4.[[012]].*) + # We only want to do this on AIX 4.2 and lower, the check + # below for broken collect2 doesn't work under 4.3+ + 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 + _LT_TAGVAR(hardcode_direct, $1)=unsupported + # It fails to find uninstalled libraries when the uninstalled + # path is not listed in the libpath. Setting hardcode_minus_L + # to unsupported forces relinking + _LT_TAGVAR(hardcode_minus_L, $1)=yes + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)= + fi + esac + shared_flag='-shared' + if test "$aix_use_runtimelinking" = yes; then + shared_flag="$shared_flag "'${wl}-G' + fi + else + # not using gcc + if test "$host_cpu" = ia64; then + # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release + # chokes on -Wl,-G. The following line is correct: + shared_flag='-G' + else + if test "$aix_use_runtimelinking" = yes; then + shared_flag='${wl}-G' + else + shared_flag='${wl}-bM:SRE' + fi + fi + fi + + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-bexpall' + # It seems that -bexpall does not export symbols beginning with + # underscore (_), so it is better to generate a list of symbols to + # export. + _LT_TAGVAR(always_export_symbols, $1)=yes + if test "$aix_use_runtimelinking" = yes; then + # Warning - without using the other runtime loading flags (-brtl), + # -berok will link without error, but may produce a broken library. + _LT_TAGVAR(allow_undefined_flag, $1)='-berok' + # Determine the default libpath from the value encoded in an empty + # executable. + _LT_SYS_MODULE_PATH_AIX + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" + + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then $ECHO "X${wl}${allow_undefined_flag}" | $Xsed; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" + else + if test "$host_cpu" = ia64; then + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $libdir:/usr/lib:/lib' + _LT_TAGVAR(allow_undefined_flag, $1)="-z nodefs" + _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" + else + # Determine the default libpath from the value encoded in an + # empty executable. + _LT_SYS_MODULE_PATH_AIX + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" + # Warning - without using the other run time loading flags, + # -berok will link without error, but may produce a broken library. + _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-bernotok' + _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-berok' + # Exported symbols can be pulled into shared objects from archives + _LT_TAGVAR(whole_archive_flag_spec, $1)='$convenience' + _LT_TAGVAR(archive_cmds_need_lc, $1)=yes + # This is similar to how AIX traditionally builds its shared + # libraries. + _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' + fi + fi + ;; + + beos*) + if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + _LT_TAGVAR(allow_undefined_flag, $1)=unsupported + # Joseph Beckenbach says some releases of gcc + # support --undefined. This deserves some investigation. FIXME + _LT_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + + chorus*) + case $cc_basename in + *) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + esac + ;; + + cygwin* | mingw* | pw32* | cegcc*) + # _LT_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless, + # as there is no search path for DLLs. + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(allow_undefined_flag, $1)=unsupported + _LT_TAGVAR(always_export_symbols, $1)=no + _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes + + if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' + # If the export-symbols file already is a .def file (1st line + # is EXPORTS), use it as is; otherwise, prepend... + _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then + cp $export_symbols $output_objdir/$soname.def; + else + echo EXPORTS > $output_objdir/$soname.def; + cat $export_symbols >> $output_objdir/$soname.def; + fi~ + $CC -shared -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + darwin* | rhapsody*) + _LT_DARWIN_LINKER_FEATURES($1) + ;; + + dgux*) + case $cc_basename in + ec++*) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + ghcx*) + # Green Hills C++ Compiler + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + *) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + esac + ;; + + freebsd[[12]]*) + # C++ shared libraries reported to be fairly broken before + # switch to ELF + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + + freebsd-elf*) + _LT_TAGVAR(archive_cmds_need_lc, $1)=no + ;; + + freebsd* | dragonfly*) + # FreeBSD 3 and later use GNU C++ and GNU ld with standard ELF + # conventions + _LT_TAGVAR(ld_shlibs, $1)=yes + ;; + + gnu*) + ;; + + hpux9*) + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH, + # but as the default + # location of the library. + + case $cc_basename in + CC*) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + aCC*) + _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -b ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $EGREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed' + ;; + *) + if test "$GXX" = yes; then + _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared -nostdlib -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' + else + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + esac + ;; + + hpux10*|hpux11*) + if test $with_gnu_ld = no; then + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + + case $host_cpu in + hppa*64*|ia64*) + ;; + *) + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' + ;; + esac + fi + case $host_cpu in + hppa*64*|ia64*) + _LT_TAGVAR(hardcode_direct, $1)=no + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + *) + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_direct_absolute, $1)=yes + _LT_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH, + # but as the default + # location of the library. + ;; + esac + + case $cc_basename in + CC*) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + aCC*) + case $host_cpu in + hppa*64*) + _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + ia64*) + _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + *) + _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + esac + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $GREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed' + ;; + *) + if test "$GXX" = yes; then + if test $with_gnu_ld = no; then + case $host_cpu in + hppa*64*) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + ia64*) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + *) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + esac + fi + else + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + esac + ;; + + interix[[3-9]]*) + _LT_TAGVAR(hardcode_direct, $1)=no + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' + # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. + # Instead, shared libraries are loaded at an image base (0x10000000 by + # default) and relocated if they conflict, which is a slow very memory + # consuming and fragmenting process. To avoid this, we pick a random, + # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link + # time. Moving up from 0x10000000 also allows more sbrk(2) space. + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' + ;; + irix5* | irix6*) + case $cc_basename in + CC*) + # SGI C++ + _LT_TAGVAR(archive_cmds, $1)='$CC -shared -all -multigot $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib' + + # Archives containing C++ object files must be created using + # "CC -ar", where "CC" is the IRIX C++ compiler. This is + # necessary to make sure instantiated templates are included + # in the archive. + _LT_TAGVAR(old_archive_cmds, $1)='$CC -ar -WR,-u -o $oldlib $oldobjs' + ;; + *) + if test "$GXX" = yes; then + if test "$with_gnu_ld" = no; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + else + _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` -o $lib' + fi + fi + _LT_TAGVAR(link_all_deplibs, $1)=yes + ;; + esac + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + _LT_TAGVAR(inherit_rpath, $1)=yes + ;; + + linux* | k*bsd*-gnu) + case $cc_basename in + KCC*) + # Kuck and Associates, Inc. (KAI) C++ Compiler + + # KCC will only create a shared library if the output file + # ends with ".so" (or ".sl" for HP-UX), so rename the library + # to its proper name (with version) after linking. + _LT_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib ${wl}-retain-symbols-file,$export_symbols; mv \$templib $lib' + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`$CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 | $GREP "ld"`; rm -f libconftest$shared_ext; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed' + + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' + + # Archives containing C++ object files must be created using + # "CC -Bstatic", where "CC" is the KAI C++ compiler. + _LT_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs' + ;; + icpc* | ecpc* ) + # Intel C++ + with_gnu_ld=yes + # version 8.0 and above of icpc choke on multiply defined symbols + # if we add $predep_objects and $postdep_objects, however 7.1 and + # earlier do not add the objects themselves. + case `$CC -V 2>&1` in + *"Version 7."*) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + ;; + *) # Version 8.0 or newer + tmp_idyn= + case $host_cpu in + ia64*) tmp_idyn=' -i_dynamic';; + esac + _LT_TAGVAR(archive_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + ;; + esac + _LT_TAGVAR(archive_cmds_need_lc, $1)=no + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' + _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive$convenience ${wl}--no-whole-archive' + ;; + pgCC* | pgcpp*) + # Portland Group C++ compiler + case `$CC -V` in + *pgCC\ [[1-5]]* | *pgcpp\ [[1-5]]*) + _LT_TAGVAR(prelink_cmds, $1)='tpldir=Template.dir~ + rm -rf $tpldir~ + $CC --prelink_objects --instantiation_dir $tpldir $objs $libobjs $compile_deplibs~ + compile_command="$compile_command `find $tpldir -name \*.o | $NL2SP`"' + _LT_TAGVAR(old_archive_cmds, $1)='tpldir=Template.dir~ + rm -rf $tpldir~ + $CC --prelink_objects --instantiation_dir $tpldir $oldobjs$old_deplibs~ + $AR $AR_FLAGS $oldlib$oldobjs$old_deplibs `find $tpldir -name \*.o | $NL2SP`~ + $RANLIB $oldlib' + _LT_TAGVAR(archive_cmds, $1)='tpldir=Template.dir~ + rm -rf $tpldir~ + $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~ + $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='tpldir=Template.dir~ + rm -rf $tpldir~ + $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~ + $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib' + ;; + *) # Version 6 will use weak symbols + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib' + ;; + esac + + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}--rpath ${wl}$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' + _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive' + ;; + cxx*) + # Compaq C++ + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib ${wl}-retain-symbols-file $wl$export_symbols' + + runpath_var=LD_RUN_PATH + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld"`; templist=`$ECHO "X$templist" | $Xsed -e "s/\(^.*ld.*\)\( .*ld .*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed' + ;; + xl*) + # IBM XL 8.0 on PPC, with GNU ld + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' + _LT_TAGVAR(archive_cmds, $1)='$CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + if test "x$supports_anon_versioning" = xyes; then + _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~ + cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ + echo "local: *; };" >> $output_objdir/$libname.ver~ + $CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' + fi + ;; + *) + case `$CC -V 2>&1 | sed 5q` in + *Sun\ C*) + # Sun C++ 5.9 + _LT_TAGVAR(no_undefined_flag, $1)=' -zdefs' + _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file ${wl}$export_symbols' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' + _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive' + _LT_TAGVAR(compiler_needs_object, $1)=yes + + # Not sure whether something based on + # $CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 + # would be better. + output_verbose_link_cmd='echo' + + # Archives containing C++ object files must be created using + # "CC -xar", where "CC" is the Sun C++ compiler. This is + # necessary to make sure instantiated templates are included + # in the archive. + _LT_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs' + ;; + esac + ;; + esac + ;; + + lynxos*) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + + m88k*) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + + mvs*) + case $cc_basename in + cxx*) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + *) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + esac + ;; + + netbsd*) + if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then + _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $predep_objects $libobjs $deplibs $postdep_objects $linker_flags' + wlarc= + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + fi + # Workaround some broken pre-1.5 toolchains + output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP conftest.$objext | $SED -e "s:-lgcc -lc -lgcc::"' + ;; + + *nto* | *qnx*) + _LT_TAGVAR(ld_shlibs, $1)=yes + ;; + + openbsd2*) + # C++ shared libraries are fairly broken + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + + openbsd*) + if test -f /usr/libexec/ld.so; then + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + _LT_TAGVAR(hardcode_direct_absolute, $1)=yes + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' + if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file,$export_symbols -o $lib' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' + _LT_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' + fi + output_verbose_link_cmd=echo + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + + osf3* | osf4* | osf5*) + case $cc_basename in + KCC*) + # Kuck and Associates, Inc. (KAI) C++ Compiler + + # KCC will only create a shared library if the output file + # ends with ".so" (or ".sl" for HP-UX), so rename the library + # to its proper name (with version) after linking. + _LT_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo "$lib" | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' + + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + + # Archives containing C++ object files must be created using + # the KAI C++ compiler. + case $host in + osf3*) _LT_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs' ;; + *) _LT_TAGVAR(old_archive_cmds, $1)='$CC -o $oldlib $oldobjs' ;; + esac + ;; + RCC*) + # Rational C++ 2.4.1 + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + cxx*) + case $host in + osf3*) + _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $soname `test -n "$verstring" && $ECHO "X${wl}-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + ;; + *) + _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done~ + echo "-hidden">> $lib.exp~ + $CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname ${wl}-input ${wl}$lib.exp `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib~ + $RM $lib.exp' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' + ;; + esac + + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld" | $GREP -v "ld:"`; templist=`$ECHO "X$templist" | $Xsed -e "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed' + ;; + *) + if test "$GXX" = yes && test "$with_gnu_ld" = no; then + _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' + case $host in + osf3*) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + ;; + *) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + ;; + esac + + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "\-L"' + + else + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + esac + ;; + + psos*) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + + sunos4*) + case $cc_basename in + CC*) + # Sun C++ 4.x + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + lcc*) + # Lucid + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + *) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + esac + ;; + + solaris*) + case $cc_basename in + CC*) + # Sun C++ 4.2, 5.x and Centerline C++ + _LT_TAGVAR(archive_cmds_need_lc,$1)=yes + _LT_TAGVAR(no_undefined_flag, $1)=' -zdefs' + _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $CC -G${allow_undefined_flag} ${wl}-M ${wl}$lib.exp -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' + + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + case $host_os in + solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; + *) + # The compiler driver will combine and reorder linker options, + # but understands `-z linker_flag'. + # Supported since Solaris 2.6 (maybe 2.5.1?) + _LT_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract' + ;; + esac + _LT_TAGVAR(link_all_deplibs, $1)=yes + + output_verbose_link_cmd='echo' + + # Archives containing C++ object files must be created using + # "CC -xar", where "CC" is the Sun C++ compiler. This is + # necessary to make sure instantiated templates are included + # in the archive. + _LT_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs' + ;; + gcx*) + # Green Hills C++ Compiler + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' + + # The C++ compiler must be used to create the archive. + _LT_TAGVAR(old_archive_cmds, $1)='$CC $LDFLAGS -archive -o $oldlib $oldobjs' + ;; + *) + # GNU C++ compiler with Solaris linker + if test "$GXX" = yes && test "$with_gnu_ld" = no; then + _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-z ${wl}defs' + if $CC --version | $GREP -v '^2\.7' > /dev/null; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $CC -shared -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "\-L"' + else + # g++ 2.7 appears to require `-G' NOT `-shared' on this + # platform. + _LT_TAGVAR(archive_cmds, $1)='$CC -G -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $CC -G -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + output_verbose_link_cmd='$CC -G $CFLAGS -v conftest.$objext 2>&1 | $GREP "\-L"' + fi + + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $wl$libdir' + case $host_os in + solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; + *) + _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' + ;; + esac + fi + ;; + esac + ;; + + sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7* | sco3.2v5.0.[[024]]*) + _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text' + _LT_TAGVAR(archive_cmds_need_lc, $1)=no + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + runpath_var='LD_RUN_PATH' + + case $cc_basename in + CC*) + _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + *) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + esac + ;; + + sysv5* | sco3.2v5* | sco5v6*) + # Note: We can NOT use -z defs as we might desire, because we do not + # link with -lc, and that would cause any symbols used from libc to + # always be unresolved, which means just about no library would + # ever link correctly. If we're not using GNU ld we use -z text + # though, which does catch some bad symbols but isn't as heavy-handed + # as -z defs. + _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text' + _LT_TAGVAR(allow_undefined_flag, $1)='${wl}-z,nodefs' + _LT_TAGVAR(archive_cmds_need_lc, $1)=no + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R,$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=':' + _LT_TAGVAR(link_all_deplibs, $1)=yes + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Bexport' + runpath_var='LD_RUN_PATH' + + case $cc_basename in + CC*) + _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + *) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + esac + ;; + + tandem*) + case $cc_basename in + NCC*) + # NonStop-UX NCC 3.20 + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + *) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + esac + ;; + + vxworks*) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + + *) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + esac + + AC_MSG_RESULT([$_LT_TAGVAR(ld_shlibs, $1)]) + test "$_LT_TAGVAR(ld_shlibs, $1)" = no && can_build_shared=no + + _LT_TAGVAR(GCC, $1)="$GXX" + _LT_TAGVAR(LD, $1)="$LD" + + ## CAVEAT EMPTOR: + ## There is no encapsulation within the following macros, do not change + ## the running order or otherwise move them around unless you know exactly + ## what you are doing... + _LT_SYS_HIDDEN_LIBDEPS($1) + _LT_COMPILER_PIC($1) + _LT_COMPILER_C_O($1) + _LT_COMPILER_FILE_LOCKS($1) + _LT_LINKER_SHLIBS($1) + _LT_SYS_DYNAMIC_LINKER($1) + _LT_LINKER_HARDCODE_LIBPATH($1) + + _LT_CONFIG($1) + fi # test -n "$compiler" + + CC=$lt_save_CC + LDCXX=$LD + LD=$lt_save_LD + GCC=$lt_save_GCC + with_gnu_ld=$lt_save_with_gnu_ld + lt_cv_path_LDCXX=$lt_cv_path_LD + lt_cv_path_LD=$lt_save_path_LD + lt_cv_prog_gnu_ldcxx=$lt_cv_prog_gnu_ld + lt_cv_prog_gnu_ld=$lt_save_with_gnu_ld +fi # test "$_lt_caught_CXX_error" != yes + +AC_LANG_POP +])# _LT_LANG_CXX_CONFIG + + +# _LT_SYS_HIDDEN_LIBDEPS([TAGNAME]) +# --------------------------------- +# Figure out "hidden" library dependencies from verbose +# compiler output when linking a shared library. +# Parse the compiler output and extract the necessary +# objects, libraries and library flags. +m4_defun([_LT_SYS_HIDDEN_LIBDEPS], +[m4_require([_LT_FILEUTILS_DEFAULTS])dnl +# Dependencies to place before and after the object being linked: +_LT_TAGVAR(predep_objects, $1)= +_LT_TAGVAR(postdep_objects, $1)= +_LT_TAGVAR(predeps, $1)= +_LT_TAGVAR(postdeps, $1)= +_LT_TAGVAR(compiler_lib_search_path, $1)= + +dnl we can't use the lt_simple_compile_test_code here, +dnl because it contains code intended for an executable, +dnl not a library. It's possible we should let each +dnl tag define a new lt_????_link_test_code variable, +dnl but it's only used here... +m4_if([$1], [], [cat > conftest.$ac_ext <<_LT_EOF +int a; +void foo (void) { a = 0; } +_LT_EOF +], [$1], [CXX], [cat > conftest.$ac_ext <<_LT_EOF +class Foo +{ +public: + Foo (void) { a = 0; } +private: + int a; +}; +_LT_EOF +], [$1], [F77], [cat > conftest.$ac_ext <<_LT_EOF + subroutine foo + implicit none + integer*4 a + a=0 + return + end +_LT_EOF +], [$1], [FC], [cat > conftest.$ac_ext <<_LT_EOF + subroutine foo + implicit none + integer a + a=0 + return + end +_LT_EOF +], [$1], [GCJ], [cat > conftest.$ac_ext <<_LT_EOF +public class foo { + private int a; + public void bar (void) { + a = 0; + } +}; +_LT_EOF +]) +dnl Parse the compiler output and extract the necessary +dnl objects, libraries and library flags. +if AC_TRY_EVAL(ac_compile); then + # Parse the compiler output and extract the necessary + # objects, libraries and library flags. + + # Sentinel used to keep track of whether or not we are before + # the conftest object file. + pre_test_object_deps_done=no + + for p in `eval "$output_verbose_link_cmd"`; do + case $p in + + -L* | -R* | -l*) + # Some compilers place space between "-{L,R}" and the path. + # Remove the space. + if test $p = "-L" || + test $p = "-R"; then + prev=$p + continue + else + prev= + fi + + if test "$pre_test_object_deps_done" = no; then + case $p in + -L* | -R*) + # Internal compiler library paths should come after those + # provided the user. The postdeps already come after the + # user supplied libs so there is no need to process them. + if test -z "$_LT_TAGVAR(compiler_lib_search_path, $1)"; then + _LT_TAGVAR(compiler_lib_search_path, $1)="${prev}${p}" + else + _LT_TAGVAR(compiler_lib_search_path, $1)="${_LT_TAGVAR(compiler_lib_search_path, $1)} ${prev}${p}" + fi + ;; + # The "-l" case would never come before the object being + # linked, so don't bother handling this case. + esac + else + if test -z "$_LT_TAGVAR(postdeps, $1)"; then + _LT_TAGVAR(postdeps, $1)="${prev}${p}" + else + _LT_TAGVAR(postdeps, $1)="${_LT_TAGVAR(postdeps, $1)} ${prev}${p}" + fi + fi + ;; + + *.$objext) + # This assumes that the test object file only shows up + # once in the compiler output. + if test "$p" = "conftest.$objext"; then + pre_test_object_deps_done=yes + continue + fi + + if test "$pre_test_object_deps_done" = no; then + if test -z "$_LT_TAGVAR(predep_objects, $1)"; then + _LT_TAGVAR(predep_objects, $1)="$p" + else + _LT_TAGVAR(predep_objects, $1)="$_LT_TAGVAR(predep_objects, $1) $p" + fi + else + if test -z "$_LT_TAGVAR(postdep_objects, $1)"; then + _LT_TAGVAR(postdep_objects, $1)="$p" + else + _LT_TAGVAR(postdep_objects, $1)="$_LT_TAGVAR(postdep_objects, $1) $p" + fi + fi + ;; + + *) ;; # Ignore the rest. + + esac + done + + # Clean up. + rm -f a.out a.exe +else + echo "libtool.m4: error: problem compiling $1 test program" +fi + +$RM -f confest.$objext + +# PORTME: override above test on systems where it is broken +m4_if([$1], [CXX], +[case $host_os in +interix[[3-9]]*) + # Interix 3.5 installs completely hosed .la files for C++, so rather than + # hack all around it, let's just trust "g++" to DTRT. + _LT_TAGVAR(predep_objects,$1)= + _LT_TAGVAR(postdep_objects,$1)= + _LT_TAGVAR(postdeps,$1)= + ;; + +linux*) + case `$CC -V 2>&1 | sed 5q` in + *Sun\ C*) + # Sun C++ 5.9 + + # The more standards-conforming stlport4 library is + # incompatible with the Cstd library. Avoid specifying + # it if it's in CXXFLAGS. Ignore libCrun as + # -library=stlport4 depends on it. + case " $CXX $CXXFLAGS " in + *" -library=stlport4 "*) + solaris_use_stlport4=yes + ;; + esac + + if test "$solaris_use_stlport4" != yes; then + _LT_TAGVAR(postdeps,$1)='-library=Cstd -library=Crun' + fi + ;; + esac + ;; + +solaris*) + case $cc_basename in + CC*) + # The more standards-conforming stlport4 library is + # incompatible with the Cstd library. Avoid specifying + # it if it's in CXXFLAGS. Ignore libCrun as + # -library=stlport4 depends on it. + case " $CXX $CXXFLAGS " in + *" -library=stlport4 "*) + solaris_use_stlport4=yes + ;; + esac + + # Adding this requires a known-good setup of shared libraries for + # Sun compiler versions before 5.6, else PIC objects from an old + # archive will be linked into the output, leading to subtle bugs. + if test "$solaris_use_stlport4" != yes; then + _LT_TAGVAR(postdeps,$1)='-library=Cstd -library=Crun' + fi + ;; + esac + ;; +esac +]) + +case " $_LT_TAGVAR(postdeps, $1) " in +*" -lc "*) _LT_TAGVAR(archive_cmds_need_lc, $1)=no ;; +esac + _LT_TAGVAR(compiler_lib_search_dirs, $1)= +if test -n "${_LT_TAGVAR(compiler_lib_search_path, $1)}"; then + _LT_TAGVAR(compiler_lib_search_dirs, $1)=`echo " ${_LT_TAGVAR(compiler_lib_search_path, $1)}" | ${SED} -e 's! -L! !g' -e 's!^ !!'` +fi +_LT_TAGDECL([], [compiler_lib_search_dirs], [1], + [The directories searched by this compiler when creating a shared library]) +_LT_TAGDECL([], [predep_objects], [1], + [Dependencies to place before and after the objects being linked to + create a shared library]) +_LT_TAGDECL([], [postdep_objects], [1]) +_LT_TAGDECL([], [predeps], [1]) +_LT_TAGDECL([], [postdeps], [1]) +_LT_TAGDECL([], [compiler_lib_search_path], [1], + [The library search path used internally by the compiler when linking + a shared library]) +])# _LT_SYS_HIDDEN_LIBDEPS + + +# _LT_PROG_F77 +# ------------ +# Since AC_PROG_F77 is broken, in that it returns the empty string +# if there is no fortran compiler, we have our own version here. +m4_defun([_LT_PROG_F77], +[ +pushdef([AC_MSG_ERROR], [_lt_disable_F77=yes]) +AC_PROG_F77 +if test -z "$F77" || test "X$F77" = "Xno"; then + _lt_disable_F77=yes +fi +popdef([AC_MSG_ERROR]) +])# _LT_PROG_F77 + +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([_LT_PROG_F77], []) + + +# _LT_LANG_F77_CONFIG([TAG]) +# -------------------------- +# Ensure that the configuration variables for a Fortran 77 compiler are +# suitably defined. These variables are subsequently used by _LT_CONFIG +# to write the compiler configuration to `libtool'. +m4_defun([_LT_LANG_F77_CONFIG], +[AC_REQUIRE([_LT_PROG_F77])dnl +AC_LANG_PUSH(Fortran 77) + +_LT_TAGVAR(archive_cmds_need_lc, $1)=no +_LT_TAGVAR(allow_undefined_flag, $1)= +_LT_TAGVAR(always_export_symbols, $1)=no +_LT_TAGVAR(archive_expsym_cmds, $1)= +_LT_TAGVAR(export_dynamic_flag_spec, $1)= +_LT_TAGVAR(hardcode_direct, $1)=no +_LT_TAGVAR(hardcode_direct_absolute, $1)=no +_LT_TAGVAR(hardcode_libdir_flag_spec, $1)= +_LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)= +_LT_TAGVAR(hardcode_libdir_separator, $1)= +_LT_TAGVAR(hardcode_minus_L, $1)=no +_LT_TAGVAR(hardcode_automatic, $1)=no +_LT_TAGVAR(inherit_rpath, $1)=no +_LT_TAGVAR(module_cmds, $1)= +_LT_TAGVAR(module_expsym_cmds, $1)= +_LT_TAGVAR(link_all_deplibs, $1)=unknown +_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds +_LT_TAGVAR(no_undefined_flag, $1)= +_LT_TAGVAR(whole_archive_flag_spec, $1)= +_LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no + +# Source file extension for f77 test sources. +ac_ext=f + +# Object file extension for compiled f77 test sources. +objext=o +_LT_TAGVAR(objext, $1)=$objext + +# No sense in running all these tests if we already determined that +# the F77 compiler isn't working. Some variables (like enable_shared) +# are currently assumed to apply to all compilers on this platform, +# and will be corrupted by setting them based on a non-working compiler. +if test "$_lt_disable_F77" != yes; then + # Code to be used in simple compile tests + lt_simple_compile_test_code="\ + subroutine t + return + end +" + + # Code to be used in simple link tests + lt_simple_link_test_code="\ + program t + end +" + + # ltmain only uses $CC for tagged configurations so make sure $CC is set. + _LT_TAG_COMPILER + + # save warnings/boilerplate of simple test code + _LT_COMPILER_BOILERPLATE + _LT_LINKER_BOILERPLATE + + # Allow CC to be a program name with arguments. + lt_save_CC="$CC" + lt_save_GCC=$GCC + CC=${F77-"f77"} + compiler=$CC + _LT_TAGVAR(compiler, $1)=$CC + _LT_CC_BASENAME([$compiler]) + GCC=$G77 + if test -n "$compiler"; then + AC_MSG_CHECKING([if libtool supports shared libraries]) + AC_MSG_RESULT([$can_build_shared]) + + AC_MSG_CHECKING([whether to build shared libraries]) + test "$can_build_shared" = "no" && enable_shared=no + + # On AIX, shared libraries and static libraries use the same namespace, and + # are all built from PIC. + case $host_os in + aix3*) + test "$enable_shared" = yes && enable_static=no + if test -n "$RANLIB"; then + archive_cmds="$archive_cmds~\$RANLIB \$lib" + postinstall_cmds='$RANLIB $lib' + fi + ;; + aix[[4-9]]*) + if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then + test "$enable_shared" = yes && enable_static=no + fi + ;; + esac + AC_MSG_RESULT([$enable_shared]) + + AC_MSG_CHECKING([whether to build static libraries]) + # Make sure either enable_shared or enable_static is yes. + test "$enable_shared" = yes || enable_static=yes + AC_MSG_RESULT([$enable_static]) + + _LT_TAGVAR(GCC, $1)="$G77" + _LT_TAGVAR(LD, $1)="$LD" + + ## CAVEAT EMPTOR: + ## There is no encapsulation within the following macros, do not change + ## the running order or otherwise move them around unless you know exactly + ## what you are doing... + _LT_COMPILER_PIC($1) + _LT_COMPILER_C_O($1) + _LT_COMPILER_FILE_LOCKS($1) + _LT_LINKER_SHLIBS($1) + _LT_SYS_DYNAMIC_LINKER($1) + _LT_LINKER_HARDCODE_LIBPATH($1) + + _LT_CONFIG($1) + fi # test -n "$compiler" + + GCC=$lt_save_GCC + CC="$lt_save_CC" +fi # test "$_lt_disable_F77" != yes + +AC_LANG_POP +])# _LT_LANG_F77_CONFIG + + +# _LT_PROG_FC +# ----------- +# Since AC_PROG_FC is broken, in that it returns the empty string +# if there is no fortran compiler, we have our own version here. +m4_defun([_LT_PROG_FC], +[ +pushdef([AC_MSG_ERROR], [_lt_disable_FC=yes]) +AC_PROG_FC +if test -z "$FC" || test "X$FC" = "Xno"; then + _lt_disable_FC=yes +fi +popdef([AC_MSG_ERROR]) +])# _LT_PROG_FC + +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([_LT_PROG_FC], []) + + +# _LT_LANG_FC_CONFIG([TAG]) +# ------------------------- +# Ensure that the configuration variables for a Fortran compiler are +# suitably defined. These variables are subsequently used by _LT_CONFIG +# to write the compiler configuration to `libtool'. +m4_defun([_LT_LANG_FC_CONFIG], +[AC_REQUIRE([_LT_PROG_FC])dnl +AC_LANG_PUSH(Fortran) + +_LT_TAGVAR(archive_cmds_need_lc, $1)=no +_LT_TAGVAR(allow_undefined_flag, $1)= +_LT_TAGVAR(always_export_symbols, $1)=no +_LT_TAGVAR(archive_expsym_cmds, $1)= +_LT_TAGVAR(export_dynamic_flag_spec, $1)= +_LT_TAGVAR(hardcode_direct, $1)=no +_LT_TAGVAR(hardcode_direct_absolute, $1)=no +_LT_TAGVAR(hardcode_libdir_flag_spec, $1)= +_LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)= +_LT_TAGVAR(hardcode_libdir_separator, $1)= +_LT_TAGVAR(hardcode_minus_L, $1)=no +_LT_TAGVAR(hardcode_automatic, $1)=no +_LT_TAGVAR(inherit_rpath, $1)=no +_LT_TAGVAR(module_cmds, $1)= +_LT_TAGVAR(module_expsym_cmds, $1)= +_LT_TAGVAR(link_all_deplibs, $1)=unknown +_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds +_LT_TAGVAR(no_undefined_flag, $1)= +_LT_TAGVAR(whole_archive_flag_spec, $1)= +_LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no + +# Source file extension for fc test sources. +ac_ext=${ac_fc_srcext-f} + +# Object file extension for compiled fc test sources. +objext=o +_LT_TAGVAR(objext, $1)=$objext + +# No sense in running all these tests if we already determined that +# the FC compiler isn't working. Some variables (like enable_shared) +# are currently assumed to apply to all compilers on this platform, +# and will be corrupted by setting them based on a non-working compiler. +if test "$_lt_disable_FC" != yes; then + # Code to be used in simple compile tests + lt_simple_compile_test_code="\ + subroutine t + return + end +" + + # Code to be used in simple link tests + lt_simple_link_test_code="\ + program t + end +" + + # ltmain only uses $CC for tagged configurations so make sure $CC is set. + _LT_TAG_COMPILER + + # save warnings/boilerplate of simple test code + _LT_COMPILER_BOILERPLATE + _LT_LINKER_BOILERPLATE + + # Allow CC to be a program name with arguments. + lt_save_CC="$CC" + lt_save_GCC=$GCC + CC=${FC-"f95"} + compiler=$CC + GCC=$ac_cv_fc_compiler_gnu + + _LT_TAGVAR(compiler, $1)=$CC + _LT_CC_BASENAME([$compiler]) + + if test -n "$compiler"; then + AC_MSG_CHECKING([if libtool supports shared libraries]) + AC_MSG_RESULT([$can_build_shared]) + + AC_MSG_CHECKING([whether to build shared libraries]) + test "$can_build_shared" = "no" && enable_shared=no + + # On AIX, shared libraries and static libraries use the same namespace, and + # are all built from PIC. + case $host_os in + aix3*) + test "$enable_shared" = yes && enable_static=no + if test -n "$RANLIB"; then + archive_cmds="$archive_cmds~\$RANLIB \$lib" + postinstall_cmds='$RANLIB $lib' + fi + ;; + aix[[4-9]]*) + if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then + test "$enable_shared" = yes && enable_static=no + fi + ;; + esac + AC_MSG_RESULT([$enable_shared]) + + AC_MSG_CHECKING([whether to build static libraries]) + # Make sure either enable_shared or enable_static is yes. + test "$enable_shared" = yes || enable_static=yes + AC_MSG_RESULT([$enable_static]) + + _LT_TAGVAR(GCC, $1)="$ac_cv_fc_compiler_gnu" + _LT_TAGVAR(LD, $1)="$LD" + + ## CAVEAT EMPTOR: + ## There is no encapsulation within the following macros, do not change + ## the running order or otherwise move them around unless you know exactly + ## what you are doing... + _LT_SYS_HIDDEN_LIBDEPS($1) + _LT_COMPILER_PIC($1) + _LT_COMPILER_C_O($1) + _LT_COMPILER_FILE_LOCKS($1) + _LT_LINKER_SHLIBS($1) + _LT_SYS_DYNAMIC_LINKER($1) + _LT_LINKER_HARDCODE_LIBPATH($1) + + _LT_CONFIG($1) + fi # test -n "$compiler" + + GCC=$lt_save_GCC + CC="$lt_save_CC" +fi # test "$_lt_disable_FC" != yes + +AC_LANG_POP +])# _LT_LANG_FC_CONFIG + + +# _LT_LANG_GCJ_CONFIG([TAG]) +# -------------------------- +# Ensure that the configuration variables for the GNU Java Compiler compiler +# are suitably defined. These variables are subsequently used by _LT_CONFIG +# to write the compiler configuration to `libtool'. +m4_defun([_LT_LANG_GCJ_CONFIG], +[AC_REQUIRE([LT_PROG_GCJ])dnl +AC_LANG_SAVE + +# Source file extension for Java test sources. +ac_ext=java + +# Object file extension for compiled Java test sources. +objext=o +_LT_TAGVAR(objext, $1)=$objext + +# Code to be used in simple compile tests +lt_simple_compile_test_code="class foo {}" + +# Code to be used in simple link tests +lt_simple_link_test_code='public class conftest { public static void main(String[[]] argv) {}; }' + +# ltmain only uses $CC for tagged configurations so make sure $CC is set. +_LT_TAG_COMPILER + +# save warnings/boilerplate of simple test code +_LT_COMPILER_BOILERPLATE +_LT_LINKER_BOILERPLATE + +# Allow CC to be a program name with arguments. +lt_save_CC="$CC" +lt_save_GCC=$GCC +GCC=yes +CC=${GCJ-"gcj"} +compiler=$CC +_LT_TAGVAR(compiler, $1)=$CC +_LT_TAGVAR(LD, $1)="$LD" +_LT_CC_BASENAME([$compiler]) + +# GCJ did not exist at the time GCC didn't implicitly link libc in. +_LT_TAGVAR(archive_cmds_need_lc, $1)=no + +_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds + +## CAVEAT EMPTOR: +## There is no encapsulation within the following macros, do not change +## the running order or otherwise move them around unless you know exactly +## what you are doing... +if test -n "$compiler"; then + _LT_COMPILER_NO_RTTI($1) + _LT_COMPILER_PIC($1) + _LT_COMPILER_C_O($1) + _LT_COMPILER_FILE_LOCKS($1) + _LT_LINKER_SHLIBS($1) + _LT_LINKER_HARDCODE_LIBPATH($1) + + _LT_CONFIG($1) +fi + +AC_LANG_RESTORE + +GCC=$lt_save_GCC +CC="$lt_save_CC" +])# _LT_LANG_GCJ_CONFIG + + +# _LT_LANG_RC_CONFIG([TAG]) +# ------------------------- +# Ensure that the configuration variables for the Windows resource compiler +# are suitably defined. These variables are subsequently used by _LT_CONFIG +# to write the compiler configuration to `libtool'. +m4_defun([_LT_LANG_RC_CONFIG], +[AC_REQUIRE([LT_PROG_RC])dnl +AC_LANG_SAVE + +# Source file extension for RC test sources. +ac_ext=rc + +# Object file extension for compiled RC test sources. +objext=o +_LT_TAGVAR(objext, $1)=$objext + +# Code to be used in simple compile tests +lt_simple_compile_test_code='sample MENU { MENUITEM "&Soup", 100, CHECKED }' + +# Code to be used in simple link tests +lt_simple_link_test_code="$lt_simple_compile_test_code" + +# ltmain only uses $CC for tagged configurations so make sure $CC is set. +_LT_TAG_COMPILER + +# save warnings/boilerplate of simple test code +_LT_COMPILER_BOILERPLATE +_LT_LINKER_BOILERPLATE + +# Allow CC to be a program name with arguments. +lt_save_CC="$CC" +lt_save_GCC=$GCC +GCC= +CC=${RC-"windres"} +compiler=$CC +_LT_TAGVAR(compiler, $1)=$CC +_LT_CC_BASENAME([$compiler]) +_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes + +if test -n "$compiler"; then + : + _LT_CONFIG($1) +fi + +GCC=$lt_save_GCC +AC_LANG_RESTORE +CC="$lt_save_CC" +])# _LT_LANG_RC_CONFIG + + +# LT_PROG_GCJ +# ----------- +AC_DEFUN([LT_PROG_GCJ], +[m4_ifdef([AC_PROG_GCJ], [AC_PROG_GCJ], + [m4_ifdef([A][M_PROG_GCJ], [A][M_PROG_GCJ], + [AC_CHECK_TOOL(GCJ, gcj,) + test "x${GCJFLAGS+set}" = xset || GCJFLAGS="-g -O2" + AC_SUBST(GCJFLAGS)])])[]dnl +]) + +# Old name: +AU_ALIAS([LT_AC_PROG_GCJ], [LT_PROG_GCJ]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([LT_AC_PROG_GCJ], []) + + +# LT_PROG_RC +# ---------- +AC_DEFUN([LT_PROG_RC], +[AC_CHECK_TOOL(RC, windres,) +]) + +# Old name: +AU_ALIAS([LT_AC_PROG_RC], [LT_PROG_RC]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([LT_AC_PROG_RC], []) + + +# _LT_DECL_EGREP +# -------------- +# If we don't have a new enough Autoconf to choose the best grep +# available, choose the one first in the user's PATH. +m4_defun([_LT_DECL_EGREP], +[AC_REQUIRE([AC_PROG_EGREP])dnl +AC_REQUIRE([AC_PROG_FGREP])dnl +test -z "$GREP" && GREP=grep +_LT_DECL([], [GREP], [1], [A grep program that handles long lines]) +_LT_DECL([], [EGREP], [1], [An ERE matcher]) +_LT_DECL([], [FGREP], [1], [A literal string matcher]) +dnl Non-bleeding-edge autoconf doesn't subst GREP, so do it here too +AC_SUBST([GREP]) +]) + + +# _LT_DECL_OBJDUMP +# -------------- +# If we don't have a new enough Autoconf to choose the best objdump +# available, choose the one first in the user's PATH. +m4_defun([_LT_DECL_OBJDUMP], +[AC_CHECK_TOOL(OBJDUMP, objdump, false) +test -z "$OBJDUMP" && OBJDUMP=objdump +_LT_DECL([], [OBJDUMP], [1], [An object symbol dumper]) +AC_SUBST([OBJDUMP]) +]) + + +# _LT_DECL_SED +# ------------ +# Check for a fully-functional sed program, that truncates +# as few characters as possible. Prefer GNU sed if found. +m4_defun([_LT_DECL_SED], +[AC_PROG_SED +test -z "$SED" && SED=sed +Xsed="$SED -e 1s/^X//" +_LT_DECL([], [SED], [1], [A sed program that does not truncate output]) +_LT_DECL([], [Xsed], ["\$SED -e 1s/^X//"], + [Sed that helps us avoid accidentally triggering echo(1) options like -n]) +])# _LT_DECL_SED + +m4_ifndef([AC_PROG_SED], [ +############################################################ +# NOTE: This macro has been submitted for inclusion into # +# GNU Autoconf as AC_PROG_SED. When it is available in # +# a released version of Autoconf we should remove this # +# macro and use it instead. # +############################################################ + +m4_defun([AC_PROG_SED], +[AC_MSG_CHECKING([for a sed that does not truncate output]) +AC_CACHE_VAL(lt_cv_path_SED, +[# Loop through the user's path and test for sed and gsed. +# Then use that list of sed's as ones to test for truncation. +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for lt_ac_prog in sed gsed; do + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$lt_ac_prog$ac_exec_ext"; then + lt_ac_sed_list="$lt_ac_sed_list $as_dir/$lt_ac_prog$ac_exec_ext" + fi + done + done +done +IFS=$as_save_IFS +lt_ac_max=0 +lt_ac_count=0 +# Add /usr/xpg4/bin/sed as it is typically found on Solaris +# along with /bin/sed that truncates output. +for lt_ac_sed in $lt_ac_sed_list /usr/xpg4/bin/sed; do + test ! -f $lt_ac_sed && continue + cat /dev/null > conftest.in + lt_ac_count=0 + echo $ECHO_N "0123456789$ECHO_C" >conftest.in + # Check for GNU sed and select it if it is found. + if "$lt_ac_sed" --version 2>&1 < /dev/null | grep 'GNU' > /dev/null; then + lt_cv_path_SED=$lt_ac_sed + break + fi + while true; do + cat conftest.in conftest.in >conftest.tmp + mv conftest.tmp conftest.in + cp conftest.in conftest.nl + echo >>conftest.nl + $lt_ac_sed -e 's/a$//' < conftest.nl >conftest.out || break + cmp -s conftest.out conftest.nl || break + # 10000 chars as input seems more than enough + test $lt_ac_count -gt 10 && break + lt_ac_count=`expr $lt_ac_count + 1` + if test $lt_ac_count -gt $lt_ac_max; then + lt_ac_max=$lt_ac_count + lt_cv_path_SED=$lt_ac_sed + fi + done +done +]) +SED=$lt_cv_path_SED +AC_SUBST([SED]) +AC_MSG_RESULT([$SED]) +])#AC_PROG_SED +])#m4_ifndef + +# Old name: +AU_ALIAS([LT_AC_PROG_SED], [AC_PROG_SED]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([LT_AC_PROG_SED], []) + + +# _LT_CHECK_SHELL_FEATURES +# ------------------------ +# Find out whether the shell is Bourne or XSI compatible, +# or has some other useful features. +m4_defun([_LT_CHECK_SHELL_FEATURES], +[AC_MSG_CHECKING([whether the shell understands some XSI constructs]) +# Try some XSI features +xsi_shell=no +( _lt_dummy="a/b/c" + test "${_lt_dummy##*/},${_lt_dummy%/*},"${_lt_dummy%"$_lt_dummy"}, \ + = c,a/b,, \ + && eval 'test $(( 1 + 1 )) -eq 2 \ + && test "${#_lt_dummy}" -eq 5' ) >/dev/null 2>&1 \ + && xsi_shell=yes +AC_MSG_RESULT([$xsi_shell]) +_LT_CONFIG_LIBTOOL_INIT([xsi_shell='$xsi_shell']) + +AC_MSG_CHECKING([whether the shell understands "+="]) +lt_shell_append=no +( foo=bar; set foo baz; eval "$[1]+=\$[2]" && test "$foo" = barbaz ) \ + >/dev/null 2>&1 \ + && lt_shell_append=yes +AC_MSG_RESULT([$lt_shell_append]) +_LT_CONFIG_LIBTOOL_INIT([lt_shell_append='$lt_shell_append']) + +if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then + lt_unset=unset +else + lt_unset=false +fi +_LT_DECL([], [lt_unset], [0], [whether the shell understands "unset"])dnl + +# test EBCDIC or ASCII +case `echo X|tr X '\101'` in + A) # ASCII based system + # \n is not interpreted correctly by Solaris 8 /usr/ucb/tr + lt_SP2NL='tr \040 \012' + lt_NL2SP='tr \015\012 \040\040' + ;; + *) # EBCDIC based system + lt_SP2NL='tr \100 \n' + lt_NL2SP='tr \r\n \100\100' + ;; +esac +_LT_DECL([SP2NL], [lt_SP2NL], [1], [turn spaces into newlines])dnl +_LT_DECL([NL2SP], [lt_NL2SP], [1], [turn newlines into spaces])dnl +])# _LT_CHECK_SHELL_FEATURES + + +# _LT_PROG_XSI_SHELLFNS +# --------------------- +# Bourne and XSI compatible variants of some useful shell functions. +m4_defun([_LT_PROG_XSI_SHELLFNS], +[case $xsi_shell in + yes) + cat << \_LT_EOF >> "$cfgfile" + +# func_dirname file append nondir_replacement +# Compute the dirname of FILE. If nonempty, add APPEND to the result, +# otherwise set result to NONDIR_REPLACEMENT. +func_dirname () +{ + case ${1} in + */*) func_dirname_result="${1%/*}${2}" ;; + * ) func_dirname_result="${3}" ;; + esac +} + +# func_basename file +func_basename () +{ + func_basename_result="${1##*/}" +} + +# func_dirname_and_basename file append nondir_replacement +# perform func_basename and func_dirname in a single function +# call: +# dirname: Compute the dirname of FILE. If nonempty, +# add APPEND to the result, otherwise set result +# to NONDIR_REPLACEMENT. +# value returned in "$func_dirname_result" +# basename: Compute filename of FILE. +# value retuned in "$func_basename_result" +# Implementation must be kept synchronized with func_dirname +# and func_basename. For efficiency, we do not delegate to +# those functions but instead duplicate the functionality here. +func_dirname_and_basename () +{ + case ${1} in + */*) func_dirname_result="${1%/*}${2}" ;; + * ) func_dirname_result="${3}" ;; + esac + func_basename_result="${1##*/}" +} + +# func_stripname prefix suffix name +# strip PREFIX and SUFFIX off of NAME. +# PREFIX and SUFFIX must not contain globbing or regex special +# characters, hashes, percent signs, but SUFFIX may contain a leading +# dot (in which case that matches only a dot). +func_stripname () +{ + # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are + # positional parameters, so assign one to ordinary parameter first. + func_stripname_result=${3} + func_stripname_result=${func_stripname_result#"${1}"} + func_stripname_result=${func_stripname_result%"${2}"} +} + +# func_opt_split +func_opt_split () +{ + func_opt_split_opt=${1%%=*} + func_opt_split_arg=${1#*=} +} + +# func_lo2o object +func_lo2o () +{ + case ${1} in + *.lo) func_lo2o_result=${1%.lo}.${objext} ;; + *) func_lo2o_result=${1} ;; + esac +} + +# func_xform libobj-or-source +func_xform () +{ + func_xform_result=${1%.*}.lo +} + +# func_arith arithmetic-term... +func_arith () +{ + func_arith_result=$(( $[*] )) +} + +# func_len string +# STRING may not start with a hyphen. +func_len () +{ + func_len_result=${#1} +} + +_LT_EOF + ;; + *) # Bourne compatible functions. + cat << \_LT_EOF >> "$cfgfile" + +# func_dirname file append nondir_replacement +# Compute the dirname of FILE. If nonempty, add APPEND to the result, +# otherwise set result to NONDIR_REPLACEMENT. +func_dirname () +{ + # Extract subdirectory from the argument. + func_dirname_result=`$ECHO "X${1}" | $Xsed -e "$dirname"` + if test "X$func_dirname_result" = "X${1}"; then + func_dirname_result="${3}" + else + func_dirname_result="$func_dirname_result${2}" + fi +} + +# func_basename file +func_basename () +{ + func_basename_result=`$ECHO "X${1}" | $Xsed -e "$basename"` +} + +dnl func_dirname_and_basename +dnl A portable version of this function is already defined in general.m4sh +dnl so there is no need for it here. + +# func_stripname prefix suffix name +# strip PREFIX and SUFFIX off of NAME. +# PREFIX and SUFFIX must not contain globbing or regex special +# characters, hashes, percent signs, but SUFFIX may contain a leading +# dot (in which case that matches only a dot). +# func_strip_suffix prefix name +func_stripname () +{ + case ${2} in + .*) func_stripname_result=`$ECHO "X${3}" \ + | $Xsed -e "s%^${1}%%" -e "s%\\\\${2}\$%%"`;; + *) func_stripname_result=`$ECHO "X${3}" \ + | $Xsed -e "s%^${1}%%" -e "s%${2}\$%%"`;; + esac +} + +# sed scripts: +my_sed_long_opt='1s/^\(-[[^=]]*\)=.*/\1/;q' +my_sed_long_arg='1s/^-[[^=]]*=//' + +# func_opt_split +func_opt_split () +{ + func_opt_split_opt=`$ECHO "X${1}" | $Xsed -e "$my_sed_long_opt"` + func_opt_split_arg=`$ECHO "X${1}" | $Xsed -e "$my_sed_long_arg"` +} + +# func_lo2o object +func_lo2o () +{ + func_lo2o_result=`$ECHO "X${1}" | $Xsed -e "$lo2o"` +} + +# func_xform libobj-or-source +func_xform () +{ + func_xform_result=`$ECHO "X${1}" | $Xsed -e 's/\.[[^.]]*$/.lo/'` +} + +# func_arith arithmetic-term... +func_arith () +{ + func_arith_result=`expr "$[@]"` +} + +# func_len string +# STRING may not start with a hyphen. +func_len () +{ + func_len_result=`expr "$[1]" : ".*" 2>/dev/null || echo $max_cmd_len` +} + +_LT_EOF +esac + +case $lt_shell_append in + yes) + cat << \_LT_EOF >> "$cfgfile" + +# func_append var value +# Append VALUE to the end of shell variable VAR. +func_append () +{ + eval "$[1]+=\$[2]" +} +_LT_EOF + ;; + *) + cat << \_LT_EOF >> "$cfgfile" + +# func_append var value +# Append VALUE to the end of shell variable VAR. +func_append () +{ + eval "$[1]=\$$[1]\$[2]" +} + +_LT_EOF + ;; + esac +]) diff --git a/m4/lock.m4 b/m4/lock.m4 new file mode 100644 index 0000000..d1ea1ca --- /dev/null +++ b/m4/lock.m4 @@ -0,0 +1,289 @@ +# lock.m4 serial 2 (gettext-0.15) +dnl Copyright (C) 2005 Free Software 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 From Bruno Haible. + +dnl Tests for a multithreading library to be used. +dnl Defines at most one of the macros USE_POSIX_THREADS, USE_SOLARIS_THREADS, +dnl USE_PTH_THREADS, USE_WIN32_THREADS +dnl Sets the variables LIBTHREAD and LTLIBTHREAD to the linker options for use +dnl in a Makefile (LIBTHREAD for use without libtool, LTLIBTHREAD for use with +dnl libtool). +dnl Sets the variables LIBMULTITHREAD and LTLIBMULTITHREAD similarly, for +dnl programs that really need multithread functionality. The difference +dnl between LIBTHREAD and LIBMULTITHREAD is that on platforms supporting weak +dnl symbols, typically LIBTHREAD="" whereas LIBMULTITHREAD="-lpthread". +dnl Adds to CPPFLAGS the flag -D_REENTRANT or -D_THREAD_SAFE if needed for +dnl multithread-safe programs. + +AC_DEFUN([gl_LOCK], +[ + AC_REQUIRE([gl_LOCK_BODY]) +]) + +dnl The guts of gl_LOCK. Needs to be expanded only once. + +AC_DEFUN([gl_LOCK_BODY], +[ + dnl Ordering constraints: This macro modifies CPPFLAGS in a way that + dnl influences the result of the autoconf tests that test for *_unlocked + dnl declarations, on AIX 5 at least. Therefore it must come early. + AC_BEFORE([$0], [gl_FUNC_GLIBC_UNLOCKED_IO])dnl + AC_BEFORE([$0], [gl_ARGP])dnl + + AC_REQUIRE([AC_CANONICAL_HOST]) + AC_REQUIRE([AC_GNU_SOURCE]) dnl needed for pthread_rwlock_t on glibc systems + dnl Check for multithreading. + AC_ARG_ENABLE(threads, +AC_HELP_STRING([--enable-threads={posix|solaris|pth|win32}], [specify multithreading API]) +AC_HELP_STRING([--disable-threads], [build without multithread safety]), + gl_use_threads=$enableval, gl_use_threads=yes) + gl_threads_api=none + LIBTHREAD= + LTLIBTHREAD= + LIBMULTITHREAD= + LTLIBMULTITHREAD= + if test "$gl_use_threads" != no; then + dnl Check whether the compiler and linker support weak declarations. + AC_MSG_CHECKING([whether imported symbols can be declared weak]) + gl_have_weak=no + AC_TRY_LINK([extern void xyzzy (); +#pragma weak xyzzy], [xyzzy();], [gl_have_weak=yes]) + AC_MSG_RESULT([$gl_have_weak]) + if test "$gl_use_threads" = yes || test "$gl_use_threads" = posix; then + # On OSF/1, the compiler needs the flag -pthread or -D_REENTRANT so that + # it groks . + gl_save_CPPFLAGS="$CPPFLAGS" + CPPFLAGS="$CPPFLAGS -D_REENTRANT" + AC_CHECK_HEADER(pthread.h, gl_have_pthread_h=yes, gl_have_pthread_h=no) + CPPFLAGS="$gl_save_CPPFLAGS" + if test "$gl_have_pthread_h" = yes; then + # Other possible tests: + # -lpthreads (FSU threads, PCthreads) + # -lgthreads + case "$host_os" in + osf*) + # On OSF/1, the compiler needs the flag -D_REENTRANT so that it + # groks . cc also understands the flag -pthread, but + # we don't use it because 1. gcc-2.95 doesn't understand -pthread, + # 2. putting a flag into CPPFLAGS that has an effect on the linker + # causes the AC_TRY_LINK test below to succeed unexpectedly, + # leading to wrong values of LIBTHREAD and LTLIBTHREAD. + CPPFLAGS="$CPPFLAGS -D_REENTRANT" + ;; + esac + gl_have_pthread= + # Test whether both pthread_mutex_lock and pthread_mutexattr_init exist + # in libc. IRIX 6.5 has the first one in both libc and libpthread, but + # the second one only in libpthread, and lock.c needs it. + AC_TRY_LINK([#include ], + [pthread_mutex_lock((pthread_mutex_t*)0); + pthread_mutexattr_init((pthread_mutexattr_t*)0);], + [gl_have_pthread=yes]) + # Test for libpthread by looking for pthread_kill. (Not pthread_self, + # since it is defined as a macro on OSF/1.) + if test -n "$gl_have_pthread"; then + # The program links fine without libpthread. But it may actually + # need to link with libpthread in order to create multiple threads. + AC_CHECK_LIB(pthread, pthread_kill, + [LIBMULTITHREAD=-lpthread LTLIBMULTITHREAD=-lpthread + # On Solaris and HP-UX, most pthread functions exist also in libc. + # Therefore pthread_in_use() needs to actually try to create a + # thread: pthread_create from libc will fail, whereas + # pthread_create will actually create a thread. + case "$host_os" in + solaris* | hpux*) + AC_DEFINE([PTHREAD_IN_USE_DETECTION_HARD], 1, + [Define if the pthread_in_use() detection is hard.]) + esac + ]) + else + # Some library is needed. Try libpthread and libc_r. + AC_CHECK_LIB(pthread, pthread_kill, + [gl_have_pthread=yes + LIBTHREAD=-lpthread LTLIBTHREAD=-lpthread + LIBMULTITHREAD=-lpthread LTLIBMULTITHREAD=-lpthread]) + if test -z "$gl_have_pthread"; then + # For FreeBSD 4. + AC_CHECK_LIB(c_r, pthread_kill, + [gl_have_pthread=yes + LIBTHREAD=-lc_r LTLIBTHREAD=-lc_r + LIBMULTITHREAD=-lc_r LTLIBMULTITHREAD=-lc_r]) + fi + fi + if test -n "$gl_have_pthread"; then + gl_threads_api=posix + AC_DEFINE([USE_POSIX_THREADS], 1, + [Define if the POSIX multithreading library can be used.]) + if test -n "$LIBMULTITHREAD" || test -n "$LTLIBMULTITHREAD"; then + if test $gl_have_weak = yes; then + AC_DEFINE([USE_POSIX_THREADS_WEAK], 1, + [Define if references to the POSIX multithreading library should be made weak.]) + LIBTHREAD= + LTLIBTHREAD= + fi + fi + # OSF/1 4.0 and MacOS X 10.1 lack the pthread_rwlock_t type and the + # pthread_rwlock_* functions. + AC_CHECK_TYPE([pthread_rwlock_t], + [AC_DEFINE([HAVE_PTHREAD_RWLOCK], 1, + [Define if the POSIX multithreading library has read/write locks.])], + [], + [#include ]) + # glibc defines PTHREAD_MUTEX_RECURSIVE as enum, not as a macro. + AC_TRY_COMPILE([#include ], + [#if __FreeBSD__ == 4 +error "No, in FreeBSD 4.0 recursive mutexes actually don't work." +#else +int x = (int)PTHREAD_MUTEX_RECURSIVE; +#endif], + [AC_DEFINE([HAVE_PTHREAD_MUTEX_RECURSIVE], 1, + [Define if the defines PTHREAD_MUTEX_RECURSIVE.])]) + # Some systems optimize for single-threaded programs by default, and + # need special flags to disable these optimizations. For example, the + # definition of 'errno' in . + case "$host_os" in + aix* | freebsd*) CPPFLAGS="$CPPFLAGS -D_THREAD_SAFE" ;; + solaris*) CPPFLAGS="$CPPFLAGS -D_REENTRANT" ;; + esac + fi + fi + fi + if test -z "$gl_have_pthread"; then + if test "$gl_use_threads" = yes || test "$gl_use_threads" = solaris; then + gl_have_solaristhread= + gl_save_LIBS="$LIBS" + LIBS="$LIBS -lthread" + AC_TRY_LINK([#include +#include ], + [thr_self();], + [gl_have_solaristhread=yes]) + LIBS="$gl_save_LIBS" + if test -n "$gl_have_solaristhread"; then + gl_threads_api=solaris + LIBTHREAD=-lthread + LTLIBTHREAD=-lthread + LIBMULTITHREAD="$LIBTHREAD" + LTLIBMULTITHREAD="$LTLIBTHREAD" + AC_DEFINE([USE_SOLARIS_THREADS], 1, + [Define if the old Solaris multithreading library can be used.]) + if test $gl_have_weak = yes; then + AC_DEFINE([USE_SOLARIS_THREADS_WEAK], 1, + [Define if references to the old Solaris multithreading library should be made weak.]) + LIBTHREAD= + LTLIBTHREAD= + fi + fi + fi + fi + if test "$gl_use_threads" = pth; then + gl_save_CPPFLAGS="$CPPFLAGS" + AC_LIB_LINKFLAGS(pth) + gl_have_pth= + gl_save_LIBS="$LIBS" + LIBS="$LIBS -lpth" + AC_TRY_LINK([#include ], [pth_self();], gl_have_pth=yes) + LIBS="$gl_save_LIBS" + if test -n "$gl_have_pth"; then + gl_threads_api=pth + LIBTHREAD="$LIBPTH" + LTLIBTHREAD="$LTLIBPTH" + LIBMULTITHREAD="$LIBTHREAD" + LTLIBMULTITHREAD="$LTLIBTHREAD" + AC_DEFINE([USE_PTH_THREADS], 1, + [Define if the GNU Pth multithreading library can be used.]) + if test -n "$LIBMULTITHREAD" || test -n "$LTLIBMULTITHREAD"; then + if test $gl_have_weak = yes; then + AC_DEFINE([USE_PTH_THREADS_WEAK], 1, + [Define if references to the GNU Pth multithreading library should be made weak.]) + LIBTHREAD= + LTLIBTHREAD= + fi + fi + else + CPPFLAGS="$gl_save_CPPFLAGS" + fi + fi + if test -z "$gl_have_pthread"; then + if test "$gl_use_threads" = yes || test "$gl_use_threads" = win32; then + if { case "$host_os" in + mingw*) true;; + *) false;; + esac + }; then + gl_threads_api=win32 + AC_DEFINE([USE_WIN32_THREADS], 1, + [Define if the Win32 multithreading API can be used.]) + fi + fi + fi + fi + AC_MSG_CHECKING([for multithread API to use]) + AC_MSG_RESULT([$gl_threads_api]) + AC_SUBST(LIBTHREAD) + AC_SUBST(LTLIBTHREAD) + AC_SUBST(LIBMULTITHREAD) + AC_SUBST(LTLIBMULTITHREAD) + gl_PREREQ_LOCK +]) + +# Prerequisites of lib/lock.c. +AC_DEFUN([gl_PREREQ_LOCK], [ + AC_REQUIRE([AC_C_INLINE]) +]) + +dnl Survey of platforms: +dnl +dnl Platform Available Compiler Supports test-lock +dnl flavours option weak result +dnl --------------- --------- --------- -------- --------- +dnl Linux 2.4/glibc posix -lpthread Y OK +dnl +dnl GNU Hurd/glibc posix +dnl +dnl FreeBSD 5.3 posix -lc_r Y +dnl posix -lkse ? Y +dnl posix -lpthread ? Y +dnl posix -lthr Y +dnl +dnl FreeBSD 5.2 posix -lc_r Y +dnl posix -lkse Y +dnl posix -lthr Y +dnl +dnl FreeBSD 4.0,4.10 posix -lc_r Y OK +dnl +dnl NetBSD 1.6 -- +dnl +dnl OpenBSD 3.4 posix -lpthread Y OK +dnl +dnl MacOS X 10.[123] posix -lpthread Y OK +dnl +dnl Solaris 7,8,9 posix -lpthread Y Sol 7,8: 0.0; Sol 9: OK +dnl solaris -lthread Y Sol 7,8: 0.0; Sol 9: OK +dnl +dnl HP-UX 11 posix -lpthread N (cc) OK +dnl Y (gcc) +dnl +dnl IRIX 6.5 posix -lpthread Y 0.5 +dnl +dnl AIX 4.3,5.1 posix -lpthread N AIX 4: 0.5; AIX 5: OK +dnl +dnl OSF/1 4.0,5.1 posix -pthread (cc) N OK +dnl -lpthread (gcc) Y +dnl +dnl Cygwin posix -lpthread Y OK +dnl +dnl Any of the above pth -lpth 0.0 +dnl +dnl Mingw win32 N OK +dnl +dnl BeOS 5 -- +dnl +dnl The test-lock result shows what happens if in test-lock.c EXPLICIT_YIELD is +dnl turned off: +dnl OK if all three tests terminate OK, +dnl 0.5 if the first test terminates OK but the second one loops endlessly, +dnl 0.0 if the first test already loops endlessly. diff --git a/m4/longdouble.m4 b/m4/longdouble.m4 new file mode 100644 index 0000000..25590f4 --- /dev/null +++ b/m4/longdouble.m4 @@ -0,0 +1,31 @@ +# longdouble.m4 serial 2 (gettext-0.15) +dnl Copyright (C) 2002-2003, 2006 Free Software 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 From Bruno Haible. +dnl Test whether the compiler supports the 'long double' type. +dnl Prerequisite: AC_PROG_CC + +dnl This file is only needed in autoconf <= 2.59. Newer versions of autoconf +dnl have a macro AC_TYPE_LONG_DOUBLE with identical semantics. + +AC_DEFUN([gt_TYPE_LONGDOUBLE], +[ + AC_CACHE_CHECK([for long double], gt_cv_c_long_double, + [if test "$GCC" = yes; then + gt_cv_c_long_double=yes + else + AC_TRY_COMPILE([ + /* The Stardent Vistra knows sizeof(long double), but does not support it. */ + long double foo = 0.0; + /* On Ultrix 4.3 cc, long double is 4 and double is 8. */ + int array [2*(sizeof(long double) >= sizeof(double)) - 1]; + ], , + gt_cv_c_long_double=yes, gt_cv_c_long_double=no) + fi]) + if test $gt_cv_c_long_double = yes; then + AC_DEFINE(HAVE_LONG_DOUBLE, 1, [Define if you have the 'long double' type.]) + fi +]) diff --git a/m4/longlong.m4 b/m4/longlong.m4 new file mode 100644 index 0000000..7b399e0 --- /dev/null +++ b/m4/longlong.m4 @@ -0,0 +1,23 @@ +# longlong.m4 serial 5 +dnl Copyright (C) 1999-2004 Free Software 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 From Paul Eggert. + +# Define HAVE_LONG_LONG if 'long long' works. + +AC_DEFUN([gl_AC_TYPE_LONG_LONG], +[ + AC_CACHE_CHECK([for long long], ac_cv_type_long_long, + [AC_TRY_LINK([long long ll = 1LL; int i = 63;], + [long long llmax = (long long) -1; + return ll << i | ll >> i | llmax / ll | llmax % ll;], + ac_cv_type_long_long=yes, + ac_cv_type_long_long=no)]) + if test $ac_cv_type_long_long = yes; then + AC_DEFINE(HAVE_LONG_LONG, 1, + [Define if you have the 'long long' type.]) + fi +]) diff --git a/m4/ltoptions.m4 b/m4/ltoptions.m4 new file mode 100644 index 0000000..34151a3 --- /dev/null +++ b/m4/ltoptions.m4 @@ -0,0 +1,368 @@ +# Helper functions for option handling. -*- Autoconf -*- +# +# Copyright (C) 2004, 2005, 2007, 2008 Free Software Foundation, Inc. +# Written by Gary V. Vaughan, 2004 +# +# 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. + +# serial 6 ltoptions.m4 + +# This is to help aclocal find these macros, as it can't see m4_define. +AC_DEFUN([LTOPTIONS_VERSION], [m4_if([1])]) + + +# _LT_MANGLE_OPTION(MACRO-NAME, OPTION-NAME) +# ------------------------------------------ +m4_define([_LT_MANGLE_OPTION], +[[_LT_OPTION_]m4_bpatsubst($1__$2, [[^a-zA-Z0-9_]], [_])]) + + +# _LT_SET_OPTION(MACRO-NAME, OPTION-NAME) +# --------------------------------------- +# Set option OPTION-NAME for macro MACRO-NAME, and if there is a +# matching handler defined, dispatch to it. Other OPTION-NAMEs are +# saved as a flag. +m4_define([_LT_SET_OPTION], +[m4_define(_LT_MANGLE_OPTION([$1], [$2]))dnl +m4_ifdef(_LT_MANGLE_DEFUN([$1], [$2]), + _LT_MANGLE_DEFUN([$1], [$2]), + [m4_warning([Unknown $1 option `$2'])])[]dnl +]) + + +# _LT_IF_OPTION(MACRO-NAME, OPTION-NAME, IF-SET, [IF-NOT-SET]) +# ------------------------------------------------------------ +# Execute IF-SET if OPTION is set, IF-NOT-SET otherwise. +m4_define([_LT_IF_OPTION], +[m4_ifdef(_LT_MANGLE_OPTION([$1], [$2]), [$3], [$4])]) + + +# _LT_UNLESS_OPTIONS(MACRO-NAME, OPTION-LIST, IF-NOT-SET) +# ------------------------------------------------------- +# Execute IF-NOT-SET unless all options in OPTION-LIST for MACRO-NAME +# are set. +m4_define([_LT_UNLESS_OPTIONS], +[m4_foreach([_LT_Option], m4_split(m4_normalize([$2])), + [m4_ifdef(_LT_MANGLE_OPTION([$1], _LT_Option), + [m4_define([$0_found])])])[]dnl +m4_ifdef([$0_found], [m4_undefine([$0_found])], [$3 +])[]dnl +]) + + +# _LT_SET_OPTIONS(MACRO-NAME, OPTION-LIST) +# ---------------------------------------- +# OPTION-LIST is a space-separated list of Libtool options associated +# with MACRO-NAME. If any OPTION has a matching handler declared with +# LT_OPTION_DEFINE, dispatch to that macro; otherwise complain about +# the unknown option and exit. +m4_defun([_LT_SET_OPTIONS], +[# Set options +m4_foreach([_LT_Option], m4_split(m4_normalize([$2])), + [_LT_SET_OPTION([$1], _LT_Option)]) + +m4_if([$1],[LT_INIT],[ + dnl + dnl Simply set some default values (i.e off) if boolean options were not + dnl specified: + _LT_UNLESS_OPTIONS([LT_INIT], [dlopen], [enable_dlopen=no + ]) + _LT_UNLESS_OPTIONS([LT_INIT], [win32-dll], [enable_win32_dll=no + ]) + dnl + dnl If no reference was made to various pairs of opposing options, then + dnl we run the default mode handler for the pair. For example, if neither + dnl `shared' nor `disable-shared' was passed, we enable building of shared + dnl archives by default: + _LT_UNLESS_OPTIONS([LT_INIT], [shared disable-shared], [_LT_ENABLE_SHARED]) + _LT_UNLESS_OPTIONS([LT_INIT], [static disable-static], [_LT_ENABLE_STATIC]) + _LT_UNLESS_OPTIONS([LT_INIT], [pic-only no-pic], [_LT_WITH_PIC]) + _LT_UNLESS_OPTIONS([LT_INIT], [fast-install disable-fast-install], + [_LT_ENABLE_FAST_INSTALL]) + ]) +])# _LT_SET_OPTIONS + + +## --------------------------------- ## +## Macros to handle LT_INIT options. ## +## --------------------------------- ## + +# _LT_MANGLE_DEFUN(MACRO-NAME, OPTION-NAME) +# ----------------------------------------- +m4_define([_LT_MANGLE_DEFUN], +[[_LT_OPTION_DEFUN_]m4_bpatsubst(m4_toupper([$1__$2]), [[^A-Z0-9_]], [_])]) + + +# LT_OPTION_DEFINE(MACRO-NAME, OPTION-NAME, CODE) +# ----------------------------------------------- +m4_define([LT_OPTION_DEFINE], +[m4_define(_LT_MANGLE_DEFUN([$1], [$2]), [$3])[]dnl +])# LT_OPTION_DEFINE + + +# dlopen +# ------ +LT_OPTION_DEFINE([LT_INIT], [dlopen], [enable_dlopen=yes +]) + +AU_DEFUN([AC_LIBTOOL_DLOPEN], +[_LT_SET_OPTION([LT_INIT], [dlopen]) +AC_DIAGNOSE([obsolete], +[$0: Remove this warning and the call to _LT_SET_OPTION when you +put the `dlopen' option into LT_INIT's first parameter.]) +]) + +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_LIBTOOL_DLOPEN], []) + + +# win32-dll +# --------- +# Declare package support for building win32 dll's. +LT_OPTION_DEFINE([LT_INIT], [win32-dll], +[enable_win32_dll=yes + +case $host in +*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-cegcc*) + AC_CHECK_TOOL(AS, as, false) + AC_CHECK_TOOL(DLLTOOL, dlltool, false) + AC_CHECK_TOOL(OBJDUMP, objdump, false) + ;; +esac + +test -z "$AS" && AS=as +_LT_DECL([], [AS], [0], [Assembler program])dnl + +test -z "$DLLTOOL" && DLLTOOL=dlltool +_LT_DECL([], [DLLTOOL], [0], [DLL creation program])dnl + +test -z "$OBJDUMP" && OBJDUMP=objdump +_LT_DECL([], [OBJDUMP], [0], [Object dumper program])dnl +])# win32-dll + +AU_DEFUN([AC_LIBTOOL_WIN32_DLL], +[AC_REQUIRE([AC_CANONICAL_HOST])dnl +_LT_SET_OPTION([LT_INIT], [win32-dll]) +AC_DIAGNOSE([obsolete], +[$0: Remove this warning and the call to _LT_SET_OPTION when you +put the `win32-dll' option into LT_INIT's first parameter.]) +]) + +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_LIBTOOL_WIN32_DLL], []) + + +# _LT_ENABLE_SHARED([DEFAULT]) +# ---------------------------- +# implement the --enable-shared flag, and supports the `shared' and +# `disable-shared' LT_INIT options. +# DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'. +m4_define([_LT_ENABLE_SHARED], +[m4_define([_LT_ENABLE_SHARED_DEFAULT], [m4_if($1, no, no, yes)])dnl +AC_ARG_ENABLE([shared], + [AS_HELP_STRING([--enable-shared@<:@=PKGS@:>@], + [build shared libraries @<:@default=]_LT_ENABLE_SHARED_DEFAULT[@:>@])], + [p=${PACKAGE-default} + case $enableval in + yes) enable_shared=yes ;; + no) enable_shared=no ;; + *) + enable_shared=no + # Look at the argument we got. We use all the common list separators. + lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," + for pkg in $enableval; do + IFS="$lt_save_ifs" + if test "X$pkg" = "X$p"; then + enable_shared=yes + fi + done + IFS="$lt_save_ifs" + ;; + esac], + [enable_shared=]_LT_ENABLE_SHARED_DEFAULT) + + _LT_DECL([build_libtool_libs], [enable_shared], [0], + [Whether or not to build shared libraries]) +])# _LT_ENABLE_SHARED + +LT_OPTION_DEFINE([LT_INIT], [shared], [_LT_ENABLE_SHARED([yes])]) +LT_OPTION_DEFINE([LT_INIT], [disable-shared], [_LT_ENABLE_SHARED([no])]) + +# Old names: +AC_DEFUN([AC_ENABLE_SHARED], +[_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[shared]) +]) + +AC_DEFUN([AC_DISABLE_SHARED], +[_LT_SET_OPTION([LT_INIT], [disable-shared]) +]) + +AU_DEFUN([AM_ENABLE_SHARED], [AC_ENABLE_SHARED($@)]) +AU_DEFUN([AM_DISABLE_SHARED], [AC_DISABLE_SHARED($@)]) + +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AM_ENABLE_SHARED], []) +dnl AC_DEFUN([AM_DISABLE_SHARED], []) + + + +# _LT_ENABLE_STATIC([DEFAULT]) +# ---------------------------- +# implement the --enable-static flag, and support the `static' and +# `disable-static' LT_INIT options. +# DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'. +m4_define([_LT_ENABLE_STATIC], +[m4_define([_LT_ENABLE_STATIC_DEFAULT], [m4_if($1, no, no, yes)])dnl +AC_ARG_ENABLE([static], + [AS_HELP_STRING([--enable-static@<:@=PKGS@:>@], + [build static libraries @<:@default=]_LT_ENABLE_STATIC_DEFAULT[@:>@])], + [p=${PACKAGE-default} + case $enableval in + yes) enable_static=yes ;; + no) enable_static=no ;; + *) + enable_static=no + # Look at the argument we got. We use all the common list separators. + lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," + for pkg in $enableval; do + IFS="$lt_save_ifs" + if test "X$pkg" = "X$p"; then + enable_static=yes + fi + done + IFS="$lt_save_ifs" + ;; + esac], + [enable_static=]_LT_ENABLE_STATIC_DEFAULT) + + _LT_DECL([build_old_libs], [enable_static], [0], + [Whether or not to build static libraries]) +])# _LT_ENABLE_STATIC + +LT_OPTION_DEFINE([LT_INIT], [static], [_LT_ENABLE_STATIC([yes])]) +LT_OPTION_DEFINE([LT_INIT], [disable-static], [_LT_ENABLE_STATIC([no])]) + +# Old names: +AC_DEFUN([AC_ENABLE_STATIC], +[_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[static]) +]) + +AC_DEFUN([AC_DISABLE_STATIC], +[_LT_SET_OPTION([LT_INIT], [disable-static]) +]) + +AU_DEFUN([AM_ENABLE_STATIC], [AC_ENABLE_STATIC($@)]) +AU_DEFUN([AM_DISABLE_STATIC], [AC_DISABLE_STATIC($@)]) + +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AM_ENABLE_STATIC], []) +dnl AC_DEFUN([AM_DISABLE_STATIC], []) + + + +# _LT_ENABLE_FAST_INSTALL([DEFAULT]) +# ---------------------------------- +# implement the --enable-fast-install flag, and support the `fast-install' +# and `disable-fast-install' LT_INIT options. +# DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'. +m4_define([_LT_ENABLE_FAST_INSTALL], +[m4_define([_LT_ENABLE_FAST_INSTALL_DEFAULT], [m4_if($1, no, no, yes)])dnl +AC_ARG_ENABLE([fast-install], + [AS_HELP_STRING([--enable-fast-install@<:@=PKGS@:>@], + [optimize for fast installation @<:@default=]_LT_ENABLE_FAST_INSTALL_DEFAULT[@:>@])], + [p=${PACKAGE-default} + case $enableval in + yes) enable_fast_install=yes ;; + no) enable_fast_install=no ;; + *) + enable_fast_install=no + # Look at the argument we got. We use all the common list separators. + lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," + for pkg in $enableval; do + IFS="$lt_save_ifs" + if test "X$pkg" = "X$p"; then + enable_fast_install=yes + fi + done + IFS="$lt_save_ifs" + ;; + esac], + [enable_fast_install=]_LT_ENABLE_FAST_INSTALL_DEFAULT) + +_LT_DECL([fast_install], [enable_fast_install], [0], + [Whether or not to optimize for fast installation])dnl +])# _LT_ENABLE_FAST_INSTALL + +LT_OPTION_DEFINE([LT_INIT], [fast-install], [_LT_ENABLE_FAST_INSTALL([yes])]) +LT_OPTION_DEFINE([LT_INIT], [disable-fast-install], [_LT_ENABLE_FAST_INSTALL([no])]) + +# Old names: +AU_DEFUN([AC_ENABLE_FAST_INSTALL], +[_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[fast-install]) +AC_DIAGNOSE([obsolete], +[$0: Remove this warning and the call to _LT_SET_OPTION when you put +the `fast-install' option into LT_INIT's first parameter.]) +]) + +AU_DEFUN([AC_DISABLE_FAST_INSTALL], +[_LT_SET_OPTION([LT_INIT], [disable-fast-install]) +AC_DIAGNOSE([obsolete], +[$0: Remove this warning and the call to _LT_SET_OPTION when you put +the `disable-fast-install' option into LT_INIT's first parameter.]) +]) + +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_ENABLE_FAST_INSTALL], []) +dnl AC_DEFUN([AM_DISABLE_FAST_INSTALL], []) + + +# _LT_WITH_PIC([MODE]) +# -------------------- +# implement the --with-pic flag, and support the `pic-only' and `no-pic' +# LT_INIT options. +# MODE is either `yes' or `no'. If omitted, it defaults to `both'. +m4_define([_LT_WITH_PIC], +[AC_ARG_WITH([pic], + [AS_HELP_STRING([--with-pic], + [try to use only PIC/non-PIC objects @<:@default=use both@:>@])], + [pic_mode="$withval"], + [pic_mode=default]) + +test -z "$pic_mode" && pic_mode=m4_default([$1], [default]) + +_LT_DECL([], [pic_mode], [0], [What type of objects to build])dnl +])# _LT_WITH_PIC + +LT_OPTION_DEFINE([LT_INIT], [pic-only], [_LT_WITH_PIC([yes])]) +LT_OPTION_DEFINE([LT_INIT], [no-pic], [_LT_WITH_PIC([no])]) + +# Old name: +AU_DEFUN([AC_LIBTOOL_PICMODE], +[_LT_SET_OPTION([LT_INIT], [pic-only]) +AC_DIAGNOSE([obsolete], +[$0: Remove this warning and the call to _LT_SET_OPTION when you +put the `pic-only' option into LT_INIT's first parameter.]) +]) + +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_LIBTOOL_PICMODE], []) + +## ----------------- ## +## LTDL_INIT Options ## +## ----------------- ## + +m4_define([_LTDL_MODE], []) +LT_OPTION_DEFINE([LTDL_INIT], [nonrecursive], + [m4_define([_LTDL_MODE], [nonrecursive])]) +LT_OPTION_DEFINE([LTDL_INIT], [recursive], + [m4_define([_LTDL_MODE], [recursive])]) +LT_OPTION_DEFINE([LTDL_INIT], [subproject], + [m4_define([_LTDL_MODE], [subproject])]) + +m4_define([_LTDL_TYPE], []) +LT_OPTION_DEFINE([LTDL_INIT], [installable], + [m4_define([_LTDL_TYPE], [installable])]) +LT_OPTION_DEFINE([LTDL_INIT], [convenience], + [m4_define([_LTDL_TYPE], [convenience])]) diff --git a/m4/ltsugar.m4 b/m4/ltsugar.m4 new file mode 100644 index 0000000..9000a05 --- /dev/null +++ b/m4/ltsugar.m4 @@ -0,0 +1,123 @@ +# ltsugar.m4 -- libtool m4 base layer. -*-Autoconf-*- +# +# Copyright (C) 2004, 2005, 2007, 2008 Free Software Foundation, Inc. +# Written by Gary V. Vaughan, 2004 +# +# 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. + +# serial 6 ltsugar.m4 + +# This is to help aclocal find these macros, as it can't see m4_define. +AC_DEFUN([LTSUGAR_VERSION], [m4_if([0.1])]) + + +# lt_join(SEP, ARG1, [ARG2...]) +# ----------------------------- +# Produce ARG1SEPARG2...SEPARGn, omitting [] arguments and their +# associated separator. +# Needed until we can rely on m4_join from Autoconf 2.62, since all earlier +# versions in m4sugar had bugs. +m4_define([lt_join], +[m4_if([$#], [1], [], + [$#], [2], [[$2]], + [m4_if([$2], [], [], [[$2]_])$0([$1], m4_shift(m4_shift($@)))])]) +m4_define([_lt_join], +[m4_if([$#$2], [2], [], + [m4_if([$2], [], [], [[$1$2]])$0([$1], m4_shift(m4_shift($@)))])]) + + +# lt_car(LIST) +# lt_cdr(LIST) +# ------------ +# Manipulate m4 lists. +# These macros are necessary as long as will still need to support +# Autoconf-2.59 which quotes differently. +m4_define([lt_car], [[$1]]) +m4_define([lt_cdr], +[m4_if([$#], 0, [m4_fatal([$0: cannot be called without arguments])], + [$#], 1, [], + [m4_dquote(m4_shift($@))])]) +m4_define([lt_unquote], $1) + + +# lt_append(MACRO-NAME, STRING, [SEPARATOR]) +# ------------------------------------------ +# Redefine MACRO-NAME to hold its former content plus `SEPARATOR'`STRING'. +# Note that neither SEPARATOR nor STRING are expanded; they are appended +# to MACRO-NAME as is (leaving the expansion for when MACRO-NAME is invoked). +# No SEPARATOR is output if MACRO-NAME was previously undefined (different +# than defined and empty). +# +# This macro is needed until we can rely on Autoconf 2.62, since earlier +# versions of m4sugar mistakenly expanded SEPARATOR but not STRING. +m4_define([lt_append], +[m4_define([$1], + m4_ifdef([$1], [m4_defn([$1])[$3]])[$2])]) + + + +# lt_combine(SEP, PREFIX-LIST, INFIX, SUFFIX1, [SUFFIX2...]) +# ---------------------------------------------------------- +# Produce a SEP delimited list of all paired combinations of elements of +# PREFIX-LIST with SUFFIX1 through SUFFIXn. Each element of the list +# has the form PREFIXmINFIXSUFFIXn. +# Needed until we can rely on m4_combine added in Autoconf 2.62. +m4_define([lt_combine], +[m4_if(m4_eval([$# > 3]), [1], + [m4_pushdef([_Lt_sep], [m4_define([_Lt_sep], m4_defn([lt_car]))])]]dnl +[[m4_foreach([_Lt_prefix], [$2], + [m4_foreach([_Lt_suffix], + ]m4_dquote(m4_dquote(m4_shift(m4_shift(m4_shift($@)))))[, + [_Lt_sep([$1])[]m4_defn([_Lt_prefix])[$3]m4_defn([_Lt_suffix])])])])]) + + +# lt_if_append_uniq(MACRO-NAME, VARNAME, [SEPARATOR], [UNIQ], [NOT-UNIQ]) +# ----------------------------------------------------------------------- +# Iff MACRO-NAME does not yet contain VARNAME, then append it (delimited +# by SEPARATOR if supplied) and expand UNIQ, else NOT-UNIQ. +m4_define([lt_if_append_uniq], +[m4_ifdef([$1], + [m4_if(m4_index([$3]m4_defn([$1])[$3], [$3$2$3]), [-1], + [lt_append([$1], [$2], [$3])$4], + [$5])], + [lt_append([$1], [$2], [$3])$4])]) + + +# lt_dict_add(DICT, KEY, VALUE) +# ----------------------------- +m4_define([lt_dict_add], +[m4_define([$1($2)], [$3])]) + + +# lt_dict_add_subkey(DICT, KEY, SUBKEY, VALUE) +# -------------------------------------------- +m4_define([lt_dict_add_subkey], +[m4_define([$1($2:$3)], [$4])]) + + +# lt_dict_fetch(DICT, KEY, [SUBKEY]) +# ---------------------------------- +m4_define([lt_dict_fetch], +[m4_ifval([$3], + m4_ifdef([$1($2:$3)], [m4_defn([$1($2:$3)])]), + m4_ifdef([$1($2)], [m4_defn([$1($2)])]))]) + + +# lt_if_dict_fetch(DICT, KEY, [SUBKEY], VALUE, IF-TRUE, [IF-FALSE]) +# ----------------------------------------------------------------- +m4_define([lt_if_dict_fetch], +[m4_if(lt_dict_fetch([$1], [$2], [$3]), [$4], + [$5], + [$6])]) + + +# lt_dict_filter(DICT, [SUBKEY], VALUE, [SEPARATOR], KEY, [...]) +# -------------------------------------------------------------- +m4_define([lt_dict_filter], +[m4_if([$5], [], [], + [lt_join(m4_quote(m4_default([$4], [[, ]])), + lt_unquote(m4_split(m4_normalize(m4_foreach(_Lt_key, lt_car([m4_shiftn(4, $@)]), + [lt_if_dict_fetch([$1], _Lt_key, [$2], [$3], [_Lt_key ])])))))])[]dnl +]) diff --git a/m4/ltversion.m4 b/m4/ltversion.m4 new file mode 100644 index 0000000..b8e154f --- /dev/null +++ b/m4/ltversion.m4 @@ -0,0 +1,23 @@ +# ltversion.m4 -- version numbers -*- Autoconf -*- +# +# Copyright (C) 2004 Free Software Foundation, Inc. +# Written by Scott James Remnant, 2004 +# +# 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. + +# Generated from ltversion.in. + +# serial 3012 ltversion.m4 +# This file is part of GNU Libtool + +m4_define([LT_PACKAGE_VERSION], [2.2.6]) +m4_define([LT_PACKAGE_REVISION], [1.3012]) + +AC_DEFUN([LTVERSION_VERSION], +[macro_version='2.2.6' +macro_revision='1.3012' +_LT_DECL(, macro_version, 0, [Which release of libtool.m4 was used?]) +_LT_DECL(, macro_revision, 0) +]) diff --git a/m4/lt~obsolete.m4 b/m4/lt~obsolete.m4 new file mode 100644 index 0000000..637bb20 --- /dev/null +++ b/m4/lt~obsolete.m4 @@ -0,0 +1,92 @@ +# lt~obsolete.m4 -- aclocal satisfying obsolete definitions. -*-Autoconf-*- +# +# Copyright (C) 2004, 2005, 2007 Free Software Foundation, Inc. +# Written by Scott James Remnant, 2004. +# +# 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. + +# serial 4 lt~obsolete.m4 + +# These exist entirely to fool aclocal when bootstrapping libtool. +# +# In the past libtool.m4 has provided macros via AC_DEFUN (or AU_DEFUN) +# which have later been changed to m4_define as they aren't part of the +# exported API, or moved to Autoconf or Automake where they belong. +# +# The trouble is, aclocal is a bit thick. It'll see the old AC_DEFUN +# in /usr/share/aclocal/libtool.m4 and remember it, then when it sees us +# using a macro with the same name in our local m4/libtool.m4 it'll +# pull the old libtool.m4 in (it doesn't see our shiny new m4_define +# and doesn't know about Autoconf macros at all.) +# +# So we provide this file, which has a silly filename so it's always +# included after everything else. This provides aclocal with the +# AC_DEFUNs it wants, but when m4 processes it, it doesn't do anything +# because those macros already exist, or will be overwritten later. +# We use AC_DEFUN over AU_DEFUN for compatibility with aclocal-1.6. +# +# Anytime we withdraw an AC_DEFUN or AU_DEFUN, remember to add it here. +# Yes, that means every name once taken will need to remain here until +# we give up compatibility with versions before 1.7, at which point +# we need to keep only those names which we still refer to. + +# This is to help aclocal find these macros, as it can't see m4_define. +AC_DEFUN([LTOBSOLETE_VERSION], [m4_if([1])]) + +m4_ifndef([AC_LIBTOOL_LINKER_OPTION], [AC_DEFUN([AC_LIBTOOL_LINKER_OPTION])]) +m4_ifndef([AC_PROG_EGREP], [AC_DEFUN([AC_PROG_EGREP])]) +m4_ifndef([_LT_AC_PROG_ECHO_BACKSLASH], [AC_DEFUN([_LT_AC_PROG_ECHO_BACKSLASH])]) +m4_ifndef([_LT_AC_SHELL_INIT], [AC_DEFUN([_LT_AC_SHELL_INIT])]) +m4_ifndef([_LT_AC_SYS_LIBPATH_AIX], [AC_DEFUN([_LT_AC_SYS_LIBPATH_AIX])]) +m4_ifndef([_LT_PROG_LTMAIN], [AC_DEFUN([_LT_PROG_LTMAIN])]) +m4_ifndef([_LT_AC_TAGVAR], [AC_DEFUN([_LT_AC_TAGVAR])]) +m4_ifndef([AC_LTDL_ENABLE_INSTALL], [AC_DEFUN([AC_LTDL_ENABLE_INSTALL])]) +m4_ifndef([AC_LTDL_PREOPEN], [AC_DEFUN([AC_LTDL_PREOPEN])]) +m4_ifndef([_LT_AC_SYS_COMPILER], [AC_DEFUN([_LT_AC_SYS_COMPILER])]) +m4_ifndef([_LT_AC_LOCK], [AC_DEFUN([_LT_AC_LOCK])]) +m4_ifndef([AC_LIBTOOL_SYS_OLD_ARCHIVE], [AC_DEFUN([AC_LIBTOOL_SYS_OLD_ARCHIVE])]) +m4_ifndef([_LT_AC_TRY_DLOPEN_SELF], [AC_DEFUN([_LT_AC_TRY_DLOPEN_SELF])]) +m4_ifndef([AC_LIBTOOL_PROG_CC_C_O], [AC_DEFUN([AC_LIBTOOL_PROG_CC_C_O])]) +m4_ifndef([AC_LIBTOOL_SYS_HARD_LINK_LOCKS], [AC_DEFUN([AC_LIBTOOL_SYS_HARD_LINK_LOCKS])]) +m4_ifndef([AC_LIBTOOL_OBJDIR], [AC_DEFUN([AC_LIBTOOL_OBJDIR])]) +m4_ifndef([AC_LTDL_OBJDIR], [AC_DEFUN([AC_LTDL_OBJDIR])]) +m4_ifndef([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH], [AC_DEFUN([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH])]) +m4_ifndef([AC_LIBTOOL_SYS_LIB_STRIP], [AC_DEFUN([AC_LIBTOOL_SYS_LIB_STRIP])]) +m4_ifndef([AC_PATH_MAGIC], [AC_DEFUN([AC_PATH_MAGIC])]) +m4_ifndef([AC_PROG_LD_GNU], [AC_DEFUN([AC_PROG_LD_GNU])]) +m4_ifndef([AC_PROG_LD_RELOAD_FLAG], [AC_DEFUN([AC_PROG_LD_RELOAD_FLAG])]) +m4_ifndef([AC_DEPLIBS_CHECK_METHOD], [AC_DEFUN([AC_DEPLIBS_CHECK_METHOD])]) +m4_ifndef([AC_LIBTOOL_PROG_COMPILER_NO_RTTI], [AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_NO_RTTI])]) +m4_ifndef([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE], [AC_DEFUN([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE])]) +m4_ifndef([AC_LIBTOOL_PROG_COMPILER_PIC], [AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_PIC])]) +m4_ifndef([AC_LIBTOOL_PROG_LD_SHLIBS], [AC_DEFUN([AC_LIBTOOL_PROG_LD_SHLIBS])]) +m4_ifndef([AC_LIBTOOL_POSTDEP_PREDEP], [AC_DEFUN([AC_LIBTOOL_POSTDEP_PREDEP])]) +m4_ifndef([LT_AC_PROG_EGREP], [AC_DEFUN([LT_AC_PROG_EGREP])]) +m4_ifndef([LT_AC_PROG_SED], [AC_DEFUN([LT_AC_PROG_SED])]) +m4_ifndef([_LT_CC_BASENAME], [AC_DEFUN([_LT_CC_BASENAME])]) +m4_ifndef([_LT_COMPILER_BOILERPLATE], [AC_DEFUN([_LT_COMPILER_BOILERPLATE])]) +m4_ifndef([_LT_LINKER_BOILERPLATE], [AC_DEFUN([_LT_LINKER_BOILERPLATE])]) +m4_ifndef([_AC_PROG_LIBTOOL], [AC_DEFUN([_AC_PROG_LIBTOOL])]) +m4_ifndef([AC_LIBTOOL_SETUP], [AC_DEFUN([AC_LIBTOOL_SETUP])]) +m4_ifndef([_LT_AC_CHECK_DLFCN], [AC_DEFUN([_LT_AC_CHECK_DLFCN])]) +m4_ifndef([AC_LIBTOOL_SYS_DYNAMIC_LINKER], [AC_DEFUN([AC_LIBTOOL_SYS_DYNAMIC_LINKER])]) +m4_ifndef([_LT_AC_TAGCONFIG], [AC_DEFUN([_LT_AC_TAGCONFIG])]) +m4_ifndef([AC_DISABLE_FAST_INSTALL], [AC_DEFUN([AC_DISABLE_FAST_INSTALL])]) +m4_ifndef([_LT_AC_LANG_CXX], [AC_DEFUN([_LT_AC_LANG_CXX])]) +m4_ifndef([_LT_AC_LANG_F77], [AC_DEFUN([_LT_AC_LANG_F77])]) +m4_ifndef([_LT_AC_LANG_GCJ], [AC_DEFUN([_LT_AC_LANG_GCJ])]) +m4_ifndef([AC_LIBTOOL_RC], [AC_DEFUN([AC_LIBTOOL_RC])]) +m4_ifndef([AC_LIBTOOL_LANG_C_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_C_CONFIG])]) +m4_ifndef([_LT_AC_LANG_C_CONFIG], [AC_DEFUN([_LT_AC_LANG_C_CONFIG])]) +m4_ifndef([AC_LIBTOOL_LANG_CXX_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_CXX_CONFIG])]) +m4_ifndef([_LT_AC_LANG_CXX_CONFIG], [AC_DEFUN([_LT_AC_LANG_CXX_CONFIG])]) +m4_ifndef([AC_LIBTOOL_LANG_F77_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_F77_CONFIG])]) +m4_ifndef([_LT_AC_LANG_F77_CONFIG], [AC_DEFUN([_LT_AC_LANG_F77_CONFIG])]) +m4_ifndef([AC_LIBTOOL_LANG_GCJ_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_GCJ_CONFIG])]) +m4_ifndef([_LT_AC_LANG_GCJ_CONFIG], [AC_DEFUN([_LT_AC_LANG_GCJ_CONFIG])]) +m4_ifndef([AC_LIBTOOL_LANG_RC_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_RC_CONFIG])]) +m4_ifndef([_LT_AC_LANG_RC_CONFIG], [AC_DEFUN([_LT_AC_LANG_RC_CONFIG])]) +m4_ifndef([AC_LIBTOOL_CONFIG], [AC_DEFUN([AC_LIBTOOL_CONFIG])]) +m4_ifndef([_LT_AC_FILE_LTDLL_C], [AC_DEFUN([_LT_AC_FILE_LTDLL_C])]) diff --git a/m4/nls.m4 b/m4/nls.m4 new file mode 100644 index 0000000..7967cc2 --- /dev/null +++ b/m4/nls.m4 @@ -0,0 +1,31 @@ +# nls.m4 serial 3 (gettext-0.15) +dnl Copyright (C) 1995-2003, 2005-2006 Free Software 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 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 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 --git a/m4/po.m4 b/m4/po.m4 new file mode 100644 index 0000000..00133ef --- /dev/null +++ b/m4/po.m4 @@ -0,0 +1,428 @@ +# po.m4 serial 13 (gettext-0.15) +dnl Copyright (C) 1995-2006 Free Software 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 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 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) + +dnl Checks for all prerequisites of the po subdirectory. +AC_DEFUN([AM_PO_SUBDIRS], +[ + AC_REQUIRE([AC_PROG_MAKE_SET])dnl + AC_REQUIRE([AC_PROG_INSTALL])dnl + AC_REQUIRE([AM_PROG_MKDIR_P])dnl defined by automake + AC_REQUIRE([AM_NLS])dnl + + dnl Perform the following tests also if --disable-nls has been given, + dnl because they are needed for "make dist" to work. + + dnl Search for GNU msgfmt in the PATH. + dnl The first test excludes Solaris msgfmt and early GNU msgfmt versions. + dnl The second test excludes FreeBSD msgfmt. + AM_PATH_PROG_WITH_TEST(MSGFMT, msgfmt, + [$ac_dir/$ac_word --statistics /dev/null >&]AS_MESSAGE_LOG_FD[ 2>&1 && + (if $ac_dir/$ac_word --statistics /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi)], + :) + AC_PATH_PROG(GMSGFMT, gmsgfmt, $MSGFMT) + + dnl Test whether it is GNU msgfmt >= 0.15. +changequote(,)dnl + case `$MSGFMT --version | sed 1q | sed -e 's,^[^0-9]*,,'` in + '' | 0.[0-9] | 0.[0-9].* | 0.1[0-4] | 0.1[0-4].*) MSGFMT_015=: ;; + *) MSGFMT_015=$MSGFMT ;; + esac +changequote([,])dnl + AC_SUBST([MSGFMT_015]) +changequote(,)dnl + case `$GMSGFMT --version | sed 1q | sed -e 's,^[^0-9]*,,'` in + '' | 0.[0-9] | 0.[0-9].* | 0.1[0-4] | 0.1[0-4].*) GMSGFMT_015=: ;; + *) GMSGFMT_015=$GMSGFMT ;; + esac +changequote([,])dnl + AC_SUBST([GMSGFMT_015]) + + dnl Search for GNU xgettext 0.12 or newer in the PATH. + dnl The first test excludes Solaris xgettext and early GNU xgettext versions. + dnl The second test excludes FreeBSD xgettext. + AM_PATH_PROG_WITH_TEST(XGETTEXT, xgettext, + [$ac_dir/$ac_word --omit-header --copyright-holder= --msgid-bugs-address= /dev/null >&]AS_MESSAGE_LOG_FD[ 2>&1 && + (if $ac_dir/$ac_word --omit-header --copyright-holder= --msgid-bugs-address= /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi)], + :) + dnl Remove leftover from FreeBSD xgettext call. + rm -f messages.po + + dnl Test whether it is GNU xgettext >= 0.15. +changequote(,)dnl + case `$XGETTEXT --version | sed 1q | sed -e 's,^[^0-9]*,,'` in + '' | 0.[0-9] | 0.[0-9].* | 0.1[0-4] | 0.1[0-4].*) XGETTEXT_015=: ;; + *) XGETTEXT_015=$XGETTEXT ;; + esac +changequote([,])dnl + AC_SUBST([XGETTEXT_015]) + + dnl Search for GNU msgmerge 0.11 or newer in the PATH. + AM_PATH_PROG_WITH_TEST(MSGMERGE, msgmerge, + [$ac_dir/$ac_word --update -q /dev/null /dev/null >&]AS_MESSAGE_LOG_FD[ 2>&1], :) + + dnl Installation directories. + dnl Autoconf >= 2.60 defines localedir. For older versions of autoconf, we + dnl have to define it here, so that it can be used in po/Makefile. + test -n "$localedir" || localedir='${datadir}/locale' + AC_SUBST([localedir]) + + AC_CONFIG_COMMANDS([po-directories], [[ + for ac_file in $CONFIG_FILES; do + # Support "outfile[:infile[:infile...]]" + case "$ac_file" in + *:*) ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;; + esac + # PO directories have a Makefile.in generated from Makefile.in.in. + case "$ac_file" in */Makefile.in) + # Adjust a relative srcdir. + ac_dir=`echo "$ac_file"|sed 's%/[^/][^/]*$%%'` + ac_dir_suffix="/`echo "$ac_dir"|sed 's%^\./%%'`" + ac_dots=`echo "$ac_dir_suffix"|sed 's%/[^/]*%../%g'` + # In autoconf-2.13 it is called $ac_given_srcdir. + # In autoconf-2.50 it is called $srcdir. + test -n "$ac_given_srcdir" || ac_given_srcdir="$srcdir" + case "$ac_given_srcdir" in + .) top_srcdir=`echo $ac_dots|sed 's%/$%%'` ;; + /*) top_srcdir="$ac_given_srcdir" ;; + *) top_srcdir="$ac_dots$ac_given_srcdir" ;; + esac + # Treat a directory as a PO directory if and only if it has a + # POTFILES.in file. This allows packages to have multiple PO + # directories under different names or in different locations. + if test -f "$ac_given_srcdir/$ac_dir/POTFILES.in"; then + rm -f "$ac_dir/POTFILES" + test -n "$as_me" && echo "$as_me: creating $ac_dir/POTFILES" || echo "creating $ac_dir/POTFILES" + cat "$ac_given_srcdir/$ac_dir/POTFILES.in" | sed -e "/^#/d" -e "/^[ ]*\$/d" -e "s,.*, $top_srcdir/& \\\\," | sed -e "\$s/\(.*\) \\\\/\1/" > "$ac_dir/POTFILES" + POMAKEFILEDEPS="POTFILES.in" + # ALL_LINGUAS, POFILES, UPDATEPOFILES, DUMMYPOFILES, GMOFILES depend + # on $ac_dir but don't depend on user-specified configuration + # parameters. + if test -f "$ac_given_srcdir/$ac_dir/LINGUAS"; then + # The LINGUAS file contains the set of available languages. + if test -n "$OBSOLETE_ALL_LINGUAS"; then + test -n "$as_me" && echo "$as_me: setting ALL_LINGUAS in configure.in is obsolete" || echo "setting ALL_LINGUAS in configure.in is obsolete" + fi + ALL_LINGUAS_=`sed -e "/^#/d" -e "s/#.*//" "$ac_given_srcdir/$ac_dir/LINGUAS"` + # Hide the ALL_LINGUAS assigment from automake < 1.5. + eval 'ALL_LINGUAS''=$ALL_LINGUAS_' + POMAKEFILEDEPS="$POMAKEFILEDEPS LINGUAS" + else + # The set of available languages was given in configure.in. + # Hide the ALL_LINGUAS assigment from automake < 1.5. + eval 'ALL_LINGUAS''=$OBSOLETE_ALL_LINGUAS' + fi + # Compute POFILES + # as $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(lang).po) + # Compute UPDATEPOFILES + # as $(foreach lang, $(ALL_LINGUAS), $(lang).po-update) + # Compute DUMMYPOFILES + # as $(foreach lang, $(ALL_LINGUAS), $(lang).nop) + # Compute GMOFILES + # as $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(lang).gmo) + case "$ac_given_srcdir" in + .) srcdirpre= ;; + *) srcdirpre='$(srcdir)/' ;; + esac + POFILES= + UPDATEPOFILES= + DUMMYPOFILES= + GMOFILES= + for lang in $ALL_LINGUAS; do + POFILES="$POFILES $srcdirpre$lang.po" + UPDATEPOFILES="$UPDATEPOFILES $lang.po-update" + DUMMYPOFILES="$DUMMYPOFILES $lang.nop" + GMOFILES="$GMOFILES $srcdirpre$lang.gmo" + done + # CATALOGS depends on both $ac_dir and the user's LINGUAS + # environment variable. + INST_LINGUAS= + if test -n "$ALL_LINGUAS"; then + for presentlang in $ALL_LINGUAS; do + useit=no + if test "%UNSET%" != "$LINGUAS"; then + desiredlanguages="$LINGUAS" + else + desiredlanguages="$ALL_LINGUAS" + fi + for desiredlang in $desiredlanguages; do + # Use the presentlang catalog if desiredlang is + # a. equal to presentlang, or + # b. a variant of presentlang (because in this case, + # presentlang can be used as a fallback for messages + # which are not translated in the desiredlang catalog). + case "$desiredlang" in + "$presentlang"*) useit=yes;; + esac + done + if test $useit = yes; then + INST_LINGUAS="$INST_LINGUAS $presentlang" + fi + done + fi + CATALOGS= + if test -n "$INST_LINGUAS"; then + for lang in $INST_LINGUAS; do + CATALOGS="$CATALOGS $lang.gmo" + done + fi + test -n "$as_me" && echo "$as_me: creating $ac_dir/Makefile" || echo "creating $ac_dir/Makefile" + sed -e "/^POTFILES =/r $ac_dir/POTFILES" -e "/^# Makevars/r $ac_given_srcdir/$ac_dir/Makevars" -e "s|@POFILES@|$POFILES|g" -e "s|@UPDATEPOFILES@|$UPDATEPOFILES|g" -e "s|@DUMMYPOFILES@|$DUMMYPOFILES|g" -e "s|@GMOFILES@|$GMOFILES|g" -e "s|@CATALOGS@|$CATALOGS|g" -e "s|@POMAKEFILEDEPS@|$POMAKEFILEDEPS|g" "$ac_dir/Makefile.in" > "$ac_dir/Makefile" + for f in "$ac_given_srcdir/$ac_dir"/Rules-*; do + if test -f "$f"; then + case "$f" in + *.orig | *.bak | *~) ;; + *) cat "$f" >> "$ac_dir/Makefile" ;; + esac + fi + done + fi + ;; + esac + done]], + [# Capture the value of obsolete ALL_LINGUAS because we need it to compute + # POFILES, UPDATEPOFILES, DUMMYPOFILES, GMOFILES, CATALOGS. But hide it + # from automake < 1.5. + eval 'OBSOLETE_ALL_LINGUAS''="$ALL_LINGUAS"' + # Capture the value of LINGUAS because we need it to compute CATALOGS. + LINGUAS="${LINGUAS-%UNSET%}" + ]) +]) + +dnl Postprocesses a Makefile in a directory containing PO files. +AC_DEFUN([AM_POSTPROCESS_PO_MAKEFILE], +[ + # When this code is run, in config.status, two variables have already been + # set: + # - OBSOLETE_ALL_LINGUAS is the value of LINGUAS set in configure.in, + # - LINGUAS is the value of the environment variable LINGUAS at configure + # time. + +changequote(,)dnl + # Adjust a relative srcdir. + ac_dir=`echo "$ac_file"|sed 's%/[^/][^/]*$%%'` + ac_dir_suffix="/`echo "$ac_dir"|sed 's%^\./%%'`" + ac_dots=`echo "$ac_dir_suffix"|sed 's%/[^/]*%../%g'` + # In autoconf-2.13 it is called $ac_given_srcdir. + # In autoconf-2.50 it is called $srcdir. + test -n "$ac_given_srcdir" || ac_given_srcdir="$srcdir" + case "$ac_given_srcdir" in + .) top_srcdir=`echo $ac_dots|sed 's%/$%%'` ;; + /*) top_srcdir="$ac_given_srcdir" ;; + *) top_srcdir="$ac_dots$ac_given_srcdir" ;; + esac + + # Find a way to echo strings without interpreting backslash. + if test "X`(echo '\t') 2>/dev/null`" = 'X\t'; then + gt_echo='echo' + else + if test "X`(printf '%s\n' '\t') 2>/dev/null`" = 'X\t'; then + gt_echo='printf %s\n' + else + echo_func () { + cat < "$ac_file.tmp" + if grep -l '@TCLCATALOGS@' "$ac_file" > /dev/null; then + # Add dependencies that cannot be formulated as a simple suffix rule. + for lang in $ALL_LINGUAS; do + frobbedlang=`echo $lang | sed -e 's/\..*$//' -e 'y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/'` + cat >> "$ac_file.tmp" < /dev/null; then + # Add dependencies that cannot be formulated as a simple suffix rule. + for lang in $ALL_LINGUAS; do + frobbedlang=`echo $lang | sed -e 's/_/-/g' -e 's/^sr-CS/sr-SP/' -e 's/@latin$/-Latn/' -e 's/@cyrillic$/-Cyrl/' -e 's/^sr-SP$/sr-SP-Latn/' -e 's/^uz-UZ$/uz-UZ-Latn/'` + cat >> "$ac_file.tmp" <> "$ac_file.tmp" < +#include +/* The string "%2$d %1$d", with dollar characters protected from the shell's + dollar expansion (possibly an autoconf bug). */ +static char format[] = { '%', '2', '$', 'd', ' ', '%', '1', '$', 'd', '\0' }; +static char buf[100]; +int main () +{ + sprintf (buf, format, 33, 55); + return (strcmp (buf, "55 33") != 0); +}], gt_cv_func_printf_posix=yes, gt_cv_func_printf_posix=no, + [ + AC_EGREP_CPP(notposix, [ +#if defined __NetBSD__ || defined _MSC_VER || defined __MINGW32__ || defined __CYGWIN__ + notposix +#endif + ], gt_cv_func_printf_posix="guessing no", + gt_cv_func_printf_posix="guessing yes") + ]) + ]) + case $gt_cv_func_printf_posix in + *yes) + AC_DEFINE(HAVE_POSIX_PRINTF, 1, + [Define if your printf() function supports format strings with positions.]) + ;; + esac +]) diff --git a/m4/progtest.m4 b/m4/progtest.m4 new file mode 100644 index 0000000..a56365c --- /dev/null +++ b/m4/progtest.m4 @@ -0,0 +1,92 @@ +# progtest.m4 serial 4 (gettext-0.14.2) +dnl Copyright (C) 1996-2003, 2005 Free Software 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 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 package is covered by the GNU General Public License. +dnl They are *not* in the public domain. + +dnl Authors: +dnl Ulrich Drepper , 1996. + +AC_PREREQ(2.50) + +# Search path for a program which passes the given test. + +dnl AM_PATH_PROG_WITH_TEST(VARIABLE, PROG-TO-CHECK-FOR, +dnl TEST-PERFORMED-ON-FOUND_PROGRAM [, VALUE-IF-NOT-FOUND [, PATH]]) +AC_DEFUN([AM_PATH_PROG_WITH_TEST], +[ +# Prepare PATH_SEPARATOR. +# The user is always right. +if test "${PATH_SEPARATOR+set}" != set; then + echo "#! /bin/sh" >conf$$.sh + echo "exit 0" >>conf$$.sh + chmod +x conf$$.sh + if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then + PATH_SEPARATOR=';' + else + PATH_SEPARATOR=: + fi + rm -f conf$$.sh +fi + +# Find out how to test for executable files. Don't use a zero-byte file, +# as systems may use methods other than mode bits to determine executability. +cat >conf$$.file <<_ASEOF +#! /bin/sh +exit 0 +_ASEOF +chmod +x conf$$.file +if test -x conf$$.file >/dev/null 2>&1; then + ac_executable_p="test -x" +else + ac_executable_p="test -f" +fi +rm -f conf$$.file + +# Extract the first word of "$2", so it can be a program name with args. +set dummy $2; ac_word=[$]2 +AC_MSG_CHECKING([for $ac_word]) +AC_CACHE_VAL(ac_cv_path_$1, +[case "[$]$1" in + [[\\/]]* | ?:[[\\/]]*) + ac_cv_path_$1="[$]$1" # Let the user override the test with a path. + ;; + *) + ac_save_IFS="$IFS"; IFS=$PATH_SEPARATOR + for ac_dir in ifelse([$5], , $PATH, [$5]); do + IFS="$ac_save_IFS" + test -z "$ac_dir" && ac_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if $ac_executable_p "$ac_dir/$ac_word$ac_exec_ext"; then + echo "$as_me: trying $ac_dir/$ac_word..." >&AS_MESSAGE_LOG_FD + if [$3]; then + ac_cv_path_$1="$ac_dir/$ac_word$ac_exec_ext" + break 2 + fi + fi + done + done + IFS="$ac_save_IFS" +dnl If no 4th arg is given, leave the cache variable unset, +dnl so AC_PATH_PROGS will keep looking. +ifelse([$4], , , [ test -z "[$]ac_cv_path_$1" && ac_cv_path_$1="$4" +])dnl + ;; +esac])dnl +$1="$ac_cv_path_$1" +if test ifelse([$4], , [-n "[$]$1"], ["[$]$1" != "$4"]); then + AC_MSG_RESULT([$]$1) +else + AC_MSG_RESULT(no) +fi +AC_SUBST($1)dnl +]) diff --git a/m4/signed.m4 b/m4/signed.m4 new file mode 100644 index 0000000..048f593 --- /dev/null +++ b/m4/signed.m4 @@ -0,0 +1,17 @@ +# signed.m4 serial 1 (gettext-0.10.40) +dnl Copyright (C) 2001-2002 Free Software 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 From Bruno Haible. + +AC_DEFUN([bh_C_SIGNED], +[ + AC_CACHE_CHECK([for signed], bh_cv_c_signed, + [AC_TRY_COMPILE(, [signed char x;], bh_cv_c_signed=yes, bh_cv_c_signed=no)]) + if test $bh_cv_c_signed = no; then + AC_DEFINE(signed, , + [Define to empty if the C compiler doesn't support this keyword.]) + fi +]) diff --git a/m4/size_max.m4 b/m4/size_max.m4 new file mode 100644 index 0000000..029e471 --- /dev/null +++ b/m4/size_max.m4 @@ -0,0 +1,60 @@ +# size_max.m4 serial 4 +dnl Copyright (C) 2003, 2005-2006 Free Software 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 From Bruno Haible. + +AC_DEFUN([gl_SIZE_MAX], +[ + AC_CHECK_HEADERS(stdint.h) + dnl First test whether the system already has SIZE_MAX. + AC_MSG_CHECKING([for SIZE_MAX]) + result= + AC_EGREP_CPP([Found it], [ +#include +#if HAVE_STDINT_H +#include +#endif +#ifdef SIZE_MAX +Found it +#endif +], result=yes) + if test -z "$result"; then + dnl Define it ourselves. Here we assume that the type 'size_t' is not wider + dnl than the type 'unsigned long'. Try hard to find a definition that can + dnl be used in a preprocessor #if, i.e. doesn't contain a cast. + _AC_COMPUTE_INT([sizeof (size_t) * CHAR_BIT - 1], size_t_bits_minus_1, + [#include +#include ], size_t_bits_minus_1=) + _AC_COMPUTE_INT([sizeof (size_t) <= sizeof (unsigned int)], fits_in_uint, + [#include ], fits_in_uint=) + if test -n "$size_t_bits_minus_1" && test -n "$fits_in_uint"; then + if test $fits_in_uint = 1; then + dnl Even though SIZE_MAX fits in an unsigned int, it must be of type + dnl 'unsigned long' if the type 'size_t' is the same as 'unsigned long'. + AC_TRY_COMPILE([#include + extern size_t foo; + extern unsigned long foo; + ], [], fits_in_uint=0) + fi + dnl We cannot use 'expr' to simplify this expression, because 'expr' + dnl works only with 'long' integers in the host environment, while we + dnl might be cross-compiling from a 32-bit platform to a 64-bit platform. + if test $fits_in_uint = 1; then + result="(((1U << $size_t_bits_minus_1) - 1) * 2 + 1)" + else + result="(((1UL << $size_t_bits_minus_1) - 1) * 2 + 1)" + fi + else + dnl Shouldn't happen, but who knows... + result='((size_t)~(size_t)0)' + fi + fi + AC_MSG_RESULT([$result]) + if test "$result" != yes; then + AC_DEFINE_UNQUOTED([SIZE_MAX], [$result], + [Define as the maximum value of type 'size_t', if the system doesn't define it.]) + fi +]) diff --git a/m4/stdint_h.m4 b/m4/stdint_h.m4 new file mode 100644 index 0000000..3355f35 --- /dev/null +++ b/m4/stdint_h.m4 @@ -0,0 +1,26 @@ +# stdint_h.m4 serial 5 +dnl Copyright (C) 1997-2004 Free Software 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 From Paul Eggert. + +# Define HAVE_STDINT_H_WITH_UINTMAX if exists, +# doesn't clash with , and declares uintmax_t. + +AC_DEFUN([gl_AC_HEADER_STDINT_H], +[ + AC_CACHE_CHECK([for stdint.h], gl_cv_header_stdint_h, + [AC_TRY_COMPILE( + [#include +#include ], + [uintmax_t i = (uintmax_t) -1;], + gl_cv_header_stdint_h=yes, + gl_cv_header_stdint_h=no)]) + if test $gl_cv_header_stdint_h = yes; then + AC_DEFINE_UNQUOTED(HAVE_STDINT_H_WITH_UINTMAX, 1, + [Define if exists, doesn't clash with , + and declares uintmax_t. ]) + fi +]) diff --git a/m4/uintmax_t.m4 b/m4/uintmax_t.m4 new file mode 100644 index 0000000..bf83ed7 --- /dev/null +++ b/m4/uintmax_t.m4 @@ -0,0 +1,30 @@ +# uintmax_t.m4 serial 9 +dnl Copyright (C) 1997-2004 Free Software 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 From Paul Eggert. + +AC_PREREQ(2.13) + +# Define uintmax_t to 'unsigned long' or 'unsigned long long' +# if it is not already defined in or . + +AC_DEFUN([gl_AC_TYPE_UINTMAX_T], +[ + AC_REQUIRE([gl_AC_HEADER_INTTYPES_H]) + AC_REQUIRE([gl_AC_HEADER_STDINT_H]) + if test $gl_cv_header_inttypes_h = no && test $gl_cv_header_stdint_h = no; then + AC_REQUIRE([gl_AC_TYPE_UNSIGNED_LONG_LONG]) + test $ac_cv_type_unsigned_long_long = yes \ + && ac_type='unsigned long long' \ + || ac_type='unsigned long' + AC_DEFINE_UNQUOTED(uintmax_t, $ac_type, + [Define to unsigned long or unsigned long long + if and don't define.]) + else + AC_DEFINE(HAVE_UINTMAX_T, 1, + [Define if you have the 'uintmax_t' type in or .]) + fi +]) diff --git a/m4/ulonglong.m4 b/m4/ulonglong.m4 new file mode 100644 index 0000000..dee10cc --- /dev/null +++ b/m4/ulonglong.m4 @@ -0,0 +1,23 @@ +# ulonglong.m4 serial 4 +dnl Copyright (C) 1999-2004 Free Software 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 From Paul Eggert. + +# Define HAVE_UNSIGNED_LONG_LONG if 'unsigned long long' works. + +AC_DEFUN([gl_AC_TYPE_UNSIGNED_LONG_LONG], +[ + AC_CACHE_CHECK([for unsigned long long], ac_cv_type_unsigned_long_long, + [AC_TRY_LINK([unsigned long long ull = 1ULL; int i = 63;], + [unsigned long long ullmax = (unsigned long long) -1; + return ull << i | ull >> i | ullmax / ull | ullmax % ull;], + ac_cv_type_unsigned_long_long=yes, + ac_cv_type_unsigned_long_long=no)]) + if test $ac_cv_type_unsigned_long_long = yes; then + AC_DEFINE(HAVE_UNSIGNED_LONG_LONG, 1, + [Define if you have the 'unsigned long long' type.]) + fi +]) diff --git a/m4/visibility.m4 b/m4/visibility.m4 new file mode 100644 index 0000000..2ff6330 --- /dev/null +++ b/m4/visibility.m4 @@ -0,0 +1,52 @@ +# visibility.m4 serial 1 (gettext-0.15) +dnl Copyright (C) 2005 Free Software 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 From Bruno Haible. + +dnl Tests whether the compiler supports the command-line option +dnl -fvisibility=hidden and the function and variable attributes +dnl __attribute__((__visibility__("hidden"))) and +dnl __attribute__((__visibility__("default"))). +dnl Does *not* test for __visibility__("protected") - which has tricky +dnl semantics (see the 'vismain' test in glibc) and does not exist e.g. on +dnl MacOS X. +dnl Does *not* test for __visibility__("internal") - which has processor +dnl dependent semantics. +dnl Does *not* test for #pragma GCC visibility push(hidden) - which is +dnl "really only recommended for legacy code". +dnl Set the variable CFLAG_VISIBILITY. +dnl Defines and sets the variable HAVE_VISIBILITY. + +AC_DEFUN([gl_VISIBILITY], +[ + AC_REQUIRE([AC_PROG_CC]) + CFLAG_VISIBILITY= + HAVE_VISIBILITY=0 + if test -n "$GCC"; then + AC_MSG_CHECKING([for simple visibility declarations]) + AC_CACHE_VAL(gl_cv_cc_visibility, [ + gl_save_CFLAGS="$CFLAGS" + CFLAGS="$CFLAGS -fvisibility=hidden" + AC_TRY_COMPILE( + [extern __attribute__((__visibility__("hidden"))) int hiddenvar; + extern __attribute__((__visibility__("default"))) int exportedvar; + extern __attribute__((__visibility__("hidden"))) int hiddenfunc (void); + extern __attribute__((__visibility__("default"))) int exportedfunc (void);], + [], + gl_cv_cc_visibility=yes, + gl_cv_cc_visibility=no) + CFLAGS="$gl_save_CFLAGS"]) + AC_MSG_RESULT([$gl_cv_cc_visibility]) + if test $gl_cv_cc_visibility = yes; then + CFLAG_VISIBILITY="-fvisibility=hidden" + HAVE_VISIBILITY=1 + fi + fi + AC_SUBST([CFLAG_VISIBILITY]) + AC_SUBST([HAVE_VISIBILITY]) + AC_DEFINE_UNQUOTED([HAVE_VISIBILITY], [$HAVE_VISIBILITY], + [Define to 1 or 0, depending whether the compiler supports simple visibility declarations.]) +]) diff --git a/m4/wchar_t.m4 b/m4/wchar_t.m4 new file mode 100644 index 0000000..cde2129 --- /dev/null +++ b/m4/wchar_t.m4 @@ -0,0 +1,20 @@ +# wchar_t.m4 serial 1 (gettext-0.12) +dnl Copyright (C) 2002-2003 Free Software 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 From Bruno Haible. +dnl Test whether has the 'wchar_t' type. +dnl Prerequisite: AC_PROG_CC + +AC_DEFUN([gt_TYPE_WCHAR_T], +[ + AC_CACHE_CHECK([for wchar_t], gt_cv_c_wchar_t, + [AC_TRY_COMPILE([#include + wchar_t foo = (wchar_t)'\0';], , + gt_cv_c_wchar_t=yes, gt_cv_c_wchar_t=no)]) + if test $gt_cv_c_wchar_t = yes; then + AC_DEFINE(HAVE_WCHAR_T, 1, [Define if you have the 'wchar_t' type.]) + fi +]) diff --git a/m4/wint_t.m4 b/m4/wint_t.m4 new file mode 100644 index 0000000..b8fff9c --- /dev/null +++ b/m4/wint_t.m4 @@ -0,0 +1,20 @@ +# wint_t.m4 serial 1 (gettext-0.12) +dnl Copyright (C) 2003 Free Software 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 From Bruno Haible. +dnl Test whether has the 'wint_t' type. +dnl Prerequisite: AC_PROG_CC + +AC_DEFUN([gt_TYPE_WINT_T], +[ + AC_CACHE_CHECK([for wint_t], gt_cv_c_wint_t, + [AC_TRY_COMPILE([#include + wint_t foo = (wchar_t)'\0';], , + gt_cv_c_wint_t=yes, gt_cv_c_wint_t=no)]) + if test $gt_cv_c_wint_t = yes; then + AC_DEFINE(HAVE_WINT_T, 1, [Define if you have the 'wint_t' type.]) + fi +]) diff --git a/m4/xsize.m4 b/m4/xsize.m4 new file mode 100644 index 0000000..85bb721 --- /dev/null +++ b/m4/xsize.m4 @@ -0,0 +1,13 @@ +# xsize.m4 serial 3 +dnl Copyright (C) 2003-2004 Free Software 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. + +AC_DEFUN([gl_XSIZE], +[ + dnl Prerequisites of lib/xsize.h. + AC_REQUIRE([gl_SIZE_MAX]) + AC_REQUIRE([AC_C_INLINE]) + AC_CHECK_HEADERS(stdint.h) +]) diff --git a/missing b/missing new file mode 100755 index 0000000..894e786 --- /dev/null +++ b/missing @@ -0,0 +1,360 @@ +#! /bin/sh +# Common stub for a few missing GNU programs while installing. + +scriptversion=2005-06-08.21 + +# Copyright (C) 1996, 1997, 1999, 2000, 2002, 2003, 2004, 2005 +# Free Software Foundation, Inc. +# Originally by Fran,cois Pinard , 1996. + +# 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, 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. + +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that program. + +if test $# -eq 0; then + echo 1>&2 "Try \`$0 --help' for more information" + exit 1 +fi + +run=: + +# In the cases where this matters, `missing' is being run in the +# srcdir already. +if test -f configure.ac; then + configure_ac=configure.ac +else + configure_ac=configure.in +fi + +msg="missing on your system" + +case "$1" in +--run) + # Try to run requested program, and just exit if it succeeds. + run= + shift + "$@" && exit 0 + # Exit code 63 means version mismatch. This often happens + # when the user try to use an ancient version of a tool on + # a file that requires a minimum version. In this case we + # we should proceed has if the program had been absent, or + # if --run hadn't been passed. + if test $? = 63; then + run=: + msg="probably too old" + fi + ;; + + -h|--h|--he|--hel|--help) + echo "\ +$0 [OPTION]... PROGRAM [ARGUMENT]... + +Handle \`PROGRAM [ARGUMENT]...' for when PROGRAM is missing, or return an +error status if there is no known handling for PROGRAM. + +Options: + -h, --help display this help and exit + -v, --version output version information and exit + --run try to run the given command, and emulate it if it fails + +Supported PROGRAM values: + aclocal touch file \`aclocal.m4' + autoconf touch file \`configure' + autoheader touch file \`config.h.in' + automake touch all \`Makefile.in' files + bison create \`y.tab.[ch]', if possible, from existing .[ch] + flex create \`lex.yy.c', if possible, from existing .c + help2man touch the output file + lex create \`lex.yy.c', if possible, from existing .c + makeinfo touch the output file + tar try tar, gnutar, gtar, then tar without non-portable flags + yacc create \`y.tab.[ch]', if possible, from existing .[ch] + +Send bug reports to ." + exit $? + ;; + + -v|--v|--ve|--ver|--vers|--versi|--versio|--version) + echo "missing $scriptversion (GNU Automake)" + exit $? + ;; + + -*) + echo 1>&2 "$0: Unknown \`$1' option" + echo 1>&2 "Try \`$0 --help' for more information" + exit 1 + ;; + +esac + +# Now exit if we have it, but it failed. Also exit now if we +# don't have it and --version was passed (most likely to detect +# the program). +case "$1" in + lex|yacc) + # Not GNU programs, they don't have --version. + ;; + + tar) + if test -n "$run"; then + echo 1>&2 "ERROR: \`tar' requires --run" + exit 1 + elif test "x$2" = "x--version" || test "x$2" = "x--help"; then + exit 1 + fi + ;; + + *) + if test -z "$run" && ($1 --version) > /dev/null 2>&1; then + # We have it, but it failed. + exit 1 + elif test "x$2" = "x--version" || test "x$2" = "x--help"; then + # Could not run --version or --help. This is probably someone + # running `$TOOL --version' or `$TOOL --help' to check whether + # $TOOL exists and not knowing $TOOL uses missing. + exit 1 + fi + ;; +esac + +# If it does not exist, or fails to run (possibly an outdated version), +# try to emulate it. +case "$1" in + aclocal*) + echo 1>&2 "\ +WARNING: \`$1' is $msg. You should only need it if + you modified \`acinclude.m4' or \`${configure_ac}'. You might want + to install the \`Automake' and \`Perl' packages. Grab them from + any GNU archive site." + touch aclocal.m4 + ;; + + autoconf) + echo 1>&2 "\ +WARNING: \`$1' is $msg. You should only need it if + you modified \`${configure_ac}'. You might want to install the + \`Autoconf' and \`GNU m4' packages. Grab them from any GNU + archive site." + touch configure + ;; + + autoheader) + echo 1>&2 "\ +WARNING: \`$1' is $msg. You should only need it if + you modified \`acconfig.h' or \`${configure_ac}'. You might want + to install the \`Autoconf' and \`GNU m4' packages. Grab them + from any GNU archive site." + files=`sed -n 's/^[ ]*A[CM]_CONFIG_HEADER(\([^)]*\)).*/\1/p' ${configure_ac}` + test -z "$files" && files="config.h" + touch_files= + for f in $files; do + case "$f" in + *:*) touch_files="$touch_files "`echo "$f" | + sed -e 's/^[^:]*://' -e 's/:.*//'`;; + *) touch_files="$touch_files $f.in";; + esac + done + touch $touch_files + ;; + + automake*) + echo 1>&2 "\ +WARNING: \`$1' is $msg. You should only need it if + you modified \`Makefile.am', \`acinclude.m4' or \`${configure_ac}'. + You might want to install the \`Automake' and \`Perl' packages. + Grab them from any GNU archive site." + find . -type f -name Makefile.am -print | + sed 's/\.am$/.in/' | + while read f; do touch "$f"; done + ;; + + autom4te) + echo 1>&2 "\ +WARNING: \`$1' is needed, but is $msg. + You might have modified some files without having the + proper tools for further handling them. + You can get \`$1' as part of \`Autoconf' from any GNU + archive site." + + file=`echo "$*" | sed -n 's/.*--output[ =]*\([^ ]*\).*/\1/p'` + test -z "$file" && file=`echo "$*" | sed -n 's/.*-o[ ]*\([^ ]*\).*/\1/p'` + if test -f "$file"; then + touch $file + else + test -z "$file" || exec >$file + echo "#! /bin/sh" + echo "# Created by GNU Automake missing as a replacement of" + echo "# $ $@" + echo "exit 0" + chmod +x $file + exit 1 + fi + ;; + + bison|yacc) + echo 1>&2 "\ +WARNING: \`$1' $msg. You should only need it if + you modified a \`.y' file. You may need the \`Bison' package + in order for those modifications to take effect. You can get + \`Bison' from any GNU archive site." + rm -f y.tab.c y.tab.h + if [ $# -ne 1 ]; then + eval LASTARG="\${$#}" + case "$LASTARG" in + *.y) + SRCFILE=`echo "$LASTARG" | sed 's/y$/c/'` + if [ -f "$SRCFILE" ]; then + cp "$SRCFILE" y.tab.c + fi + SRCFILE=`echo "$LASTARG" | sed 's/y$/h/'` + if [ -f "$SRCFILE" ]; then + cp "$SRCFILE" y.tab.h + fi + ;; + esac + fi + if [ ! -f y.tab.h ]; then + echo >y.tab.h + fi + if [ ! -f y.tab.c ]; then + echo 'main() { return 0; }' >y.tab.c + fi + ;; + + lex|flex) + echo 1>&2 "\ +WARNING: \`$1' is $msg. You should only need it if + you modified a \`.l' file. You may need the \`Flex' package + in order for those modifications to take effect. You can get + \`Flex' from any GNU archive site." + rm -f lex.yy.c + if [ $# -ne 1 ]; then + eval LASTARG="\${$#}" + case "$LASTARG" in + *.l) + SRCFILE=`echo "$LASTARG" | sed 's/l$/c/'` + if [ -f "$SRCFILE" ]; then + cp "$SRCFILE" lex.yy.c + fi + ;; + esac + fi + if [ ! -f lex.yy.c ]; then + echo 'main() { return 0; }' >lex.yy.c + fi + ;; + + help2man) + echo 1>&2 "\ +WARNING: \`$1' is $msg. You should only need it if + you modified a dependency of a manual page. You may need the + \`Help2man' package in order for those modifications to take + effect. You can get \`Help2man' from any GNU archive site." + + file=`echo "$*" | sed -n 's/.*-o \([^ ]*\).*/\1/p'` + if test -z "$file"; then + file=`echo "$*" | sed -n 's/.*--output=\([^ ]*\).*/\1/p'` + fi + if [ -f "$file" ]; then + touch $file + else + test -z "$file" || exec >$file + echo ".ab help2man is required to generate this page" + exit 1 + fi + ;; + + makeinfo) + echo 1>&2 "\ +WARNING: \`$1' is $msg. You should only need it if + you modified a \`.texi' or \`.texinfo' file, or any other file + indirectly affecting the aspect of the manual. The spurious + call might also be the consequence of using a buggy \`make' (AIX, + DU, IRIX). You might want to install the \`Texinfo' package or + the \`GNU make' package. Grab either from any GNU archive site." + # The file to touch is that specified with -o ... + file=`echo "$*" | sed -n 's/.*-o \([^ ]*\).*/\1/p'` + if test -z "$file"; then + # ... or it is the one specified with @setfilename ... + infile=`echo "$*" | sed 's/.* \([^ ]*\) *$/\1/'` + file=`sed -n '/^@setfilename/ { s/.* \([^ ]*\) *$/\1/; p; q; }' $infile` + # ... or it is derived from the source name (dir/f.texi becomes f.info) + test -z "$file" && file=`echo "$infile" | sed 's,.*/,,;s,.[^.]*$,,'`.info + fi + # If the file does not exist, the user really needs makeinfo; + # let's fail without touching anything. + test -f $file || exit 1 + touch $file + ;; + + tar) + shift + + # We have already tried tar in the generic part. + # Look for gnutar/gtar before invocation to avoid ugly error + # messages. + if (gnutar --version > /dev/null 2>&1); then + gnutar "$@" && exit 0 + fi + if (gtar --version > /dev/null 2>&1); then + gtar "$@" && exit 0 + fi + firstarg="$1" + if shift; then + case "$firstarg" in + *o*) + firstarg=`echo "$firstarg" | sed s/o//` + tar "$firstarg" "$@" && exit 0 + ;; + esac + case "$firstarg" in + *h*) + firstarg=`echo "$firstarg" | sed s/h//` + tar "$firstarg" "$@" && exit 0 + ;; + esac + fi + + echo 1>&2 "\ +WARNING: I can't seem to be able to run \`tar' with the given arguments. + You may want to install GNU tar or Free paxutils, or check the + command line arguments." + exit 1 + ;; + + *) + echo 1>&2 "\ +WARNING: \`$1' is needed, and is $msg. + You might have modified some files without having the + proper tools for further handling them. Check the \`README' file, + it often tells you about the needed prerequisites for installing + this package. You may also peek at any GNU archive site, in case + some other package would contain this missing \`$1' program." + exit 1 + ;; +esac + +exit 0 + +# Local variables: +# eval: (add-hook 'write-file-hooks 'time-stamp) +# time-stamp-start: "scriptversion=" +# time-stamp-format: "%:y-%02m-%02d.%02H" +# time-stamp-end: "$" +# End: diff --git a/mkinstalldirs b/mkinstalldirs new file mode 100755 index 0000000..d2d5f21 --- /dev/null +++ b/mkinstalldirs @@ -0,0 +1,111 @@ +#! /bin/sh +# mkinstalldirs --- make directory hierarchy +# Author: Noah Friedman +# Created: 1993-05-16 +# Public domain + +errstatus=0 +dirmode="" + +usage="\ +Usage: mkinstalldirs [-h] [--help] [-m mode] dir ..." + +# process command line arguments +while test $# -gt 0 ; do + case $1 in + -h | --help | --h*) # -h for help + echo "$usage" 1>&2 + exit 0 + ;; + -m) # -m PERM arg + shift + test $# -eq 0 && { echo "$usage" 1>&2; exit 1; } + dirmode=$1 + shift + ;; + --) # stop option processing + shift + break + ;; + -*) # unknown option + echo "$usage" 1>&2 + exit 1 + ;; + *) # first non-opt arg + break + ;; + esac +done + +for file +do + if test -d "$file"; then + shift + else + break + fi +done + +case $# in + 0) exit 0 ;; +esac + +case $dirmode in + '') + if mkdir -p -- . 2>/dev/null; then + echo "mkdir -p -- $*" + exec mkdir -p -- "$@" + fi + ;; + *) + if mkdir -m "$dirmode" -p -- . 2>/dev/null; then + echo "mkdir -m $dirmode -p -- $*" + exec mkdir -m "$dirmode" -p -- "$@" + fi + ;; +esac + +for file +do + set fnord `echo ":$file" | sed -ne 's/^:\//#/;s/^://;s/\// /g;s/^#/\//;p'` + shift + + pathcomp= + for d + do + pathcomp="$pathcomp$d" + case $pathcomp in + -*) pathcomp=./$pathcomp ;; + esac + + if test ! -d "$pathcomp"; then + echo "mkdir $pathcomp" + + mkdir "$pathcomp" || lasterr=$? + + if test ! -d "$pathcomp"; then + errstatus=$lasterr + else + if test ! -z "$dirmode"; then + echo "chmod $dirmode $pathcomp" + lasterr="" + chmod "$dirmode" "$pathcomp" || lasterr=$? + + if test ! -z "$lasterr"; then + errstatus=$lasterr + fi + fi + fi + fi + + pathcomp="$pathcomp/" + done +done + +exit $errstatus + +# Local Variables: +# mode: shell-script +# sh-indentation: 2 +# End: +# mkinstalldirs ends here diff --git a/packaging/pam.patch b/packaging/pam.patch new file mode 100644 index 0000000..b109a2d --- /dev/null +++ b/packaging/pam.patch @@ -0,0 +1,63 @@ +Index: pwdutils-3.2.19/etc/pam.d/chage +=================================================================== +--- pwdutils-3.2.19.orig/etc/pam.d/chage ++++ pwdutils-3.2.19/etc/pam.d/chage +@@ -1,6 +1,6 @@ + #%PAM-1.0 + auth sufficient pam_rootok.so +-auth include common-auth +-account include common-account +-password include common-password +-session include common-session ++auth include system-auth ++account include system-auth ++password include system-auth ++session include system-auth +Index: pwdutils-3.2.19/etc/pam.d/chfn +=================================================================== +--- pwdutils-3.2.19.orig/etc/pam.d/chfn ++++ pwdutils-3.2.19/etc/pam.d/chfn +@@ -1,8 +1,8 @@ + #%PAM-1.0 + # For chfn command + auth sufficient pam_rootok.so +-auth include common-auth +-account include common-account +-password include common-password +-session include common-session ++auth include system-auth ++account include system-auth ++password include system-auth ++session include system-auth + +Index: pwdutils-3.2.19/etc/pam.d/chsh +=================================================================== +--- pwdutils-3.2.19.orig/etc/pam.d/chsh ++++ pwdutils-3.2.19/etc/pam.d/chsh +@@ -1,8 +1,8 @@ + #%PAM-1.0 + # For chsh command + auth sufficient pam_rootok.so +-auth include common-auth +-account include common-account +-password include common-password +-session include common-session ++auth include system-auth ++account include system-auth ++password include system-auth ++session include system-auth + +Index: pwdutils-3.2.19/etc/pam.d/passwd +=================================================================== +--- pwdutils-3.2.19.orig/etc/pam.d/passwd ++++ pwdutils-3.2.19/etc/pam.d/passwd +@@ -1,5 +1,5 @@ + #%PAM-1.0 +-auth include common-auth +-account include common-account +-password include common-password +-session include common-session ++auth include system-auth ++account include system-auth ++password include system-auth ++session include system-auth diff --git a/packaging/pwdutils-no-add-needed.patch b/packaging/pwdutils-no-add-needed.patch new file mode 100644 index 0000000..08321ed --- /dev/null +++ b/packaging/pwdutils-no-add-needed.patch @@ -0,0 +1,217 @@ +--- configure.in.orig ++++ configure.in +@@ -3,9 +3,11 @@ dnl Copyright (c) 2001-2010 Thorsten Kuk + dnl + dnl Author: Thorsten Kukuk + dnl +-AC_INIT(src/passwd.c) ++AC_INIT ++AC_CONFIG_SRCDIR([src/passwd.c]) + AM_INIT_AUTOMAKE("pwdutils", 3.2.19) +-AM_CONFIG_HEADER(config.h) ++AC_CONFIG_MACRO_DIR([m4]) ++AC_CONFIG_HEADERS([config.h]) + AC_PREFIX_DEFAULT(/usr) + AC_CANONICAL_HOST + +@@ -45,13 +47,13 @@ dnl Choose between lib and lib64 + fi + + dnl Checks for programs. +-AC_PROG_CC ++AC_PROG_CC_STDC + AM_PROG_CC_C_O +-AC_GNU_SOURCE +-AC_ISC_POSIX ++AC_USE_SYSTEM_EXTENSIONS ++AC_SEARCH_LIBS([strerror],[cposix]) + AC_PROG_INSTALL + AC_PROG_MAKE_SET +-AC_PROG_LIBTOOL ++LT_INIT + AC_SYS_LARGEFILE + + EXTRA_CFLAGS="" +@@ -93,15 +95,14 @@ AM_WITH_DMALLOC + + dnl Should we build pam_rpasswd? + AC_ARG_ENABLE([pam_rpasswd], +- AC_HELP_STRING([--enable-pam_rpasswd],[Enable build of pam_rpasswd])) ++ AS_HELP_STRING([--enable-pam_rpasswd],[Enable build of pam_rpasswd])) + AM_CONDITIONAL(build_PAM_RPASSWD, test "$enable_pam_rpasswd" = "yes") + + dnl Should we compile with SELinux support? default: no + AC_ARG_ENABLE([selinux], +- AC_HELP_STRING([--disable-selinux],[Disable SELinux support])) ++ AS_HELP_STRING([--disable-selinux],[Disable SELinux support])) + AC_ARG_ENABLE([static-selinux], +- AC_HELP_STRING([--enable-static-selinux], +- [Compile in SELinux support static])) ++ AS_HELP_STRING([--enable-static-selinux],[Compile in SELinux support static])) + if test "$enable_selinux" \!= "no" -a "$enable_static_selinux" = "yes" ; then + AC_CHECK_LIB(selinux,is_selinux_enabled, + [AC_DEFINE(WITH_SELINUX,1, +@@ -120,7 +121,7 @@ AC_SUBST(SELINUX_LIB) + + dnl Check for SLP support for rpasswd/rpasswdd + AC_ARG_ENABLE([slp], +- AC_HELP_STRING([--disable-slp],[Disable SLP support])) ++ AS_HELP_STRING([--disable-slp],[Disable SLP support])) + + AC_CHECK_HEADERS([slp.h]) + +@@ -137,7 +138,7 @@ AC_SUBST(SLP_LIBS) + + LAUS_LIBS="" + AC_ARG_ENABLE([laus-plugin], +- AC_HELP_STRING([--disable-laus-plugin],[Disable build of LAuS plugin])) ++ AS_HELP_STRING([--disable-laus-plugin],[Disable build of LAuS plugin])) + if test "$enable_laus_plugin" \!= "no" + then + AC_CHECK_HEADER([laus.h], [ laus_header="yes" ], [ laus_header="no" ]) +@@ -151,7 +152,7 @@ AM_CONDITIONAL(build_LAUS_PLUGIN, test - + + AUDIT_LIBS="" + AC_ARG_ENABLE([audit-plugin], +- AC_HELP_STRING([--disable-audit-plugin],[Disable build of Linux audit plugin])) ++ AS_HELP_STRING([--disable-audit-plugin],[Disable build of Linux audit plugin])) + if test "$enable_audit_plugin" \!= "no" + then + AC_CHECK_HEADER([libaudit.h], [audit_header="yes"], [audit_header="no"]) +@@ -298,9 +299,9 @@ if test "$enable_ldap" \!= "no"; then + + AC_CHECK_FUNCS(ldap_set_rebind_proc) + AC_CACHE_CHECK(whether ldap_set_rebind_proc takes 3 arguments, pam_ldap_cv_ldap_set_rebind_proc, [ +- AC_TRY_COMPILE([ ++ AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ + #include +-#include ], [ldap_set_rebind_proc(0, 0, 0);], [pam_ldap_cv_ldap_set_rebind_proc=3], [pam_ldap_cv_ldap_set_rebind_proc=2]) ]) ++#include ]], [[ldap_set_rebind_proc(0, 0, 0);]])],[pam_ldap_cv_ldap_set_rebind_proc=3],[pam_ldap_cv_ldap_set_rebind_proc=2]) ]) + AC_DEFINE_UNQUOTED(LDAP_SET_REBIND_PROC_ARGS, $pam_ldap_cv_ldap_set_rebind_proc, ["Define to the number of arguments to ldap_set_rebindproc"]) + + dnl restore old LIBS variable +@@ -321,7 +322,7 @@ AC_CHECK_FUNCS(nscd_flush_cache) + LIBS=$BACKUP_LIBS + + dnl internationalization macros +-AM_GNU_GETTEXT_VERSION ++AM_GNU_GETTEXT_VERSION(0.16.1) + AM_GNU_GETTEXT([external]) + + AC_CHECK_HEADERS(dirent.h) +@@ -334,7 +335,8 @@ AC_CHECK_HEADERS(bioapi.h bioapi_util.h) + AC_CHECK_LIB([bioapi100], [BioAPI_Init], BIOAPI_LIB="-lbioapi100", BIOAPI_LIB="") + AC_SUBST(BIOAPI_LIB) + +-AC_OUTPUT(Makefile etc/Makefile lib/Makefile src/Makefile plugins/Makefile po/Makefile.in m4/Makefile ) ++AC_CONFIG_FILES([Makefile etc/Makefile lib/Makefile src/Makefile plugins/Makefile po/Makefile.in m4/Makefile ]) ++AC_OUTPUT + + if test "$NSCD_LIB" == "" ; then + AC_MSG_WARN([libnscd not found, cannot flush nscd tables!]) +--- src/Makefile.am.orig ++++ src/Makefile.am +@@ -60,32 +60,32 @@ pam_rpasswd_la_LIBADD = @PAM_LIBS@ @TLS_ + + chage_SOURCES = chage.c + chage_CFLAGS = @PIE_CFLAGS@ +-chage_LDADD = ../lib/libpwdutils.a @PAM_LIBS@ @LDAP_LIBS@ @NSL_LIB@ @SELINUX_LIB@ @ATTR_LIB@ @NSCD_LIB@ ++chage_LDADD = ../lib/libpwdutils.a @DL_LIBS@ @PAM_LIBS@ @LDAP_LIBS@ @NSL_LIB@ @SELINUX_LIB@ @ATTR_LIB@ @NSCD_LIB@ + chage_LDFLAGS = @PIE_LDFLAGS@ + + chfn_SOURCES = chfn.c + chfn_CFLAGS = @PIE_CFLAGS@ +-chfn_LDADD = ../lib/libpwdutils.a @PAM_LIBS@ @LDAP_LIBS@ @NSL_LIB@ @SELINUX_LIB@ @ATTR_LIB@ @NSCD_LIB@ @NSCD_LIB@ ++chfn_LDADD = ../lib/libpwdutils.a @DL_LIBS@ @PAM_LIBS@ @LDAP_LIBS@ @NSL_LIB@ @SELINUX_LIB@ @ATTR_LIB@ @NSCD_LIB@ @NSCD_LIB@ + chfn_LDFLAGS = @PIE_LDFLAGS@ + + chsh_SOURCES = chsh.c + chsh_CFLAGS = @PIE_CFLAGS@ +-chsh_LDADD = ../lib/libpwdutils.a @PAM_LIBS@ @LDAP_LIBS@ @NSL_LIB@ @SELINUX_LIB@ @ATTR_LIB@ @NSCD_LIB@ ++chsh_LDADD = ../lib/libpwdutils.a @DL_LIBS@ @PAM_LIBS@ @LDAP_LIBS@ @NSL_LIB@ @SELINUX_LIB@ @ATTR_LIB@ @NSCD_LIB@ + chsh_LDFLAGS = @PIE_LDFLAGS@ + + chpasswd_SOURCES = chpasswd.c +-chpasswd_LDADD = ../lib/libpwdutils.a @LDAP_LIBS@ @NSL_LIB@ @CRYPT_LIB@ @SELINUX_LIB@ @ATTR_LIB@ @NSCD_LIB@ ++chpasswd_LDADD = ../lib/libpwdutils.a @DL_LIBS@ @LDAP_LIBS@ @NSL_LIB@ @CRYPT_LIB@ @SELINUX_LIB@ @ATTR_LIB@ @NSCD_LIB@ + + passwd_SOURCES = passwd.c + passwd_CFLAGS = @PIE_CFLAGS@ +-passwd_LDADD = ../lib/libpwdutils.a @PAM_LIBS@ @LDAP_LIBS@ @NSL_LIB@ @SELINUX_LIB@ @ATTR_LIB@ @NSCD_LIB@ @BIOAPI_LIB@ ++passwd_LDADD = ../lib/libpwdutils.a @DL_LIBS@ @PAM_LIBS@ @LDAP_LIBS@ @NSL_LIB@ @SELINUX_LIB@ @ATTR_LIB@ @NSCD_LIB@ @BIOAPI_LIB@ + passwd_LDFLAGS = @PIE_LDFLAGS@ + + rpasswd_SOURCES = rpasswd.c +-rpasswd_LDADD = ../lib/libpwdutils.a @TLS_LIBS@ @SLP_LIBS@ ++rpasswd_LDADD = ../lib/libpwdutils.a @DL_LIBS@ @TLS_LIBS@ @SLP_LIBS@ + + rpasswdd_SOURCES = rpasswdd.c +-rpasswdd_LDADD = ../lib/libpwdutils.a @PAM_LIBS@ @TLS_LIBS@ @SLP_LIBS@ ++rpasswdd_LDADD = ../lib/libpwdutils.a @DL_LIBS@ @PAM_LIBS@ @TLS_LIBS@ @SLP_LIBS@ + rpasswdd_CFLAGS = @EXTRA_CFLAGS@ @PIE_CFLAGS@ + rpasswdd_LDFLAGS = @PIE_LDFLAGS@ + +@@ -97,17 +97,17 @@ expiry_LDFLAGS = @PIE_LDFLAGS@ + + gpasswd_SOURCES = gpasswd.c + gpasswd_CFLAGS = @PIE_CFLAGS@ +-gpasswd_LDADD = ../lib/libpwdutils.a @CRYPT_LIB@ @NSL_LIB@ @LDAP_LIBS@ @SELINUX_LIB@ @ATTR_LIB@ @NSCD_LIB@ ++gpasswd_LDADD = ../lib/libpwdutils.a @DL_LIBS@ @CRYPT_LIB@ @NSL_LIB@ @LDAP_LIBS@ @SELINUX_LIB@ @ATTR_LIB@ @NSCD_LIB@ + gpasswd_LDFLAGS = @PIE_LDFLAGS@ + + groupadd_SOURCES = groupadd.c +-groupadd_LDADD = ../lib/libpwdutils.a @PAM_LIBS@ @LDAP_LIBS@ @NSL_LIB@ @SELINUX_LIB@ @ATTR_LIB@ @NSCD_LIB@ ++groupadd_LDADD = ../lib/libpwdutils.a @DL_LIBS@ @PAM_LIBS@ @LDAP_LIBS@ @NSL_LIB@ @SELINUX_LIB@ @ATTR_LIB@ @NSCD_LIB@ + + groupdel_SOURCES = groupdel.c +-groupdel_LDADD = ../lib/libpwdutils.a @PAM_LIBS@ @LDAP_LIBS@ @NSL_LIB@ @SELINUX_LIB@ @ATTR_LIB@ @NSCD_LIB@ ++groupdel_LDADD = ../lib/libpwdutils.a @DL_LIBS@ @PAM_LIBS@ @LDAP_LIBS@ @NSL_LIB@ @SELINUX_LIB@ @ATTR_LIB@ @NSCD_LIB@ + + groupmod_SOURCES = groupmod.c +-groupmod_LDADD = ../lib/libpwdutils.a @PAM_LIBS@ @LDAP_LIBS@ @NSL_LIB@ @SELINUX_LIB@ @ATTR_LIB@ @NSCD_LIB@ ++groupmod_LDADD = ../lib/libpwdutils.a @DL_LIBS@ @PAM_LIBS@ @LDAP_LIBS@ @NSL_LIB@ @SELINUX_LIB@ @ATTR_LIB@ @NSCD_LIB@ + + grpck_SOURCES = grpck.c + grpck_LDADD = ../lib/libpwdutils.a @SELINUX_LIB@ @ATTR_LIB@ +@@ -116,32 +116,32 @@ grpconv_SOURCES = grpconv.c + grpconv_LDADD = ../lib/libpwdutils.a + + grpunconv_SOURCES = grpunconv.c +-grpunconv_LDADD = ../lib/libpwdutils.a @LDAP_LIBS@ @NSL_LIB@ @SELINUX_LIB@ @ATTR_LIB@ @NSCD_LIB@ ++grpunconv_LDADD = ../lib/libpwdutils.a @DL_LIBS@ @LDAP_LIBS@ @NSL_LIB@ @SELINUX_LIB@ @ATTR_LIB@ @NSCD_LIB@ + + pwck_SOURCES = pwck.c +-pwck_LDADD = ../lib/libpwdutils.a @SELINUX_LIB@ @ATTR_LIB@ ++pwck_LDADD = ../lib/libpwdutils.a @DL_LIBS@ @SELINUX_LIB@ @ATTR_LIB@ + + pwconv_SOURCES = pwconv.c +-pwconv_LDADD = ../lib/libpwdutils.a @LDAP_LIBS@ @NSL_LIB@ @SELINUX_LIB@ @ATTR_LIB@ @NSCD_LIB@ ++pwconv_LDADD = ../lib/libpwdutils.a @DL_LIBS@ @LDAP_LIBS@ @NSL_LIB@ @SELINUX_LIB@ @ATTR_LIB@ @NSCD_LIB@ + + pwunconv_SOURCES = pwunconv.c +-pwunconv_LDADD = ../lib/libpwdutils.a @LDAP_LIBS@ @NSL_LIB@ @SELINUX_LIB@ @ATTR_LIB@ @NSCD_LIB@ ++pwunconv_LDADD = ../lib/libpwdutils.a @DL_LIBS@ @LDAP_LIBS@ @NSL_LIB@ @SELINUX_LIB@ @ATTR_LIB@ @NSCD_LIB@ + + useradd_SOURCES = useradd.c +-useradd_LDADD = ../lib/libpwdutils.a @PAM_LIBS@ @LDAP_LIBS@ @NSL_LIB@ @SELINUX_LIB@ @ATTR_LIB@ @NSCD_LIB@ ++useradd_LDADD = ../lib/libpwdutils.a @DL_LIBS@ @PAM_LIBS@ @LDAP_LIBS@ @NSL_LIB@ @SELINUX_LIB@ @ATTR_LIB@ @NSCD_LIB@ + + userdel_SOURCES = userdel.c +-userdel_LDADD = ../lib/libpwdutils.a @PAM_LIBS@ @LDAP_LIBS@ @NSL_LIB@ @SELINUX_LIB@ @ATTR_LIB@ @NSCD_LIB@ ++userdel_LDADD = ../lib/libpwdutils.a @DL_LIBS@ @PAM_LIBS@ @LDAP_LIBS@ @NSL_LIB@ @SELINUX_LIB@ @ATTR_LIB@ @NSCD_LIB@ + + usermod_SOURCES = usermod.c +-usermod_LDADD = ../lib/libpwdutils.a @PAM_LIBS@ @LDAP_LIBS@ @NSL_LIB@ @SELINUX_LIB@ @ATTR_LIB@ @NSCD_LIB@ ++usermod_LDADD = ../lib/libpwdutils.a @DL_LIBS@ @PAM_LIBS@ @LDAP_LIBS@ @NSL_LIB@ @SELINUX_LIB@ @ATTR_LIB@ @NSCD_LIB@ + + vipw_SOURCES = vipw.c +-vipw_LDADD = ../lib/libpwdutils.a @SELINUX_LIB@ @ATTR_LIB@ ++vipw_LDADD = ../lib/libpwdutils.a @DL_LIBS@ @SELINUX_LIB@ @ATTR_LIB@ + + newgrp_SOURCES = newgrp.c + newgrp_CFLAGS = @PIE_CFLAGS@ +-newgrp_LDADD = ../lib/libpwdutils.a @CRYPT_LIB@ ++newgrp_LDADD = ../lib/libpwdutils.a @DL_LIBS@ @CRYPT_LIB@ + newgrp_LDFLAGS = @PIE_LDFLAGS@ + + install-exec-hook: diff --git a/packaging/pwdutils.changes b/packaging/pwdutils.changes new file mode 100644 index 0000000..54afd6b --- /dev/null +++ b/packaging/pwdutils.changes @@ -0,0 +1,6 @@ +* Thu Jul 05 2012 Anas Nashif 12699eb +- add option -m for backward compatibility and to keep mic working + this will encrypt using md5 + +* Sat Jun 30 2012 Anas Nashif dc8d94d +- use pwdutils to replace original shadow utils diff --git a/packaging/pwdutils.spec b/packaging/pwdutils.spec new file mode 100644 index 0000000..4dd306d --- /dev/null +++ b/packaging/pwdutils.spec @@ -0,0 +1,96 @@ +Name: pwdutils +BuildRequires: libtool +BuildRequires: openssl-devel +BuildRequires: pam-devel +BuildRequires: gettext-tools +Url: http://www.thkukuk.de/pam/pwdutils/ +Version: 3.2.19 +Release: 0 +Summary: Utilities to Manage User and Group Accounts +License: GPL-2.0 +Group: System/Base +Source: pwdutils-%{version}.tar.bz2 +Source3: useradd.default +Patch0: pam.patch +Patch1: pwdutils-no-add-needed.patch + +%description +This package includes the necessary programs for converting plain +password files to the shadow password format, and managing user and +group accounts in both local files and in an LDAP database. + + + + +%prep +%setup -q +%patch0 -p1 +%patch1 + +%build +%reconfigure --disable-ldap --libdir=%{_libdir} --disable-nls --disable-pam_rpasswd +make %{?_smp_mflags} + +%install +make install DESTDIR=$RPM_BUILD_ROOT +rm -f $RPM_BUILD_ROOT%{_libdir}/pwdutils/lib*.so +mkdir $RPM_BUILD_ROOT/%{_lib} +mv $RPM_BUILD_ROOT%{_libdir}/security $RPM_BUILD_ROOT/%{_lib} +/sbin/ldconfig -n %{_libdir}/pwdutils +rm -f $RPM_BUILD_ROOT%{_libdir}/pwdutils/*a +rm -f $RPM_BUILD_ROOT/%{_lib}/security/*a + +rm -f %{buildroot}/etc/init.d/rpasswdd +rm -f %{buildroot}/etc/pam.d/rpasswd +rm -f %{buildroot}/etc/rpasswd.conf +rm -f %{buildroot}/usr/bin/rpasswd +rm -f %{buildroot}/usr/sbin/rpasswdd +ln -sf newgrp $RPM_BUILD_ROOT%{_bindir}/sg +install -m 644 $RPM_SOURCE_DIR/useradd.default $RPM_BUILD_ROOT/etc/default/useradd +echo ".so man8/useradd.8" > $RPM_BUILD_ROOT%{_mandir}/man8/adduser.8 + +%docs_package + +%files +%defattr(-,root,root,755) +%config /etc/login.defs +%config /etc/pam.d/chage +%config /etc/pam.d/chfn +%config /etc/pam.d/chsh +%config /etc/pam.d/passwd +%config /etc/pam.d/shadow +%config /etc/pam.d/useradd +%config(noreplace) /etc/default/useradd +%config(noreplace) /etc/default/passwd +%dir /etc/pwdutils +%config(noreplace) /etc/pwdutils/logging +%attr (4755,root,shadow) %{_bindir}/chage +%attr (4755,root,shadow) %{_bindir}/chfn +%attr (4755,root,shadow) %{_bindir}/chsh +%attr (4755,root,shadow) %{_bindir}/expiry +%attr (4755,root,shadow) %{_bindir}/gpasswd +%attr (4755,root,root) %{_bindir}/newgrp +%attr (4755,root,shadow) %{_bindir}/passwd +%{_bindir}/sg +%{_sbindir}/chpasswd +%{_sbindir}/groupadd +%{_sbindir}/groupdel +%{_sbindir}/groupmod +%{_sbindir}/grpck +%{_sbindir}/grpconv +%{_sbindir}/grpunconv +%{_sbindir}/pwck +%{_sbindir}/pwconv +%{_sbindir}/pwunconv +%{_sbindir}/useradd +%verify(not md5 size mtime) %config(noreplace) %{_sbindir}/groupadd.local +%verify(not md5 size mtime) %config(noreplace) %{_sbindir}/useradd.local +%verify(not md5 size mtime) %config(noreplace) %{_sbindir}/userdel-pre.local +%verify(not md5 size mtime) %config(noreplace) %{_sbindir}/userdel-post.local +%{_sbindir}/userdel +%{_sbindir}/usermod +%{_sbindir}/vigr +%{_sbindir}/vipw +%dir %{_libdir}/pwdutils +%{_libdir}/pwdutils/liblog_syslog.so.1* + diff --git a/packaging/useradd.default b/packaging/useradd.default new file mode 100644 index 0000000..ee83bd9 --- /dev/null +++ b/packaging/useradd.default @@ -0,0 +1,9 @@ +GROUP=100 +HOME=/home +INACTIVE=-1 +EXPIRE= +SHELL=/bin/bash +SKEL=/etc/skel +GROUPS=video +CREATE_MAIL_SPOOL=no +UMASK=022 diff --git a/plugins/Makefile.am b/plugins/Makefile.am new file mode 100644 index 0000000..c1ed3ff --- /dev/null +++ b/plugins/Makefile.am @@ -0,0 +1,38 @@ +# +# Copyright (c) 2004-2005 Thorsten Kukuk, Germany +# +# Author: Thorsten Kukuk +# +AUTOMAKE_OPTIONS = 1.8 gnits +MAINT_CHARSET = latin1 + +plugindir = $(libdir)/pwdutils +localedir = $(datadir)/locale + +AM_CFLAGS = @EXTRA_CFLAGS@ + +plugin_LTLIBRARIES = liblog_syslog.la + +if build_LAUS_PLUGIN +plugin_LTLIBRARIES += liblog_laus.la +endif + +if build_AUDIT_PLUGIN +plugin_LTLIBRARIES += liblog_audit.la +endif + +liblog_laus_la_SOURCES=liblog_laus.c +liblog_laus_la_LIBADD = @LAUS_LIBS@ + +liblog_audit_la_SOURCES=liblog_audit.c +liblog_audit_la_LIBADD = @AUDIT_LIBS@ + +INCLUDES = -I$(top_srcdir)/lib -DLOCALEDIR=\"$(localedir)\" -DPLUGINDIR=\"$(plugindir)\" + +CLEANFILES = *~ + +EXTRA_DIST = liblog_audit.map liblog_laus.map liblog_syslog.map + +liblog_audit_la_LDFLAGS = -version-info 1:0:0 -Wl,--version-script=$(srcdir)/liblog_audit.map +liblog_laus_la_LDFLAGS = -version-info 1:0:0 -Wl,--version-script=$(srcdir)/liblog_laus.map +liblog_syslog_la_LDFLAGS = -version-info 1:0:0 -Wl,--version-script=$(srcdir)/liblog_syslog.map diff --git a/plugins/Makefile.in b/plugins/Makefile.in new file mode 100644 index 0000000..eaed2fe --- /dev/null +++ b/plugins/Makefile.in @@ -0,0 +1,554 @@ +# Makefile.in generated by automake 1.10.1 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +@build_LAUS_PLUGIN_TRUE@am__append_1 = liblog_laus.la +@build_AUDIT_PLUGIN_TRUE@am__append_2 = liblog_audit.la +subdir = plugins +DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/m4/getline.m4 \ + $(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/iconv.m4 \ + $(top_srcdir)/m4/isc-posix.m4 \ + $(top_srcdir)/m4/japhar_grep_cflags.m4 \ + $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \ + $(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libtool.m4 \ + $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ + $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ + $(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \ + $(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.in +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = `echo $$p | sed -e 's|^.*/||'`; +am__installdirs = "$(DESTDIR)$(plugindir)" +pluginLTLIBRARIES_INSTALL = $(INSTALL) +LTLIBRARIES = $(plugin_LTLIBRARIES) +liblog_audit_la_DEPENDENCIES = +am_liblog_audit_la_OBJECTS = liblog_audit.lo +liblog_audit_la_OBJECTS = $(am_liblog_audit_la_OBJECTS) +liblog_audit_la_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ + $(liblog_audit_la_LDFLAGS) $(LDFLAGS) -o $@ +@build_AUDIT_PLUGIN_TRUE@am_liblog_audit_la_rpath = -rpath \ +@build_AUDIT_PLUGIN_TRUE@ $(plugindir) +liblog_laus_la_DEPENDENCIES = +am_liblog_laus_la_OBJECTS = liblog_laus.lo +liblog_laus_la_OBJECTS = $(am_liblog_laus_la_OBJECTS) +liblog_laus_la_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ + $(liblog_laus_la_LDFLAGS) $(LDFLAGS) -o $@ +@build_LAUS_PLUGIN_TRUE@am_liblog_laus_la_rpath = -rpath $(plugindir) +liblog_syslog_la_LIBADD = +liblog_syslog_la_SOURCES = liblog_syslog.c +liblog_syslog_la_OBJECTS = liblog_syslog.lo +liblog_syslog_la_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ + $(liblog_syslog_la_LDFLAGS) $(LDFLAGS) -o $@ +DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) +depcomp = $(SHELL) $(top_srcdir)/depcomp +am__depfiles_maybe = depfiles +COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ + $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ + $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +CCLD = $(CC) +LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \ + $(LDFLAGS) -o $@ +SOURCES = $(liblog_audit_la_SOURCES) $(liblog_laus_la_SOURCES) \ + liblog_syslog.c +DIST_SOURCES = $(liblog_audit_la_SOURCES) $(liblog_laus_la_SOURCES) \ + liblog_syslog.c +ETAGS = etags +CTAGS = ctags +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +AMTAR = @AMTAR@ +AR = @AR@ +ATTR_LIB = @ATTR_LIB@ +AUDIT_LIBS = @AUDIT_LIBS@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +BIOAPI_LIB = @BIOAPI_LIB@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CRYPT_LIB = @CRYPT_LIB@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DL_LIBS = @DL_LIBS@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +EXTRA_CFLAGS = @EXTRA_CFLAGS@ +FGREP = @FGREP@ +GMSGFMT = @GMSGFMT@ +GMSGFMT_015 = @GMSGFMT_015@ +GREP = @GREP@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +INTLLIBS = @INTLLIBS@ +INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ +LAUS_LIBS = @LAUS_LIBS@ +LD = @LD@ +LDAP_LIBS = @LDAP_LIBS@ +LDFLAGS = @LDFLAGS@ +LIBICONV = @LIBICONV@ +LIBINTL = @LIBINTL@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBICONV = @LTLIBICONV@ +LTLIBINTL = @LTLIBINTL@ +LTLIBOBJS = @LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +MKDIR_P = @MKDIR_P@ +MSGFMT = @MSGFMT@ +MSGFMT_015 = @MSGFMT_015@ +MSGMERGE = @MSGMERGE@ +NM = @NM@ +NMEDIT = @NMEDIT@ +NSCD_LIB = @NSCD_LIB@ +NSL_LIB = @NSL_LIB@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PAM_LIBS = @PAM_LIBS@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PIE_CFLAGS = @PIE_CFLAGS@ +PIE_LDFLAGS = @PIE_LDFLAGS@ +POSUB = @POSUB@ +RANLIB = @RANLIB@ +SED = @SED@ +SELINUX_LIB = @SELINUX_LIB@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +SLP_LIBS = @SLP_LIBS@ +SSL_LIBS = @SSL_LIBS@ +STRIP = @STRIP@ +TLS_LIBS = @TLS_LIBS@ +USE_NLS = @USE_NLS@ +VERSION = @VERSION@ +XGETTEXT = @XGETTEXT@ +XGETTEXT_015 = @XGETTEXT_015@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libc_cv_fpie = @libc_cv_fpie@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = $(datadir)/locale +localstatedir = @localstatedir@ +lt_ECHO = @lt_ECHO@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ + +# +# Copyright (c) 2004-2005 Thorsten Kukuk, Germany +# +# Author: Thorsten Kukuk +# +AUTOMAKE_OPTIONS = 1.8 gnits +MAINT_CHARSET = latin1 +plugindir = $(libdir)/pwdutils +AM_CFLAGS = @EXTRA_CFLAGS@ +plugin_LTLIBRARIES = liblog_syslog.la $(am__append_1) $(am__append_2) +liblog_laus_la_SOURCES = liblog_laus.c +liblog_laus_la_LIBADD = @LAUS_LIBS@ +liblog_audit_la_SOURCES = liblog_audit.c +liblog_audit_la_LIBADD = @AUDIT_LIBS@ +INCLUDES = -I$(top_srcdir)/lib -DLOCALEDIR=\"$(localedir)\" -DPLUGINDIR=\"$(plugindir)\" +CLEANFILES = *~ +EXTRA_DIST = liblog_audit.map liblog_laus.map liblog_syslog.map +liblog_audit_la_LDFLAGS = -version-info 1:0:0 -Wl,--version-script=$(srcdir)/liblog_audit.map +liblog_laus_la_LDFLAGS = -version-info 1:0:0 -Wl,--version-script=$(srcdir)/liblog_laus.map +liblog_syslog_la_LDFLAGS = -version-info 1:0:0 -Wl,--version-script=$(srcdir)/liblog_syslog.map +all: all-am + +.SUFFIXES: +.SUFFIXES: .c .lo .o .obj +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ + && exit 0; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnits plugins/Makefile'; \ + cd $(top_srcdir) && \ + $(AUTOMAKE) --gnits plugins/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +install-pluginLTLIBRARIES: $(plugin_LTLIBRARIES) + @$(NORMAL_INSTALL) + test -z "$(plugindir)" || $(MKDIR_P) "$(DESTDIR)$(plugindir)" + @list='$(plugin_LTLIBRARIES)'; for p in $$list; do \ + if test -f $$p; then \ + f=$(am__strip_dir) \ + echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(pluginLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) '$$p' '$(DESTDIR)$(plugindir)/$$f'"; \ + $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(pluginLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) "$$p" "$(DESTDIR)$(plugindir)/$$f"; \ + else :; fi; \ + done + +uninstall-pluginLTLIBRARIES: + @$(NORMAL_UNINSTALL) + @list='$(plugin_LTLIBRARIES)'; for p in $$list; do \ + p=$(am__strip_dir) \ + echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(plugindir)/$$p'"; \ + $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(plugindir)/$$p"; \ + done + +clean-pluginLTLIBRARIES: + -test -z "$(plugin_LTLIBRARIES)" || rm -f $(plugin_LTLIBRARIES) + @list='$(plugin_LTLIBRARIES)'; for p in $$list; do \ + dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \ + test "$$dir" != "$$p" || dir=.; \ + echo "rm -f \"$${dir}/so_locations\""; \ + rm -f "$${dir}/so_locations"; \ + done +liblog_audit.la: $(liblog_audit_la_OBJECTS) $(liblog_audit_la_DEPENDENCIES) + $(liblog_audit_la_LINK) $(am_liblog_audit_la_rpath) $(liblog_audit_la_OBJECTS) $(liblog_audit_la_LIBADD) $(LIBS) +liblog_laus.la: $(liblog_laus_la_OBJECTS) $(liblog_laus_la_DEPENDENCIES) + $(liblog_laus_la_LINK) $(am_liblog_laus_la_rpath) $(liblog_laus_la_OBJECTS) $(liblog_laus_la_LIBADD) $(LIBS) +liblog_syslog.la: $(liblog_syslog_la_OBJECTS) $(liblog_syslog_la_DEPENDENCIES) + $(liblog_syslog_la_LINK) -rpath $(plugindir) $(liblog_syslog_la_OBJECTS) $(liblog_syslog_la_LIBADD) $(LIBS) + +mostlyclean-compile: + -rm -f *.$(OBJEXT) + +distclean-compile: + -rm -f *.tab.c + +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/liblog_audit.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/liblog_laus.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/liblog_syslog.Plo@am__quote@ + +.c.o: +@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(COMPILE) -c $< + +.c.obj: +@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` +@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'` + +.c.lo: +@am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $< + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs + +ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonemtpy = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + mkid -fID $$unique +tags: TAGS + +TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + tags=; \ + here=`pwd`; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$tags $$unique; \ + fi +ctags: CTAGS +CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + tags=; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + test -z "$(CTAGS_ARGS)$$tags$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$tags $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && cd $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) $$here + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ + fi; \ + cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ + else \ + test -f $(distdir)/$$file \ + || cp -p $$d/$$file $(distdir)/$$file \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-am +all-am: Makefile $(LTLIBRARIES) +installdirs: + for dir in "$(DESTDIR)$(plugindir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + +clean-generic: + -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-generic clean-libtool clean-pluginLTLIBRARIES \ + mostlyclean-am + +distclean: distclean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +distclean-am: clean-am distclean-compile distclean-generic \ + distclean-tags + +dvi: dvi-am + +dvi-am: + +html: html-am + +info: info-am + +info-am: + +install-data-am: install-pluginLTLIBRARIES + +install-dvi: install-dvi-am + +install-exec-am: + +install-html: install-html-am + +install-info: install-info-am + +install-man: + +install-pdf: install-pdf-am + +install-ps: install-ps-am + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-compile mostlyclean-generic \ + mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-pluginLTLIBRARIES + +.MAKE: install-am install-strip + +.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ + clean-libtool clean-pluginLTLIBRARIES ctags distclean \ + distclean-compile distclean-generic distclean-libtool \ + distclean-tags distdir dvi dvi-am html html-am info info-am \ + install install-am install-data install-data-am install-dvi \ + install-dvi-am install-exec install-exec-am install-html \ + install-html-am install-info install-info-am install-man \ + install-pdf install-pdf-am install-pluginLTLIBRARIES \ + install-ps install-ps-am install-strip installcheck \ + installcheck-am installdirs maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-compile \ + mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ + tags uninstall uninstall-am uninstall-pluginLTLIBRARIES + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/plugins/liblog_audit.c b/plugins/liblog_audit.c new file mode 100644 index 0000000..de6c252 --- /dev/null +++ b/plugins/liblog_audit.c @@ -0,0 +1,91 @@ +/* Copyright (C) 2005, 2008 Thorsten Kukuk + Author: Thorsten Kukuk + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License version 2 as + published by the Free Software Foundation. + + 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ + + +#ifdef HAVE_CONFIG_H +#include +#endif + +#include +#include +#include +#include +#include +#include +#include "logging.h" +#include "msg_table.h" + +#include + +void audit_sec_log (const char *program, unsigned int id, ...); +void audit_open_sec_log (const char *arguments); + +static int audit_fd = -1; + +void +audit_sec_log (const char *program __attribute__((unused)), + unsigned int id, ...) +{ + char buffer[1024 * 8]; + va_list ap; + + if (id > sizeof (msg_table) / sizeof (char *)) + abort (); + + if (msg_table[id].msg == NULL) + return; + + va_start (ap, id); + vsnprintf (buffer, sizeof (buffer), msg_table[id].msg, ap); + va_end (ap); + + errno = 0; + audit_fd = audit_open (); + if (audit_fd < 0) + { + /* You get ECONNREFUSED only when the kernel doesn't have + audit compiled in. Otherwise, this should only fail in + case of extreme resource shortage, need to prevent login + in that case for CAPP compliance. */ + if (errno != ECONNREFUSED) + syslog (LOG_CRIT, "audit_open() failed: %s", strerror(errno)); + } + else + { + /* audit_log_acct_message(int audit_fd, int type, + const char *pgname, const char *op, const char *name, + unsigned int id, const char *host, + const char *addr, const char *tty, int result); + */ + int retval = audit_log_acct_message(audit_fd, AUDIT_USER_CHAUTHTOK, + program, buffer, NULL, + id, NULL, + NULL, NULL, msg_table[id].result); + audit_close (audit_fd); + + if (retval > 0) + return; + } + + /* Seems audit subsystem is not enabled */ + syslog (LOG_NOTICE, "%s", buffer); +} + +void +audit_open_sec_log (const char *arguments __attribute__((unused))) +{ + return; +} diff --git a/plugins/liblog_audit.map b/plugins/liblog_audit.map new file mode 100644 index 0000000..1797bd6 --- /dev/null +++ b/plugins/liblog_audit.map @@ -0,0 +1,6 @@ +LIBLOG_AUDIT_1.0 { + global: + audit_open_sec_log; audit_sec_log; + local: + *; +}; diff --git a/plugins/liblog_laus.c b/plugins/liblog_laus.c new file mode 100644 index 0000000..d44b8d2 --- /dev/null +++ b/plugins/liblog_laus.c @@ -0,0 +1,96 @@ +/* Copyright (C) 2004, 2005 Thorsten Kukuk + Author: Thorsten Kukuk + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License version 2 as + published by the Free Software Foundation. + + 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ + + +#ifdef HAVE_CONFIG_H +#include +#endif + +#include +#include +#include +#include +#include + +#include "logging.h" + +#include "msg_table.h" + +void laus_sec_log (const char *program, unsigned int id, ...); +void laus_open_sec_log (const char *arguments); + +static int __laus_active; + +void +laus_sec_log (const char *program, unsigned int id, ...) +{ + va_list ap; + int rc; + char *buf = NULL; + + if (id > sizeof (msg_table) / sizeof (char *)) + abort (); + + if(!__laus_active) + return; + + va_start (ap, id); + if (msg_table[id] != NULL) + { + if (vasprintf (&buf, msg_table[id], ap) < 0) + { + int err = errno; + + syslog(LOG_WARNING, + "LAuS error - %s:%i - laus_log: (%i) %s\n", + __FILE__, __LINE__, + err, laus_strerror(err)); + return; + } + rc = laus_log (NO_TAG, "%s: %s", program, buf); + free (buf); + if (rc < 0) + { + int err = errno; + + syslog(LOG_WARNING, + "LAuS error - %s:%i - laus_log: (%i) %s\n", + __FILE__, __LINE__, + err, laus_strerror(err)); + } + } + va_end (ap); +} + +void +laus_open_sec_log (const char *arguments __attribute__((unused))) +{ + int rc = laus_open (NULL); + if (rc < 0) + { + int err = errno; + + syslog(LOG_WARNING, + "LAuS error - %s:%i - laus_open: (%i) %s\n", + __FILE__, __LINE__, + err, laus_strerror(err)); + __laus_active = 0; + } + else + __laus_active = 1; + + return; +} diff --git a/plugins/liblog_laus.map b/plugins/liblog_laus.map new file mode 100644 index 0000000..96e598e --- /dev/null +++ b/plugins/liblog_laus.map @@ -0,0 +1,6 @@ +LIBLOG_LAUS_1.0 { + global: + laus_open_sec_log; laus_sec_log; + local: + *; +}; diff --git a/plugins/liblog_syslog.c b/plugins/liblog_syslog.c new file mode 100644 index 0000000..70f8939 --- /dev/null +++ b/plugins/liblog_syslog.c @@ -0,0 +1,52 @@ +/* Copyright (C) 2004,2005, 2008 Thorsten Kukuk + Author: Thorsten Kukuk + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License version 2 as + published by the Free Software Foundation. + + 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ + + +#ifdef HAVE_CONFIG_H +#include +#endif + +#include +#include +#include +#include +#include "logging.h" +#include "msg_table.h" + +void syslog_sec_log (const char *program, unsigned int id, ...); +void syslog_open_sec_log (const char *arguments); + +void +syslog_sec_log (const char *program __attribute__((unused)), + unsigned int id, ...) +{ + va_list ap; + + if (id > sizeof (msg_table) / sizeof (char *)) + abort (); + + va_start (ap, id); + if (msg_table[id].msg != NULL) + vsyslog (LOG_INFO, msg_table[id].msg, ap); + + va_end (ap); +} + +void +syslog_open_sec_log (const char *arguments __attribute__((unused))) +{ + return; +} diff --git a/plugins/liblog_syslog.map b/plugins/liblog_syslog.map new file mode 100644 index 0000000..7703e4f --- /dev/null +++ b/plugins/liblog_syslog.map @@ -0,0 +1,6 @@ +LIBLOG_SYSLOG_1.0 { + global: + syslog_open_sec_log; syslog_sec_log; + local: + *; +}; diff --git a/po/LINGUAS b/po/LINGUAS new file mode 100644 index 0000000..3b199cd --- /dev/null +++ b/po/LINGUAS @@ -0,0 +1,8 @@ +da +de +fr +id +nl +pl +sv +vi diff --git a/po/Makefile.in.in b/po/Makefile.in.in new file mode 100644 index 0000000..2ed49e6 --- /dev/null +++ b/po/Makefile.in.in @@ -0,0 +1,393 @@ +# Makefile for PO directory in any package using GNU gettext. +# Copyright (C) 1995-1997, 2000-2006 by Ulrich Drepper +# +# This file can be copied and used freely without restrictions. It can +# be used in projects which are not available under the GNU General Public +# License but which still want to provide support for the GNU gettext +# functionality. +# Please note that the actual code of GNU gettext is covered by the GNU +# General Public License and is *not* in the public domain. +# +# Origin: gettext-0.15 + +PACKAGE = @PACKAGE@ +VERSION = @VERSION@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ + +SHELL = /bin/sh +@SET_MAKE@ + +srcdir = @srcdir@ +top_srcdir = @top_srcdir@ +VPATH = @srcdir@ + +prefix = @prefix@ +exec_prefix = @exec_prefix@ +datarootdir = @datarootdir@ +datadir = @datadir@ +localedir = @localedir@ +gettextsrcdir = $(datadir)/gettext/po + +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +mkinstalldirs = $(SHELL) @install_sh@ -d +mkdir_p = @mkdir_p@ + +GMSGFMT_ = @GMSGFMT@ +GMSGFMT_no = @GMSGFMT@ +GMSGFMT_yes = @GMSGFMT_015@ +GMSGFMT = $(GMSGFMT_$(USE_MSGCTXT)) +MSGFMT_ = @MSGFMT@ +MSGFMT_no = @MSGFMT@ +MSGFMT_yes = @MSGFMT_015@ +MSGFMT = $(MSGFMT_$(USE_MSGCTXT)) +XGETTEXT_ = @XGETTEXT@ +XGETTEXT_no = @XGETTEXT@ +XGETTEXT_yes = @XGETTEXT_015@ +XGETTEXT = $(XGETTEXT_$(USE_MSGCTXT)) +MSGMERGE = msgmerge +MSGMERGE_UPDATE = @MSGMERGE@ --update +MSGINIT = msginit +MSGCONV = msgconv +MSGFILTER = msgfilter + +POFILES = @POFILES@ +GMOFILES = @GMOFILES@ +UPDATEPOFILES = @UPDATEPOFILES@ +DUMMYPOFILES = @DUMMYPOFILES@ +DISTFILES.common = Makefile.in.in remove-potcdate.sin \ +$(DISTFILES.common.extra1) $(DISTFILES.common.extra2) $(DISTFILES.common.extra3) +DISTFILES = $(DISTFILES.common) Makevars POTFILES.in \ +$(POFILES) $(GMOFILES) \ +$(DISTFILES.extra1) $(DISTFILES.extra2) $(DISTFILES.extra3) + +POTFILES = \ + +CATALOGS = @CATALOGS@ + +# Makevars gets inserted here. (Don't remove this line!) + +.SUFFIXES: +.SUFFIXES: .po .gmo .mo .sed .sin .nop .po-create .po-update + +.po.mo: + @echo "$(MSGFMT) -c -o $@ $<"; \ + $(MSGFMT) -c -o t-$@ $< && mv t-$@ $@ + +.po.gmo: + @lang=`echo $* | sed -e 's,.*/,,'`; \ + test "$(srcdir)" = . && cdcmd="" || cdcmd="cd $(srcdir) && "; \ + echo "$${cdcmd}rm -f $${lang}.gmo && $(GMSGFMT) -c --statistics -o $${lang}.gmo $${lang}.po"; \ + cd $(srcdir) && rm -f $${lang}.gmo && $(GMSGFMT) -c --statistics -o t-$${lang}.gmo $${lang}.po && mv t-$${lang}.gmo $${lang}.gmo + +.sin.sed: + sed -e '/^#/d' $< > t-$@ + mv t-$@ $@ + + +all: all-@USE_NLS@ + +all-yes: stamp-po +all-no: + +# $(srcdir)/$(DOMAIN).pot is only created when needed. When xgettext finds no +# internationalized messages, no $(srcdir)/$(DOMAIN).pot is created (because +# we don't want to bother translators with empty POT files). We assume that +# LINGUAS is empty in this case, i.e. $(POFILES) and $(GMOFILES) are empty. +# In this case, stamp-po is a nop (i.e. a phony target). + +# stamp-po is a timestamp denoting the last time at which the CATALOGS have +# been loosely updated. Its purpose is that when a developer or translator +# checks out the package via CVS, and the $(DOMAIN).pot file is not in CVS, +# "make" will update the $(DOMAIN).pot and the $(CATALOGS), but subsequent +# invocations of "make" will do nothing. This timestamp would not be necessary +# if updating the $(CATALOGS) would always touch them; however, the rule for +# $(POFILES) has been designed to not touch files that don't need to be +# changed. +stamp-po: $(srcdir)/$(DOMAIN).pot + test ! -f $(srcdir)/$(DOMAIN).pot || \ + test -z "$(GMOFILES)" || $(MAKE) $(GMOFILES) + @test ! -f $(srcdir)/$(DOMAIN).pot || { \ + echo "touch stamp-po" && \ + echo timestamp > stamp-poT && \ + mv stamp-poT stamp-po; \ + } + +# Note: Target 'all' must not depend on target '$(DOMAIN).pot-update', +# otherwise packages like GCC can not be built if only parts of the source +# have been downloaded. + +# This target rebuilds $(DOMAIN).pot; it is an expensive operation. +# Note that $(DOMAIN).pot is not touched if it doesn't need to be changed. +$(DOMAIN).pot-update: $(POTFILES) $(srcdir)/POTFILES.in remove-potcdate.sed + if test -n '$(MSGID_BUGS_ADDRESS)' || test '$(PACKAGE_BUGREPORT)' = '@'PACKAGE_BUGREPORT'@'; then \ + msgid_bugs_address='$(MSGID_BUGS_ADDRESS)'; \ + else \ + msgid_bugs_address='$(PACKAGE_BUGREPORT)'; \ + fi; \ + $(XGETTEXT) --default-domain=$(DOMAIN) --directory=$(top_srcdir) \ + --add-comments=TRANSLATORS: $(XGETTEXT_OPTIONS) \ + --files-from=$(srcdir)/POTFILES.in \ + --copyright-holder='$(COPYRIGHT_HOLDER)' \ + --msgid-bugs-address="$$msgid_bugs_address" + test ! -f $(DOMAIN).po || { \ + if test -f $(srcdir)/$(DOMAIN).pot; then \ + sed -f remove-potcdate.sed < $(srcdir)/$(DOMAIN).pot > $(DOMAIN).1po && \ + sed -f remove-potcdate.sed < $(DOMAIN).po > $(DOMAIN).2po && \ + if cmp $(DOMAIN).1po $(DOMAIN).2po >/dev/null 2>&1; then \ + rm -f $(DOMAIN).1po $(DOMAIN).2po $(DOMAIN).po; \ + else \ + rm -f $(DOMAIN).1po $(DOMAIN).2po $(srcdir)/$(DOMAIN).pot && \ + mv $(DOMAIN).po $(srcdir)/$(DOMAIN).pot; \ + fi; \ + else \ + mv $(DOMAIN).po $(srcdir)/$(DOMAIN).pot; \ + fi; \ + } + +# This rule has no dependencies: we don't need to update $(DOMAIN).pot at +# every "make" invocation, only create it when it is missing. +# Only "make $(DOMAIN).pot-update" or "make dist" will force an update. +$(srcdir)/$(DOMAIN).pot: + $(MAKE) $(DOMAIN).pot-update + +# This target rebuilds a PO file if $(DOMAIN).pot has changed. +# Note that a PO file is not touched if it doesn't need to be changed. +$(POFILES): $(srcdir)/$(DOMAIN).pot + @lang=`echo $@ | sed -e 's,.*/,,' -e 's/\.po$$//'`; \ + if test -f "$(srcdir)/$${lang}.po"; then \ + test "$(srcdir)" = . && cdcmd="" || cdcmd="cd $(srcdir) && "; \ + echo "$${cdcmd}$(MSGMERGE_UPDATE) $${lang}.po $(DOMAIN).pot"; \ + cd $(srcdir) && $(MSGMERGE_UPDATE) $${lang}.po $(DOMAIN).pot; \ + else \ + $(MAKE) $${lang}.po-create; \ + fi + + +install: install-exec install-data +install-exec: +install-data: install-data-@USE_NLS@ + if test "$(PACKAGE)" = "gettext-tools"; then \ + $(mkdir_p) $(DESTDIR)$(gettextsrcdir); \ + for file in $(DISTFILES.common) Makevars.template; do \ + $(INSTALL_DATA) $(srcdir)/$$file \ + $(DESTDIR)$(gettextsrcdir)/$$file; \ + done; \ + for file in Makevars; do \ + rm -f $(DESTDIR)$(gettextsrcdir)/$$file; \ + done; \ + else \ + : ; \ + fi +install-data-no: all +install-data-yes: all + $(mkdir_p) $(DESTDIR)$(datadir) + @catalogs='$(CATALOGS)'; \ + for cat in $$catalogs; do \ + cat=`basename $$cat`; \ + lang=`echo $$cat | sed -e 's/\.gmo$$//'`; \ + dir=$(localedir)/$$lang/LC_MESSAGES; \ + $(mkdir_p) $(DESTDIR)$$dir; \ + if test -r $$cat; then realcat=$$cat; else realcat=$(srcdir)/$$cat; fi; \ + $(INSTALL_DATA) $$realcat $(DESTDIR)$$dir/$(DOMAIN).mo; \ + echo "installing $$realcat as $(DESTDIR)$$dir/$(DOMAIN).mo"; \ + for lc in '' $(EXTRA_LOCALE_CATEGORIES); do \ + if test -n "$$lc"; then \ + if (cd $(DESTDIR)$(localedir)/$$lang && LC_ALL=C ls -l -d $$lc 2>/dev/null) | grep ' -> ' >/dev/null; then \ + link=`cd $(DESTDIR)$(localedir)/$$lang && LC_ALL=C ls -l -d $$lc | sed -e 's/^.* -> //'`; \ + mv $(DESTDIR)$(localedir)/$$lang/$$lc $(DESTDIR)$(localedir)/$$lang/$$lc.old; \ + mkdir $(DESTDIR)$(localedir)/$$lang/$$lc; \ + (cd $(DESTDIR)$(localedir)/$$lang/$$lc.old && \ + for file in *; do \ + if test -f $$file; then \ + ln -s ../$$link/$$file $(DESTDIR)$(localedir)/$$lang/$$lc/$$file; \ + fi; \ + done); \ + rm -f $(DESTDIR)$(localedir)/$$lang/$$lc.old; \ + else \ + if test -d $(DESTDIR)$(localedir)/$$lang/$$lc; then \ + :; \ + else \ + rm -f $(DESTDIR)$(localedir)/$$lang/$$lc; \ + mkdir $(DESTDIR)$(localedir)/$$lang/$$lc; \ + fi; \ + fi; \ + rm -f $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo; \ + ln -s ../LC_MESSAGES/$(DOMAIN).mo $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo 2>/dev/null || \ + ln $(DESTDIR)$(localedir)/$$lang/LC_MESSAGES/$(DOMAIN).mo $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo 2>/dev/null || \ + cp -p $(DESTDIR)$(localedir)/$$lang/LC_MESSAGES/$(DOMAIN).mo $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo; \ + echo "installing $$realcat link as $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo"; \ + fi; \ + done; \ + done + +install-strip: install + +installdirs: installdirs-exec installdirs-data +installdirs-exec: +installdirs-data: installdirs-data-@USE_NLS@ + if test "$(PACKAGE)" = "gettext-tools"; then \ + $(mkdir_p) $(DESTDIR)$(gettextsrcdir); \ + else \ + : ; \ + fi +installdirs-data-no: +installdirs-data-yes: + $(mkdir_p) $(DESTDIR)$(datadir) + @catalogs='$(CATALOGS)'; \ + for cat in $$catalogs; do \ + cat=`basename $$cat`; \ + lang=`echo $$cat | sed -e 's/\.gmo$$//'`; \ + dir=$(localedir)/$$lang/LC_MESSAGES; \ + $(mkdir_p) $(DESTDIR)$$dir; \ + for lc in '' $(EXTRA_LOCALE_CATEGORIES); do \ + if test -n "$$lc"; then \ + if (cd $(DESTDIR)$(localedir)/$$lang && LC_ALL=C ls -l -d $$lc 2>/dev/null) | grep ' -> ' >/dev/null; then \ + link=`cd $(DESTDIR)$(localedir)/$$lang && LC_ALL=C ls -l -d $$lc | sed -e 's/^.* -> //'`; \ + mv $(DESTDIR)$(localedir)/$$lang/$$lc $(DESTDIR)$(localedir)/$$lang/$$lc.old; \ + mkdir $(DESTDIR)$(localedir)/$$lang/$$lc; \ + (cd $(DESTDIR)$(localedir)/$$lang/$$lc.old && \ + for file in *; do \ + if test -f $$file; then \ + ln -s ../$$link/$$file $(DESTDIR)$(localedir)/$$lang/$$lc/$$file; \ + fi; \ + done); \ + rm -f $(DESTDIR)$(localedir)/$$lang/$$lc.old; \ + else \ + if test -d $(DESTDIR)$(localedir)/$$lang/$$lc; then \ + :; \ + else \ + rm -f $(DESTDIR)$(localedir)/$$lang/$$lc; \ + mkdir $(DESTDIR)$(localedir)/$$lang/$$lc; \ + fi; \ + fi; \ + fi; \ + done; \ + done + +# Define this as empty until I found a useful application. +installcheck: + +uninstall: uninstall-exec uninstall-data +uninstall-exec: +uninstall-data: uninstall-data-@USE_NLS@ + if test "$(PACKAGE)" = "gettext-tools"; then \ + for file in $(DISTFILES.common) Makevars.template; do \ + rm -f $(DESTDIR)$(gettextsrcdir)/$$file; \ + done; \ + else \ + : ; \ + fi +uninstall-data-no: +uninstall-data-yes: + catalogs='$(CATALOGS)'; \ + for cat in $$catalogs; do \ + cat=`basename $$cat`; \ + lang=`echo $$cat | sed -e 's/\.gmo$$//'`; \ + for lc in LC_MESSAGES $(EXTRA_LOCALE_CATEGORIES); do \ + rm -f $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo; \ + done; \ + done + +check: all + +info dvi ps pdf html tags TAGS ctags CTAGS ID: + +mostlyclean: + rm -f remove-potcdate.sed + rm -f stamp-poT + rm -f core core.* $(DOMAIN).po $(DOMAIN).1po $(DOMAIN).2po *.new.po + rm -fr *.o + +clean: mostlyclean + +distclean: clean + rm -f Makefile Makefile.in POTFILES *.mo + +maintainer-clean: distclean + @echo "This command is intended for maintainers to use;" + @echo "it deletes files that may require special tools to rebuild." + rm -f stamp-po $(GMOFILES) + +distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir) +dist distdir: + $(MAKE) update-po + @$(MAKE) dist2 +# This is a separate target because 'update-po' must be executed before. +dist2: stamp-po $(DISTFILES) + dists="$(DISTFILES)"; \ + if test "$(PACKAGE)" = "gettext-tools"; then \ + dists="$$dists Makevars.template"; \ + fi; \ + if test -f $(srcdir)/$(DOMAIN).pot; then \ + dists="$$dists $(DOMAIN).pot stamp-po"; \ + fi; \ + if test -f $(srcdir)/ChangeLog; then \ + dists="$$dists ChangeLog"; \ + fi; \ + for i in 0 1 2 3 4 5 6 7 8 9; do \ + if test -f $(srcdir)/ChangeLog.$$i; then \ + dists="$$dists ChangeLog.$$i"; \ + fi; \ + done; \ + if test -f $(srcdir)/LINGUAS; then dists="$$dists LINGUAS"; fi; \ + for file in $$dists; do \ + if test -f $$file; then \ + cp -p $$file $(distdir) || exit 1; \ + else \ + cp -p $(srcdir)/$$file $(distdir) || exit 1; \ + fi; \ + done + +update-po: Makefile + $(MAKE) $(DOMAIN).pot-update + test -z "$(UPDATEPOFILES)" || $(MAKE) $(UPDATEPOFILES) + $(MAKE) update-gmo + +# General rule for creating PO files. + +.nop.po-create: + @lang=`echo $@ | sed -e 's/\.po-create$$//'`; \ + echo "File $$lang.po does not exist. If you are a translator, you can create it through 'msginit'." 1>&2; \ + exit 1 + +# General rule for updating PO files. + +.nop.po-update: + @lang=`echo $@ | sed -e 's/\.po-update$$//'`; \ + if test "$(PACKAGE)" = "gettext-tools"; then PATH=`pwd`/../src:$$PATH; fi; \ + tmpdir=`pwd`; \ + echo "$$lang:"; \ + test "$(srcdir)" = . && cdcmd="" || cdcmd="cd $(srcdir) && "; \ + echo "$${cdcmd}$(MSGMERGE) $$lang.po $(DOMAIN).pot -o $$lang.new.po"; \ + cd $(srcdir); \ + if $(MSGMERGE) $$lang.po $(DOMAIN).pot -o $$tmpdir/$$lang.new.po; then \ + if cmp $$lang.po $$tmpdir/$$lang.new.po >/dev/null 2>&1; then \ + rm -f $$tmpdir/$$lang.new.po; \ + else \ + if mv -f $$tmpdir/$$lang.new.po $$lang.po; then \ + :; \ + else \ + echo "msgmerge for $$lang.po failed: cannot move $$tmpdir/$$lang.new.po to $$lang.po" 1>&2; \ + exit 1; \ + fi; \ + fi; \ + else \ + echo "msgmerge for $$lang.po failed!" 1>&2; \ + rm -f $$tmpdir/$$lang.new.po; \ + fi + +$(DUMMYPOFILES): + +update-gmo: Makefile $(GMOFILES) + @: + +Makefile: Makefile.in.in Makevars $(top_builddir)/config.status @POMAKEFILEDEPS@ + cd $(top_builddir) \ + && $(SHELL) ./config.status $(subdir)/$@.in po-directories + +force: + +# Tell versions [3.59,3.63) of GNU make not to export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/po/Makevars b/po/Makevars new file mode 100644 index 0000000..404adc9 --- /dev/null +++ b/po/Makevars @@ -0,0 +1,41 @@ +# Makefile variables for PO directory in any package using GNU gettext. + +# Usually the message domain is the same as the package name. +DOMAIN = $(PACKAGE) + +# These two variables depend on the location of this directory. +subdir = po +top_builddir = .. + +# These options get passed to xgettext. +XGETTEXT_OPTIONS = --keyword=_ --keyword=N_ + +# This is the copyright holder that gets inserted into the header of the +# $(DOMAIN).pot file. Set this to the copyright holder of the surrounding +# package. (Note that the msgstr strings, extracted from the package's +# sources, belong to the copyright holder of the package.) Translators are +# expected to transfer the copyright for their translations to this person +# or entity, or to disclaim their copyright. The empty string stands for +# the public domain; in this case the translators are expected to disclaim +# their copyright. +COPYRIGHT_HOLDER = Thorsten Kukuk + +# This is the email address or URL to which the translators shall report +# bugs in the untranslated strings: +# - Strings which are not entire sentences, see the maintainer guidelines +# in the GNU gettext documentation, section 'Preparing Strings'. +# - Strings which use unclear terms or require additional context to be +# understood. +# - Strings which make invalid assumptions about notation of date, time or +# money. +# - Pluralisation problems. +# - Incorrect English spelling. +# - Incorrect formatting. +# It can be your email address, or a mailing list address where translators +# can write to without being subscribed, or the URL of a web page through +# which the translators can contact you. +MSGID_BUGS_ADDRESS = kukuk@thkukuk.de + +# This is the list of locale categories, beyond LC_MESSAGES, for which the +# message catalogs shall be used. It is usually empty. +EXTRA_LOCALE_CATEGORIES = diff --git a/po/POTFILES.in b/po/POTFILES.in new file mode 100644 index 0000000..fb2042f --- /dev/null +++ b/po/POTFILES.in @@ -0,0 +1,65 @@ +lib/authentication.c +lib/call_script.c +lib/check_home.c +lib/check_name.c +lib/chown_dir_rec.c +lib/copy_dir_rec.c +lib/copy_xattr.c +lib/date2str.c +lib/dbg_log.c +lib/get_caller_dn.c +lib/get_ldap_password.c +lib/get_value.c +lib/group.c +lib/init_environment.c +lib/is_logged_in.c +lib/libldap.c +lib/lock_database.c +lib/logging.c +lib/logindefs.c +lib/nsw.c +lib/parse_crypt_arg.c +lib/parse_grent.c +lib/parse_pwent.c +lib/passwd_nisplus.c +lib/print_error.c +lib/print_version.c +lib/read-files.c +lib/read-files-group.c +lib/remove_dir_rec.c +lib/remove_gr_mem.c +lib/selinux_utils.c +lib/str2date.c +lib/strtoid.c +lib/user.c +lib/use_slp.c +lib/utf8conv.c +lib/yesno.c +lib/yppasswd_xdr.c +plugins/liblog_laus.c +plugins/liblog_syslog.c +src/chage.c +src/chfn.c +src/chpasswd.c +src/chsh.c +src/expiry.c +src/gpasswd.c +src/groupadd.c +src/groupdel.c +src/groupmod.c +src/grpck.c +src/grpconv.c +src/grpunconv.c +src/newgrp.c +src/pam_rpasswd.c +src/passwd.c +src/pwck.c +src/pwconv.c +src/pwunconv.c +src/rpasswd.c +src/rpasswd-client.c +src/rpasswdd.c +src/useradd.c +src/userdel.c +src/usermod.c +src/vipw.c diff --git a/po/Rules-quot b/po/Rules-quot new file mode 100644 index 0000000..9c2a995 --- /dev/null +++ b/po/Rules-quot @@ -0,0 +1,47 @@ +# Special Makefile rules for English message catalogs with quotation marks. + +DISTFILES.common.extra1 = quot.sed boldquot.sed en@quot.header en@boldquot.header insert-header.sin Rules-quot + +.SUFFIXES: .insert-header .po-update-en + +en@quot.po-create: + $(MAKE) en@quot.po-update +en@boldquot.po-create: + $(MAKE) en@boldquot.po-update + +en@quot.po-update: en@quot.po-update-en +en@boldquot.po-update: en@boldquot.po-update-en + +.insert-header.po-update-en: + @lang=`echo $@ | sed -e 's/\.po-update-en$$//'`; \ + if test "$(PACKAGE)" = "gettext"; then PATH=`pwd`/../src:$$PATH; GETTEXTLIBDIR=`cd $(top_srcdir)/src && pwd`; export GETTEXTLIBDIR; fi; \ + tmpdir=`pwd`; \ + echo "$$lang:"; \ + ll=`echo $$lang | sed -e 's/@.*//'`; \ + LC_ALL=C; export LC_ALL; \ + cd $(srcdir); \ + if $(MSGINIT) -i $(DOMAIN).pot --no-translator -l $$ll -o - 2>/dev/null | sed -f $$tmpdir/$$lang.insert-header | $(MSGCONV) -t UTF-8 | $(MSGFILTER) sed -f `echo $$lang | sed -e 's/.*@//'`.sed 2>/dev/null > $$tmpdir/$$lang.new.po; then \ + if cmp $$lang.po $$tmpdir/$$lang.new.po >/dev/null 2>&1; then \ + rm -f $$tmpdir/$$lang.new.po; \ + else \ + if mv -f $$tmpdir/$$lang.new.po $$lang.po; then \ + :; \ + else \ + echo "creation of $$lang.po failed: cannot move $$tmpdir/$$lang.new.po to $$lang.po" 1>&2; \ + exit 1; \ + fi; \ + fi; \ + else \ + echo "creation of $$lang.po failed!" 1>&2; \ + rm -f $$tmpdir/$$lang.new.po; \ + fi + +en@quot.insert-header: insert-header.sin + sed -e '/^#/d' -e 's/HEADER/en@quot.header/g' $(srcdir)/insert-header.sin > en@quot.insert-header + +en@boldquot.insert-header: insert-header.sin + sed -e '/^#/d' -e 's/HEADER/en@boldquot.header/g' $(srcdir)/insert-header.sin > en@boldquot.insert-header + +mostlyclean: mostlyclean-quot +mostlyclean-quot: + rm -f *.insert-header diff --git a/po/boldquot.sed b/po/boldquot.sed new file mode 100644 index 0000000..4b937aa --- /dev/null +++ b/po/boldquot.sed @@ -0,0 +1,10 @@ +s/"\([^"]*\)"/“\1”/g +s/`\([^`']*\)'/‘\1’/g +s/ '\([^`']*\)' / ‘\1’ /g +s/ '\([^`']*\)'$/ ‘\1’/g +s/^'\([^`']*\)' /‘\1’ /g +s/“”/""/g +s/“/“/g +s/”/”/g +s/‘/‘/g +s/’/’/g diff --git a/po/da.gmo b/po/da.gmo new file mode 100644 index 0000000000000000000000000000000000000000..7875105d485793a1b7f6c0dd660b87228e5db1c5 GIT binary patch literal 61147 zcmb`Q34ml(b^c2*Dx=6Ei|mhqVP;@z7IufVnT>H)W_l1sgzB#9o|^8iYO175p0t0dbnD6TEtP(_v{X6>d=NYs{0;bcaL%$) z=@9S;Q2qf2#WrwGfJh!;1GB&I1Lh2>94`%;5Wew!6VM}__l!xcLR7d_zv&{@KeG4{opR0 z<>@A%;=2mG2z(`|^ga*rzw~?lJOw=S>{6)=HbA*=1uq7_67a}#N+oVfSAYutO7H^k zqoDHlTkvA=JPM(BuLmh&>2E-?RQf)sc#r1KrQk4l9(Wsg68Lpc`TQL?1TLZQ7lYS= zO80L-k|;e0t^iLYu;^=`>f?3bTJU3_@^t`}ej2z2BUH~fI4+Zx_pjhlwDw!;nHi3G66R3FhfR}*30hRCb zFLwF{sCv2u6kps2itbk+Su8E5GDN=%RD6F8%Ky8d@_7QpCxYw1x!@EC%ar~UR6aim zs{a2MR5_MXc}iyosCeE8E(E^@E&%si>CaCK_)Jjg+zcxG2SJ5<2)r0v3iDI+(zT%K z=RF`*R{9|*{y$~4`)>u+PA>z+KYt6VT;C0N*c$I=tHA{SYrtc{=Yz+9ZvqbhKLj2M zeiEDmeic-F-vw2VhrnE?fGfe{!3j|D+yov4z73oUegZrhd;pve9su(wo@Jo?uK^c; zH-akfyFi8eF{t`};!{1JOF^Y`8L0TD!6$<^fro>C1u8!u1Qq|kf-28J>pWklflB{U zFaf87`_Dj{tn@)p?fBb(XRP;hc7V#?3qj@QE>PwCd~p8+RDC>ggFhb%I0`C1H-Zbn zJ3;0DE8uD1F9V*q(fv1oD$gXS_-+K%Zg+#q-;Y4mS9z1y&lXU8&;jRxcY)&nF9$qe zv-9IcAWc@90acCahQ03YJD*b6t<$rzf{}6a2?yrGM z!JmUmz!RV5{qC}W&jlqn-U*%sJ^+gT=qp_At^?Kn&48}}pN#u15K&sX4^%$(dwQv~ z8caa(?>MOXc>$>KZvu}1KLQ>J-VdtXegdkV4u6L8$qG>Qw;j~;*MX{!kAn*LV^Hbu zf2H@IW5J_wpAM?NHh_w67q|$#9aQ>X0u}B*1I~G-$9EEVDE{Yxs^^WM_@@CX{2M^U z|7lSC`dv`<{kW?j`F=i*)is-AX$hk&mHRnE77$AI^MCxBlC75-P?lfZ+k9?!|3^0Nw5J57P& zw_8Ake@F1Y4^)1B0xCa`uQ?{5!k-oJDp2{l5mb5K4xR*l6g(09E|`Fi9`p3(1zZOz zpVxvXgMS7p+~0v}uWx_{gTD&TA2;sL%b?P`3=}`ifU3vazkAU{|BJ*GpFwTbqOfG-T=yfJNQKKX7C{JR`71{PEhI9c6hzL7*v0} z1C;+4gZm+HKJMcuTz;KT_~YL|)yw~aXM)E}`FOY))bkgEs@J!GYWGiqD)0Be1>oZv&cDk* z(On5D-_HdV?|VVj-xooJ`z3fBcy!bAbuOs-*dFi}Q2G8SD7x>1N_YQh9~b9>OK=Z^ zr-3g7Rj&7dqW?;8{{mcw`{--Eo!5g2?mBn?coV4hdo_3=_-;_?{0vn32ezDV&jjb- zekv&Wz72dL_%cx8-vFwAydOLe{357&_zoz(->>cU_+(J|JRMYfUID6Jt_9V8uLg54YeDjz;_I#JYBXF+??q`AG|LZ`>vD-k^^M^o{_cNgK^)KMr;P1f;z_Xt1^MH21 z_kl;_|4UH$JotL&kMlu=n*a|7{}L2`+#T>f@G{)@gW{)Cp2M65+y<@&-vTQ955eW& z3D5QPp8=|TuLo7n9|9HrU%^YkgZ{+p`-*^5pxWmKQ1$)+Q2cx^xDxy#cq4ek^E};K z!Ao#|59Cqll;=DD+yNr0OJ4z1uNU6n`fLrPi_f~wa&pu&9_ zTm=3PsCt?ILg#}Ez+-S<1FGGx2PIeD2CBb&6+9k%6q!}I6HxBeU;@@a)x(Pdz8^db z_XD8n{pc5Yx(fns1J%E702R+WK-JGbfQsjS@Dy?fK=JWi;8EZwg8w%`mE(8dx!|cU^YV{^>Q6U-3in3vX^%n< zgX-^(z1jVr3_c$BB2evjE~x&!5mdfMLAB#e0q+1+zI#E@eH&Z>{uek8Jo^ zhWkcP_4?l6{}WL8Jp7g3E*n9~wda5rg6{&w-#-NvZtkCY|GWxZg8NON>hE*lao|Is z>gSL@bN3mb+?RnX!8UjXcsIBj{0X=eJmXb9&#Qvx;l33-75o~g^!LBT=gsGW>OUQD z8F)8%2KXaT@gM(ce?AH-{yRX$|5H%($G^tio56E%KOejl{2-`w_j|3^!-b&AHwCT- zZv%(GAAt(D=yjfM72J&b_2B8?gJ1$4`+8&zcma4ZcnhfV+z%?9KY(k%^Zwl3F8~+g z{uroqe-`lgH+Z{m1kc9513m@36BOMKg8vb3^mg0;o`e63K()(9!HdA}1^<(7^?Y6l zo`?S{K+%5&JPF+IHm|2sK$YhTP;@T?Rqvk$RiAU-CoFTmXZm7hDoh2Xcq4o&~-*;75Z0L*T{u&;JWA?{-l9`$|ypz8_Th?}Kt5^%l?9TJR#=H-gIF zr$F(+|8nsEJ*fIw{#Ra~SA#0opMzE(;8D2ud#m&Bv7qvEAt?VU zcmViZ@KEq2;2iLcpz?PIsCN1asD69!?VjE_;PJSh2_6YP8$1cTB|QHCD7p46Q0@Kb zJ3QQZp!)AM;7ai2U;=&-oD2R}a3B6Q&+plw@_9wT7I--BmxF4bzXVmEp9PNwOKj0Z)Fv%ZXz_gI=^28svaufvEYjXz7-TdeF7ApJrw+p`IzVX zTu}KM2F16}14VaN@c-xFe$>akJr;uEpUt57tsUIAf~uE~fk%VC02S{+pK!YKK=Dl# zRDRw7s(n8TCg4Nh3E*M(db^zoDjyp`rLz+h{hPsq!TUg!^Q+)7;4eV&*};24c<{-% zH-f5{aZvsHW>E3n4J!Pw{_n`8z8dQE4{iDl;s{_6nJRbk=fU3vegNpy? z&w9T*4Ll6@MWEVYIJg_&LfkI^PXq4)7l2;}MYrESdHIh87619*+2EDnQ@~e&D&J?p z`QU?~;yL7VUSAi0ihnZTYeDtDkAvrdKL=ILMW1)P3{*Yr1eM;cpvrv@sCfPZRQyMM z!Q)v4%D)3Do;QQ%f}aEx?suT*mwnOma}}82emSUccY)`CUj?oHrv z;4{G0;B}zV`53714}dEF6Tj^9uG7FF+)oMaXM^JZmx7A_t-=4}p!nr;pxWg>LB;c! z`@J4d0#*O(K+)B}!@!q-i@@8!L&490OTce~%HM(i?D-xB75-}QiQsNf{rDx|f#6#} zg?o3v?|{p2AM_Qkk0J1}xOamGgU<&a4ZaF2gRcXX{-?kvfnNiU0Dl6ie)j*W>s<># z^`8qtwac@>72xZ@OTce}XMo3l&HLLH@NC>O;2(kS1Qq_hpyK}`sPuja9uEE%R6jlR z>+XLhDE~{ri@;|E_nSbK_kE!F;Q{c;;KAQ;`h}qCW&3_XMc$H-gIFTS2wseW3LdQ2p$XZ#jP~2UWgppvpT5itgp0 z+V6eg`JUka4e(6-_xrZbAIZeJe+#NT4*M5R??y9ZSH z?guXe9{^R(v%ll|;Rv`1_uE0W&#%F!fJ^?>)31XG?stI7_dkNF?}xw*;7R}H{Ch2^ z_IVMgcE1&TJop7r>3<7U{(b_!3_SC@p60RlkG=$M0mZN10>{87KH%wgz;(E9 z19yQBg2#fD?|Z#I7u<>aO`yts_zzs(oB}S!y&hCMJUjTm3Oo+?-JtmXE8sccqyOF8 z|9tRd+;vd$;1%GB;N76w`y1d=@OJ?h|Iou<4XRyV2P)n>z;nU-gZsb-oe$3gMRzqQ zertg9!8d}czdfMB{|Xe}&ij$azZN_T_wzxu*9XA!z@LE&!Bc-QXo^zTXd{}HYq zL!;l9!MB2M1ebBWllzx}UjUat`#;>@!S!{nf9HA#|2Kn2@oWSf!JYq|f&WAJujkTl zf86^0Dek}b+tSO!v;P9s5A;(%i@$koD%m2=sdXGX3E<2fqf_o!l=5&kgD5 z*rSAcKf z+Mnxt`2U7WGDpAb9BizRzM$WuLpa^v%RM5mv9?Ni2|T+6d~FD~ z2D(>qe<-N^i5qw}h5H^b{(g&l2iM#2xDUJuyq)VJu2o!Hxb*uK&%Vl~-`(I#!A0P| zfeVQ{{=OY(ZUA4%^&k(*;9G-#9Xtg3@8ka!?*AtQ+z775{ej>XtcLEZ;Lk(YPX?5{ zzAW6&5h1^eLmoQ8Uw+%TKb`A9u9dhy1MURh2_C}L;J(at4Aa^!x;K({C7{tEY>Bc6W^ejn%l zh2j45-2Xh>3yuisok<)Exc@)E66dms3>_?-!U1bjZY82{tBs@yN*dXk=T>GvaO z{={!f|IPj1a4m;czZ1DO;?{2k_$d7E3hqn5f5!g;{AR!^?oV;u!}VI+F9r2`Kge*D z{{9koh~9KDJ@`wm)A9U1&l0XpTzBC23O(d^A?~BWUxNC5jO$eH|JPi^N7%o>{V}ee z;`dMB>^SSg}6`oz{PWwB}-(Lj(Pjmlgx+nj?1RlfvIo#`a z8u%^Tr@FJ0fQz}_&vg<0cXGA4*Y8zapXK@zekXHX&HX1p{VoMBB(4tkXLJ9e;BOE4 z^Q(9R4sks$q(2wD68C$!&g1?=A>6aUN8|S#a67m%_+Jt5-|;I$KMXz>zmvgda_twM zAJ6?Ox&A1m^I`lC=Dvbo{GE?q5}yBO^vvNrp8o^ay5RQ&a2R*|ZRO@-uF2prC&aZ0 z_kmoW=lUJ=7vcXp?l0rI4)+gpaU9LF4Y>a#_>F35Kx}E!ziTg0{ z#aw@b-<9Co!0q5}F8xmDdL!2{xYvM>0la*qg!`26d??_1@jHp@FrGgVzwd$%;J%vckGU#bPYATD z0v-uI3IBiLx{6D`gTWL0wzP};Nv=QOKA-Dfxxbw2z2W)Wxxa)s4h8kQz`_15!~ZG4 z|8w}fjr$Wqy7veF$3%ME$8o(G_vYX?g!@f_?w{~`0ry99yV0CA5GTB&}sx43E zwda%$xU@M{OEzzBHloL-neDY!c(|q6oJux!rbbeqr!`v>dGa|Mo4b-)W2V+h2$wW! zyOQZjyS=N~swQL27HO2`Y@V!D+O?!zo2-q_Bo%I2JBe^kDe>RDc2X{n)SH#*dU9oD zbhO!N%v@D`+McP_8v`CrCLLnT(_dL$nT*sM)oSCa>aGcmSuxznzU*F9``Cwk7ucYdHtV>W!IXy44(SRi={g$Ra({3Bq4B$lA?2&)mx+D~~-tyI;_= z_wpzUI+TpJnw{xIix)2@lJzvMN^5>?>-*}3V(iXjH5sWTm1-3hooQO+L)J%Q;zLy) zAT2BeEv$QsNRp)GH5YrZhfyJ`jbyI(>bYVI-3k?W{mP-uNwwZWzBEJlHGQ+&?o3Zl z)}~0N(%Ky|Zy8)4^JcidIXdBmN`;x_%tYE;WqYoL+KjN9*&c&#tyNm1+e1m{qRDuB zd!>qe9IH=?XOg+1-e<_!Qd`#Ot0eR=)A5jtVld09+O}UtxAd*Y!Oh;PO*MDY@ah~^ zM_UR_zr`MBt#5s(U;A&3wQ9H(VPJvM_NdIvwCW?BnVJiQZ3XgS8W+~+G>|+K#c+Mw zaa+=vsiUWeJTYqqWvdeN00NB44>1+fB>}>V|ysPsN8Z5Xn$+R!m81HQ1U} zD>iL~V`_AFWlw%eEH{#tM;9TkM_aq6E$HT`7-T}C*087Wiig=-Og!fxp>gfBLrW2)2 zTqvFTzJ;*SJk8PSW{Uw*8HzG(ltG%oJBg9a$2{8X!GFOyUZgywC-PH11%TWn*?$G8Hezg+G50M|u3Ue7qY zo0dm$Y@}3;q+xn^NF*Q7n?gBBJG+O4VdOi$_uw0;!X+NL+EF3I#BFqs`cyhhdb+9_ zF9=0kRjs=ySW=rAUE@aT7f;fc zC<028WqTrR58dSIIktvrIpSL95bs_Ss(_tz%Zb`<^voVvX)J7FE6^nnhVE-7M$1IMJH;b+fTxOQaP=<-NTaW3bt3>B?v}WLLN>)Yu*^l zgjmRIs807%do1=$iB(d%R;}Ks&oC0!|G0)s+F5Tk8#ba;+NyTw#wlbFj8lbbSfPQp z)-~+*m&wI|8_+|#gM|*|)6^LsTc(mGY~zx@z#W}NwT4V2W7EvmP|Vx0f8@qKE38d1 z(_CwWL~k)16(SS*TEl-i5L{Y^G7_W=O1%R6Em?K6)=`G#lkkqke6t zwlLYYcBSQ{NfsI1O?0J&v2GXqncqz1MF|1^uce<(C7`moDjm|(-bEv~YBQZy7!7R5 zUvP#`un6oTLSbXy%xAbqQV>Fu=kVLC`@*>C9bbBrW+Ix0*L=V&28`X(A}h!Y33?AE zeXkh;i=VATlGsJj7ray1cWum^VNga9#%O#sGYXWiRcz)IiBG~IKwynD+diQ6BSFwG zM9O$U&KPVpPfcpARgYeLfaU94usw3wH&iQbU zlsqTu6JQ&Y+4&aR{DiI{Vbl}AGVQa+Zf?s>_B?W-hr;e&D zHR|lcptDoNp-(5tC29X&B+Y`3Y<;BJXkfOG*{52WsaT7~aBd9RJkSv2cFfog8g?Wa z297z9W4-OCVui7xN7S0dG{$c>IxMJr8`oCkW|u+RmMOVJ$ICrIjxf8XjoS6bsM(#n z2&OwD406(^`h*Uqu;s}~^Gs1&xzVlFNwT)x?$lcJztn4iN%wi}g(Y!%WoHeG<5;CL zInz$I;?e|=$uJ{)@K(M$W>SDWZ}v=NvkL4hwOoUAB#0(Zf-qOlQt*cBiFuXewdQ#k zg?6>jiWp?Bnb)3ADVU(i7#`$T=)$o(&M7|3i;Uuv7@#nNE0Rb+)R=O?c+`T6ih8vx z1@#73Q)FVuPX~*U8C{yFHT&-V5Fp8O~yg z=`&9;SX)BC&NPxNSM>^6uc7ESl99^H=ys2UiGCD(9pu0`VxkQ5FQBs;!SZD8y!Kq_ zVlpL|J|-s2&wiL`%xkOjN2&@7Ce0RejP5CVFm2>`*k%y(+Ov-$R+`vWD`&Gz*~WQ= zxrQztQky?-bbgv;pWuZj<;}_1WM$lnEL$~WGi9OFrhG}yInh%tkJ83wL1au1EmUcZ zcQmOA6j(Um1PEmcs$DlaNj2|e;8(`WgwjK-ie@LmW{7RNJ_5UhocNqRutjKuEJxUM zEJvB zY_bUPRGYO%HI__U)+xss8)3K^S>UA0sxho0vd2D?!dPPU-7@Rlybi*6UZ;?#q6)N9 zK*-i$+Vp8R92$sU!IU3RSAnHp;3_?zPf>OFrsBtSsb+TwQ^&Ytr*0L{)j@j zWMdJmiA`FCnq8u!&FS5l5hI}|l6t=Gm9x-HnL$-WE@nQ+wJ;pW$T7S0tJr~C%(ZKY zO&P8HVg4*O54CA)njW{3R`KH4E%&0NKHgBdi+Kt%&cn^RMnWjd$*cpJ88z6B&BXHv znP)NM@^O ztne~|aBm77nxZe5U3fuKUZx(FN`Y06B!*C}tBr|Nq19Fs`wa$JxN5v+qrO+^nzbtt z(Q!C+$-Ic6LJd)Y>15ht!W$y&N1c0g&Ag6{%!RJgHF~evvT57qp_MDIUa?`N)oTG8emLY?R?ULimTaw2`VO{hvgcv^R=2V(6?y3wOP^7z zr;f1+$HsxZkWy8%BaMm)R?)WFrI4hehqDQ|b4}rG-h{K1p=h=d3~V{U;{ShpsEL*~-dt z%Z7K57+&f3^+#!JG22dC$#Nhq$vJ54%C2NswHXj#8{CpS4Ek%z+qx@!aOBsN#~udp z+KodihSy%c%0~NC7NvDDun5;|+c30s-NOy#Ej+uDchzRj*x9djeEu+yDYD01(YiEF zo3iPfs#a`SH8i~H>J39{*I&JL^QKMf3z9n4j?6@Eme1#CBcqxL2{BSNnJcw>ZqV-+ zxsoTDo72W^aZHnzWa-&Umxc@~n%r#DB~A8h(4);m8xoBMofam^$_Nu963a%)%~Asq zE;6Il8gzW;{T}a-&=%$<%50dIVK?)sNV_vS%62@KoCD!jw++OOpY7YQfxYa5V0kR1 zW|c0P>aaHo10sXJHe1>jA=OzVDlGhkS+2&*r0Hl3Wfn$PSR`*L5c zZMexsKkd~BGsZYSlRx`OnDlo)U_(u1ynJ6ZUA1L)W8^j{XFo)y z)Uz2Ow>5mkbGGg2L%ok<=DWgmqTGogOuJWnT><1Dy_l+%*%;yd4h5!NtCM67va(ZeL?<8lg{5^5gg5NDH)k zBXen#sRa9`jVi&cD0_&W=BsbZ>1z~ROOMtvQnYK;Y$Bf{lhUy98ZBg7)o#l$w43FQ+is*6l4 zU93sC3avApWD|pn$PnHi%dDsxu^w-mwgb!BW436FTK!fRCG(hAX9KsAbIWwl4bhnz&1#2(nk zpw3PsSqL)PFt@VBgqV$PnobzltY)JTn<+enVC!F-vA-G!d6HQJ=Jk4A|z6IBFf z74Hx>e+#V?b|+ZovC(=9TYX4dD@7BqSp|H(W~Gb?3!cueykSFm<;sOcA}0F>l!n+# zne8=2SE6_BViVCgPs9y*%f6RJbMW40;)2}s;tLj`?Fo1ZeNm0BWeb}Mn;#s#a-*?< zvqj`~EmU+7SPge~{6L3QQpRgc?hF}J(0FGOGY|_{EmTi5Sl4O;m9G&gB_CVd+e}&b zu@j+&d3DCOp5>ltfp6p5t+c4UgrQk{e22%Wn$v74q#ni8p-bh{wa4A5cG;_mD63A} z?AeOD0EsjNMoJawrc+Jb6CXq;n@`-)Pe#+sS&}kX^#=618mWv<#J%i+hIQ4L38%?o z9u!NPP0?04+Ky~Hmb#)y3F1cOy;D(ljcSFrqWZ?Qdy0-c(OV>IXEXaV9;>O+9iCFz zLz(&#i2=K5+PkMlFzQ;7=cxO~2$=5`>Q~mwbc1~YmjwMHWkEGUfvC`yS#{g~d#~cC z(a6i}!Xa@Z@&2UM%H`?GQD4GTF72JxRMOo`w2Y!&;L(Q;omHGMId)W&Ak&i_aCyF7 zg6!H0vjhrdrnm9hH8Y{vH|s;r5$l2m9BF+lB6_nm3D*Y1#2%+ZWDsBXEBPbv3g>cd@4NlCJN!%0-$WFe9Cpssm7!8 zx9a2DXOaag7LsYUXtV!~O@7I`&O~Qo@tk38ROA0xiz!#TIX1(PR6EZmU`n>l=5clg zs4!Z-QbH(_tc`1jC+{{fkJg%KJK4Bt4k20Ho7sJyDd4uZUEwyY+Op!(p^d{sm#kgC zcKGRfU19aw;f<@dZcSEi+L8<b}Z90dJo33jBJz+VMYb<=D=O=zV^p@B#Qagz$8NyqkPgvHVz z6_l+=+D#I!+K;8#l{?r*&8Dut@t} zeBwLtCFe)CH?@EG%4Oww)vJ~#A*9$$V~?2?*?8JwEe35RS+#L^)fQtaQ3N)Mc^DMP zHv@NvqKA-m%8}pqVODxtcEFQ#=~g5*dyq_5m)7g7)HCnN!ozjNZI59x+i-<~5Cwm` zGveDA(l~r?mZ^z~sz+L;v2_vlip)WjIk`EAByDBe*;Lq2wXYz9o(EZB3zPexIjt|z zWYd<_Lg!`N@k$NV;M<|1;I`qeu(PT=$&6kjp@+PcrFjb1sv>RtGE-ggrRnfThRt?*> zmx{DZ$$Q>2%~9>gU#kNN*r>Jq089XKN`LgKFRZld(cm@A_)M*pQRap0HB-z(mhe0pOoQspAfkDG(Cl&2x6jcj?fH0(Fbx59d+z2VJ*ReS)gf~(OQ+V&rxPeV=H4;XU&X2=WyifswXP!rnU#z6@Z>?K6*jH zPdiw^7Qz}Y@|KtJ;?71?VcxCVh(-|0gsQNSm;G7Z>lrVT%1*3mmQiuNDf!Sj$GCY# z;qq>a$UBNHaY{l%!t1D`+a>I*^mfRIrd}4(DSU>N^(+e(d!P4b<56U42;kc+L*-^! zjeAJYDSHXCIlo(RRLL;_27}oJSj=G>DhmPTlu-A$5&8Quw#4!5Yg<7 z*IU0NXTfa>Pz>S{2HgaLjxx}H?KNoC_J(x^VQF}B8pu(}u# z(Byq8R$`^QP6q*y4-~ePy(1lc zXLF6#*-md8MaiONq^k|D->Ru;*d|>H=jdpYGwtRt0TMvw8JY4*TWY)wu2-J(g(d1O z*(pAyt*h488=dQvYniKqEzaMBU}0U;KAuyHb7oIU<;7@KUbYtM74@i^_cvQ8%=*pC zlhwA*XsekgLoo*U4-DX2#s@{myEb~kiRu{;Z%QyQfs`Vqq*vS0W(ix(kjq4ns%`O< zBTh?^x2&&)*Wo0SIRPm=Nmr=0>!p-Rp7J6mlJ0Pgx~Xb7-G{BXH3mfgnHv_{ns}x?fx{f?#F@`POm#p1l^F*^yr)JVc zHiPd+zIAgssJx>v@kkm%vS_w()f#L}_A|d!8@{0Z@Jld`NreGSy-k*UM4!xzzKz^0 zOYpv#3e;v#i?1= z%$luQ)X)?rbiGZXiEk~jhF(x?V)DB%as4riRPnHmTW40oYS?H}H~rMkkCB*QVGt$E zQ&}Dhm$Hm<7j(EV{h6nJ7d>sh77UHiGm}#4?383wV_~NH6i-pvri0T$mg8+=T_JtK zac^hp%(t`kr>Z}NGjQaQKj=Yje@~nf=>C615)6P>@^T=@qdBCfmxY7Nl&GC*=EtGs zrutWP=i+(_qQmH}EEkSa!L0){+)|7q6yeJ9&a1A}tgS1Wc(|4l-fTLd?rQooDoexl zQ`NJsk2)^CTHlye6rB5_)QBe@M4^f&r=veR z`6Eu5Rr)Ogj9qn=HXkrO$+utsB8NA*mCmI8T$^Uj+KpzBkk%7_>DTUp&7S*N=F8^P zgR{f#4mMR#Wn}!ya!Y@*MxiCcuzi&;V-1KW4Wnvg3c+Ny4I^w|%5+`0=P(4H<>J2< zk?VE_9IN7>jy%NqG<%KM0`;lLENjqH>tDT?wv>*{q_ZE;NBattD zDi`TkxUN)M*W1C8x#mQ(K?PueKN}F`?%fZ%4Ym%XYRZ%~g8rvrRP%_ z+bAr-YI=Hp*Hex%TEyHEq&Ff$L<;0H=m8cnizK5WH)e=169u`s+~4{3p};H+%l!q_ zMag8fGQC#L5Q4D%F zH6XFdMlzPi+Pb}2C#saf7CdHEygjKrx^ko4h&>h> zS|_(-FV4dm-Z4bfdH*XMK-8DaI1VjT`gwL_m}w#6;(=j;8Z8^cY=||@Q4^c>h|IRa zp&6Pp$2m!|LOTLEWL9~KCw$}$DxMjcLBbie#n64N1*(~c7s4tt7laNMr7b3jhnqz^ z`^`(J4z68olFdCu$~t%TM{+ha1|@e zd2L2ft=jTm+?V4jpEO)eN8&_-fl|i{Viqw=QP{)dv~eM>i&pk2PtD1EX-PIP#X;Ot zobJ`qu@Fk})(p2E(Qr-_go0!gi@OJ-S$eQylNh7@>9D z+=6{U6uYOLpoanp9ygI$&npt=qKbQPZF9S?zrDv6w zElrl4z5L9xPg{EW(xniVw=i+m2EB}KX?f{6<)vpQOP4NRy7aWA%b?RrLV1{7BW+%l zkPYRj&04}*5p9{AzoS{JGTUr6PQQ3}1!=RmI&mQ(8si-%GUee~Wr_u@3eB}WIloGn ziHq$oXYOI8t~HE&!`cn2vSKe=ymXF43X}fw@a}1{ub14HOiwafJWqN7)4iDswhgZ? zpPSJsckJOVb5<7zposI%9jS9}fKCVJZJkDCXV`>zz@0F^Qeo)Zsy+AamwDF&?`bN z+e>qZadMoKuo{!~aj2mTT%x0K>}SRkrlfXW_ylEdqG9Eqh10_OJmL_|R)>))PrsMb z!YA5NH+fH{s#!?cP79ylv~Y_#A4lJ_!V6Tnlfo}&JfH^H{R-y9NrLC9k9!bL$jsy=%`Nxp0Fdt^TFe> z;TC+RUTt@(lY8zSv0`B!3de{uhRGUk2ao5E5nsRO4)kbNR`NXD!kT163nn;cR_ihS zjuGF`q$g<4a@CceG*q3?S^=~yEE#-|c%CsT)+pBQdFBX{RIgLfhm*vEzZK}rw8nK4 z8fm~;;^C=^l~NQ>6VJl;J5anB-YImXxa69jDZZZ8;vh9L7`#~@rxCrws&)6=%^`I4 z$+10m?|`MbvqB673NOpBKhHv``8}0s%pM+`QrE9;|Gl2`_7cNn=N_i z-IhsvJGne%+p#Q~H9jNH9f=K198(Up!h|eIxFy zMOY%0H4^1|wWU%#UwkziPSpqqzezP>p4{4yvkDYTS2OlGX1u(U0km4T9J{P)vaxQ4 zkyEjbA@()?8qZliiYJBJQR8r?Z7vU|jdLVpF7u%<7=)6E)}A|dhVv(j(X69W>y=&| zH;&BoFuYP_<6Pa+<*e}uw`%B6(sk;J_udnI=q?J5F!a_8A;Q|q1hs^4;S^%lvQ@+A zT07&C5)a{u5MZP>MQu#j{=E>wPFgLG)d=W4BdQMR;M#S__)tz9o5YyV@#8iKDv#+2 z<4h;%d(p;e8OV-eR#)4~UY~qTx=^;{8OA6LoRVdt7}n~i&MUS%CdDUqT4!vgkd)r{ z!`x$?+LSD7W2^dD#7tG;J>&du*tWQ(f>EN0I^J`K^s;=G(V}P-#wp~g?KpJBfrDmz zpz}CUdYg#X?K@%En6woPUO-=(WI#>Yu(=u_^f^|F^Cyqz>RkPYdac84UhURuEHqlN zi${p>c@Y_w_JBf`vmB6@a0GduFsoTSpRwY*90=V69;$IlD4&?w$&i86H64YF)OM&9 z$AUx%5mGuPPK$L2d0;crWH%Ro{ZYraHnbyaa=N(`V@@I8$=5kN-#Sc9?hq#v{0Z?j zzaeZ89PNxoAEdNm&#|S~KABUMyBxRrhD`OGiMHZN7(RQwVALo+?qX$3bj1 zi+DCtxjL7eX@%*5&hHZa+RvwXM_$~FizVG;Nk+ENw`7nKUj%I`J)_*R%xZ~A*7D3G zOqsQ)`-X{2u85KT>RHoEu+OxeV*-~M%ld34C?XTF(hNNtQnB*Q1Dha|1JigviYrzP zgbQN2N4ScyCGDsv7P}DvBC~Q&*fC8}@OVJ6XC|0+E_pWI#PfYUpBgKXHj@>m6-0zt zMs>^>yN@Hu`zksLYGb4^f6!Kn>FrfRa+XTNxq$P0T17^grzTizg`X6UWOV5G`fiVx zVyZs5W6#~DaY}-8*y(N-M)fijAq!tTUwo4f)XqqImEOg0t0#ABI+u>?rdme9i{2KJ zl01s1TnGM?;6?*u;hISTortDKwB?6L3tK#md@Z|FH9}}x87Gn>VeV**6TG+Xbtbvw zTdod656h~scqI9-@q(X8&PZO?_JIWwy*ihC!lyoLKQL>64`EqPbKkbQiA`Q|osA$i zl;tx*j%QW)>3rWw)}^CRu18rThXcv=?j&_+qg8e!dFcO^eou~jg#&AJnxco_O8S$z zV^6o9lF;gO8YZ;XM#UiB55)r>5DqNJ3J+{z&_j!ngGFzku=D3eUp$aJr@dP3YjQzP zc1p#Z9!!2YjkA}hNCO*ZF^^zovJqIqOKOirRy%g^!q-cVC2;Yew(P7DpGlIAO3=dk5+rjdsHMegh0((!39Zh070kgUyq7J1P0 z=v3{3md6?uHVLa8)5}cB$s!1A6G>u1#B3*a9=VA^BP$+8?o8;S%jK?*+TACS(|u(! ziK<~ZiM*;HAy(Z+P7M=ZW{Y^D#A~{Z5}zgGVN~L{CSQ(b_ktEj->atvf-GG zf#@!*RMI}uWja-6^erFQSga$huCTf0?~Q<_tzk^5u@wdrP4P_e9HZ~KeFTol#bnli zek0JpDEiOz#9H^>6UQRnCkgqGp*#Mp_1HyYQ~G^sQ^foN+O-1-8=9A zeX4j^xdv~l-K>coPtINxj~v(M2a+V$?|nw-cB;^eD6-i^(7mm&F{~d~u4MYyn#_nA zDMJ8=};t5u`K4+M3tD;`(yv^C1VZMfM8u+x2 z;W55pE|#d)&Cr=GhnpETVZ4_0%;&AfLK@lonPk=D^Jkf>Rr@5c8d0yKWT+N1z1q~B z@$}w%=C$vAC&gyPdY(=+w_FA(kn4rNJxTYAv9MVNaS zX6!QbY2_fyf#c936(&a<6J#`jl_Y+pqq{ZEN0?B({RlkUX+|;Pe z^66w6AqtOdjl+{J)MC?)XDQeWr`bf44SPH5;mr7)cON-=`t?SM@mVAv`r_e6cS%(hFi**n$ zTqpsKQB)9k)s!Z3u32VyxB-zy@!1v^pPS5S&+NGyrCL=&_h)=3lnE(b!BCFaiseR6 z>_EKdZkFbFGFqVEgf;}hsOA=v9jX|k43-=-1u^Rz+1+9{WFSp=&jMQF(nc3-pLSw; zdS+DN!1Vsvq=gx&HFY*+FBEQ_RxpFaOlk~LnCrCmW%E)ddix+#b@e5Y6;9k5AM$dM zRjqY8GLcukbJ8tihjlT8UN<4r6-+UW?J$$SmFmrB6`fL|JZR?Ur>Ij)l!SK_bx2_D z9QBl%8uq9yj5H>#uZI|EGY?lqeO5bV@&~3`{hq8Qyj7J!@w)mv!^B6Q>1??d)WQ z&X&?hpwhHKE^3sRRSqg+Cir-+Pfas5|K7GD!W zTyRb{bxU@IaNc+Y`PrI@|9 zk4$9I28m}6B15F6yO7q}#)OVr4QZcCW->xCa8x=AoYqSkq)ntwr!>x) zUK7%1bH!}!<|Ee0xC9@Y4|#@$%7Gy}!tNJw``$t@LqL}AGfZqgiryYSsJ(lSbT5+jqYP)&4kR?iWZxRVnj&3jJMH@MF|bRr z#tauiS#ys`d(v>TuMn!b*@uX#6$4X)^@ey7ZpgO96URnBX$g4AJniXYY&?7qvopVFd<_mdI5Ah-}k1nREO?)~7en2Q6 zd>?M8d+#Z4yZ4tBYT+`E4QQgOrO`Er@8oqi}S)Z_oXU6x`TQt%2<-)Z# zLU;w(5|b=k(#(AZBJrHgdN^9jm(`H-xupS<#N^0kclp!gL)>nDwgr6`ZlQSoIGyRU zj4#O-9&)5SJ4<%3Dp(mCVW`g!LBlrxv|TuCpcrS8={+jvUm4SMJjAs=EC5Jh36(gx zo0%EYN0Xp|Y^&{v%1xnLVTS6PZrJCcDQ0?{JZ5=sQfquoVzmze(<58qeN|IKl1_-v zEBVIPxjHRopo=!E`aIb%G7vT0iZWLX6b2ibAU7>vjf5D((iJ5~D)RL}g8&xyaFBfd zk!_vAI-{MvTFVS|6Hb$lNomxNPx6P!XQOB*x2GZlamA5t%Kbl_EviH?E^h1<;Y%lWve7I2+j?}yEv z{?gn&hMXvgwyQ;9dBS&=sewY1ZPiBYI28+7i}}h6qLmz5pDO-Zm}yS0LZBd(?Bw~xF*oRE*E3hn7U4ilH6L>`34mobaR(fWAD5k6; z+xh61dLzs3oLlcYXNV_I!5e!io5)aWNJoKToq28=Ix)Ld21&_^O7FOzYRC5pTs_5;?)v|C8)f-1kY1>XYlf7JuW3p>rBfrT0afv z>9by>!GhCd!@=e$VYG^;waXBgK6Gp5JkGV6NlRF z%1nEr&TAzmp?yN3>4o}28e6nIdQ!z_v1;2IX<8(u{nJ@O`HGID`Dsg6N|7WzXP;y8 z%C=80%S{hW+|R!+y112L5S<;Ak9C9PDJFTQr}V8{XBb;8iU;(ko1HZ*r}fsK(79VW zQ5Ru&gD<3MXVPaB&DJ>Ez=I7s_4bvt_$CW2lMP7JY`*flC?!zR!sY3F!&7`Tq|LtC zcPej5uQX++b3UZS_1V&N@p2G#PGIgkh|8QMQFQ9n;_ybSnFwrdndZhj9Y%Mx8n5*2 zWSfr6CVUd0GwH|sr?f%R?u82jMS+p?{XuVN>!>b&laCyZXxqP392XE>RX+>zeC)&< z7CZCpx{n6SRju!q^cF<*Vr9m+qN#l}GUNrkVm0GqB!Oj%FJ_pGDUf6vc6y)Xva#2P zp2r}?EcRhG25KeV^UaBA1vi|xiPI~0wlxD-(EkenD{WO%l8)o6Sk}ls0gz18DY>WV zvP@huQq$Q2Vw2Y5WF_JFzjouARU7Aw^ZjFvL_CjGhp*iG})~;T=Zde{0_T0E${Uuwli*lpfFvw_2kg5hsK6?oON6E|R87UX+cQ7}xO2d?XwLk;`EgCKdUSHWMjg z=&b0C4n{o9d(!P>z3Ev0iE_t=pDcXVB?jlSCp>R`l`CT=?Co{lyuLy$=yCstoSmqR zNF1l3&j#$!cLU7Bm+Cx=@xuXPS!ZL{L+xN{dFFaT*Aq8Px~H#~QrfU@F&E0GZb9?n zh-_Pn4GOCpF!iFB&F^dlS7SVD!8-ZbX@_!_GWeHFao`;{sU=S5Kl|JHwkDHHdwKfA zJG*^7pzm`{#iu&xOpN?V_Wghuv3i}}1oE}UMWN%^i2xXww{0;Y5!*D&&t8Hd063UM z{V@jPgai&>)l0NN=1~z=Ej~Y?sRuvIZA5_1W>dDwDA9m|bkK0B_sHX0^>`uN^<{w^ zE%UEEcccr_=^(@y(egb%T~SMq3vru7&I#mV#MbzMG84?cHL*w;n^iWPe5g!T7wPjf zK6U6B7IMu!IP9#5G;(X<9ra~!OeWL%Qn5v=sEeVl{HjgMK zTnMvQ%KRMNJFZ0+SgjcA7;k$-rpZ-|F{|gQi=Hj-%}FmDd=`Zq8EL}Qe_{2a1L#P_$WlpIMmO3A8NUtlJ zqAkNCPl-$(h8+M4ux6TDyv-U{__6_c=6LWbgB(qi&FpD;#&Wm#hK0V;<*9ZO1$x}x z6>BA1Y>+5tnZVwhw(lKGgzp__&vyE`1J|Tu=+HQNeI;GYwr*EkR*!ZVZ9_>ZbE9$C z$)OF5oXA9t#Q@oWoq5KsqWzP|b!TfI-y_l+a~E9}eb_|3*T9)#KsXzcbIjNdwy(a; zv(@$-rIKG?Kj`w(K$go~uNf)O^8$0a?$>DMdrtShAtLP4iPq~I3HIs{UqjHl7xb@O zx;Ea0C!MLT4<+={`P++u?2^hj4M*g;S~1zGp(FHFt-MM%5YG-}`VV_MwU>(rM$1X% z;WaJq63*i}`dOy1F@8ruQY133^jtPE+rBEQLPJ`zfNbl1rG|e<0Ye+#GUFo!g@a`D zErr?+DM2FaovRV?IMRk0i_ZVDLc%9bZG06hZhgEWnRQE)aLn?)RmVfyk>EC`%{2id zga z$Ic(g*>t_gKg8gf>yvo26{)$3aV+MIYMpe%1N$}u(-+%ymOn`_nTq-qCF!0_lXZpB zyv*oK>e=f9zO|eg5Q9XM1375^8ix+CTQrmPagiqX)`nO|Rwg1I(yOu2B5dzZv2bTh zkZZ9#$7gRd9Y9O@DFuT_!zl)sj?D^C@7aM#t1&j&#{66-iNj+d*=#r*YG8aZm4$g! zUf;}RW3gU3W4j6bUbNJ!$XWO0gajL@@C}1|cL&YIsg}*> zOKbFMdN?kvTQX?KHH((NF`a&UfpXNDrH*i{`J`sRHYu`c-i#(Cn5UV|hR;9jo0d}L ziM4hW4gn$Rbgsmf0}cos;R{9NU4qD!4F$HZJHYPRlVG1e2t^z8U~rK5*@Xcyrk`gR zm}W{bIE|DfCdS*sxdt2XwhpfcZDo0Y+Vo>QU|uh5?z0csTY%!!?3)kiAPReAG#tl> zxhuaxJ{?W+B22P)t9A!v>}^i9tC}kFzN9w6K5re4lIs{crA6l(7;TNOUXm&tI-Wa2 zZj2R2wia2_W!Y0^!upc3&_9q2XcH{LuU)rp6;tyjXYd+dd(~u-4UAx$woOa=GDLI- zN~^;Luz^wZ%QzC9vj?rrCIvBP$3kS8@^VXQSZS{m`5Z56ELzy6l3_q}OJjJQ+sFIZ z2H70Zj0C~jq7K6L105@_eN`HKt<&Jw(Gm7|svl`LnwFnf(8>uoio4q5A(W(r-jtr_ zpMuCgF!swll-K2%y`F6Pn=hH!L?#=&;|c!yoPvgL`%Hk|3dueQVLRr+_aIU`dbDTq z^?~&D88fOc3Ic)gFz(7oX|s<(OnCQlGkjfNg4ky)l8)M=7B(EIGK^v3xINnvWQN6< zFZE&jAO!l%1XD^KoW)T_nPrDYNDC7`2LYGXLgke?GPyH>Wh#CTBGj0F4k8zlE&6sc zQ|^-xv#Ike$G(okjHbm4L8dH-ZPOHdA%q#8ABxD}K*jcH5ZFz&hvG*evP{QsLZtDA z=;Ajan7zl3Lhyn#r=v1Gk%Ehg7ZZzLhDdpb!P}>Wsm=%!r=HoGuZ+%tv>?AsZ4E+> z!!6;|u2ZgDe+$aI@r3UE(-7G+j`SS#Z3v2@6F=iYJ7E=AUVd^1CyxGqiYJ(R{R zi>D_qS4lpSk4DToV{V)1YTSHd__h5O;v0n&247*q=eYMZ;NCfl_;cTUzK2v%AV?KlN@{4?zD0r zmhi?F9|!e9hcRp@>|0B>+?z&(^zEV!R-l~LXiBA~gc@vkUsYniPdKTiJ`KopwRE3i zS0Z5;@bV}Wd!o~vn5MROOJ#^IPgys^PTA}{sJc|@8fahf|38kCE{9CZ8v%7x#o(qssr$cwtaq>&9({(Zs zB1Gu19x$tb1R6-)wpp*~v8?1{kR2+V2hIo8ZGJF;iG-Z%HDc^5eJx!yV184sPitf& z7^#h8J>gJwrk5~Wf4Xd;EF9uNKvjG?N$nH2Ywcn6X%^Hn9eAv^cVQ*_4Sc0d%%4t` zl65ShGwBF#{ue&-X`N^#Rgmjy#lV9sBc(?aiYo0*EEs+kKkSU^jL=ZbL?#UTI>opQ zRo$uNDeDPeaiGQbMaIzXmCHveq!Y<>KcQF8Gn-AR^e zo^V9Wwxkehdq=We8ne1oDVN23{wP(gJx$@qG5Be))psWz9(8+GaVxWV!pfL!TM9N? zJB~g7-HTjyi8fr!fLw*;wMXs-ACSbdzW~+jo8v9jsaWI7XmWTw$ZXPuS(r9TGtnzK#+1(Ym2R dv~B{iRw;ZXqi1OjE9(sNJ*r$gJiLuc{}1)JiWdL? literal 0 HcmV?d00001 diff --git a/po/da.po b/po/da.po new file mode 100644 index 0000000..236950b --- /dev/null +++ b/po/da.po @@ -0,0 +1,3101 @@ +# Danish translation pwdutils. +# Copyright (C) 2009 Joe Hansen. +# This file is distributed under the same license as the pwdutils package. +# Joe Hansen , 2009, 2010. +# Korrekturlæsning Lars Christian Jensen 2009. +# Korrekturlæsning Ask Larsen 2010. +# +# Konventioner +# attribute -> attribut +# Authentication -> godkendelse +# batch -> gruppevis +# character -> tegn +# context -> sammenhæng +# credential -> baggrund (kvalifikationer, forudsætninger, akkreditiver, +# legitimationsbeskrivelser.) +# entropy -> entropi +# entry -> post (ordliste har indgang, men virker ikke helt godt i den her). +# entry -> linje (hvor der er tale om logfiler). +# finger -> finger (uafklaret) +# fork -> forgrene +# handshake -> forhandling +# integer value -> heltal +# password -> adgangskode +# salt -> salt (uafklaret, ved end ikke hvad der menes her). +# shell -> skal +# symlink -> symbolsk henvisning +# token -> symbol (uafklaret). +# +# Der er anvendt danske citationstegn »«. +# +msgid "" +msgstr "" +"Project-Id-Version: pwdutils-3.2.10\n" +"Report-Msgid-Bugs-To: kukuk@thkukuk.de\n" +"POT-Creation-Date: 2011-05-10 16:46+0200\n" +"PO-Revision-Date: 2010-07-06 00:00+0100\n" +"Last-Translator: Joe Hansen \n" +"Language-Team: Danish \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: lib/authentication.c:46 src/passwd.c:840 +#, c-format +msgid "%s: PAM Failure, aborting: %s\n" +msgstr "%s: PAM-fejl, afbryder: %s\n" + +# lidt i tvivl om login(%s) her gør/eventuelt erstattes af. Skal det være logind(%s). +#: lib/authentication.c:100 +#, c-format +msgid "Enter login(%s) password:" +msgstr "Indtast logind(%s) adgangskode:" + +#: lib/call_script.c:68 src/vipw.c:89 +#, c-format +msgid "Cannot fork: %s\n" +msgstr "Kan ikke forgrene: %s\n" + +# en af dem hvor jeg ikke rigtig kan bruge »kunne ikke« for failed. +#: lib/call_script.c:76 +#, c-format +msgid "waitpid (%d) failed: %s\n" +msgstr "waitpid (%d) mislykkedes: %s\n" + +#: lib/check_name.c:70 +#, c-format +msgid "Can't compile regular expression: %s\n" +msgstr "Kan ikke kompilere regulært udtryk: %s\n" + +#: lib/chown_dir_rec.c:54 lib/copy_dir_rec.c:147 lib/group.c:389 +#: lib/user.c:495 lib/user.c:759 src/grpck.c:277 src/grpck.c:654 +#: src/pwck.c:284 src/pwck.c:554 src/pwck.c:916 src/pwconv.c:206 +#: src/useradd.c:564 src/useradd.c:1036 src/useradd.c:1111 src/vipw.c:295 +#, c-format +msgid "Cannot change owner/group for `%s': %s\n" +msgstr "Kan ikke ændre ejer/gruppe for »%s«: %s\n" + +#: lib/copy_dir_rec.c:77 lib/group.c:369 lib/user.c:475 lib/user.c:739 +#: src/grpck.c:259 src/grpck.c:634 src/pwck.c:266 src/pwck.c:536 +#: src/pwck.c:896 src/pwconv.c:198 src/useradd.c:547 src/usermod.c:543 +#: src/vipw.c:189 +#, c-format +msgid "Can't create `%s': %m\n" +msgstr "Kan ikke oprette »%s«: %m\n" + +#: lib/copy_dir_rec.c:99 +#, c-format +msgid "Cannot create directory `%s': %s\n" +msgstr "Kan ikke oprette mappe »%s«: %s\n" + +#: lib/copy_dir_rec.c:113 lib/copy_dir_rec.c:199 lib/group.c:378 +#: lib/user.c:484 lib/user.c:748 src/grpck.c:267 src/grpck.c:643 +#: src/pwck.c:274 src/pwck.c:544 src/pwck.c:905 src/pwconv.c:215 +#: src/useradd.c:554 src/useradd.c:1046 src/useradd.c:1117 src/vipw.c:287 +#, c-format +msgid "Cannot change permissions for `%s': %s\n" +msgstr "Kan ikke ændre rettigheder for »%s«: %s\n" + +#: lib/copy_dir_rec.c:138 +#, c-format +msgid "Cannot create symlink `%s': %s\n" +msgstr "Kan ikke oprette symbolsk henvisning »%s«: %s\n" + +#: lib/copy_dir_rec.c:185 src/vipw.c:230 src/vipw.c:238 +#, c-format +msgid "Cannot copy `%s': %s\n" +msgstr "Kan ikke kopiere »%s« %s\n" + +#: lib/copy_dir_rec.c:215 +#, c-format +msgid "Warning: ignoring `%s', not a regular file\n" +msgstr "" + +#: lib/copy_xattr.c:51 lib/copy_xattr.c:69 +#, c-format +msgid "Cannot get attributes for `%s': %m\n" +msgstr "Kan ikke hente attribut for »%s«: %m\n" + +#: lib/copy_xattr.c:93 lib/copy_xattr.c:113 +#, c-format +msgid "Cannot get attribute %s of `%s': %m\n" +msgstr "Kan ikke hente attribut %s af »%s«: %m\n" + +#: lib/copy_xattr.c:127 +#, c-format +msgid "SELinux not enabled, ignore attribute %s for `%s'.\n" +msgstr "SELinux er ikke slÃ¥et til, ignorer attribut %s for »%s«.\n" + +#: lib/copy_xattr.c:133 +#, c-format +msgid "Cannot set attribute %s for `%s': %m\n" +msgstr "Kan ikke indstille attribut %s for »%s«: %m\n" + +#: lib/copy_xattr.c:154 +#, c-format +msgid "%s: Can't get context for `%s'" +msgstr "%s: Kan ikke hente sammenhæng for »%s«" + +#: lib/copy_xattr.c:161 +#, c-format +msgid "%s: Can't set context for `%s'" +msgstr "%s: Kan ikke indstille kontekst for »%s«" + +#: lib/get_ldap_password.c:39 src/chpasswd.c:224 src/chsh.c:516 +#: src/passwd.c:881 +#, c-format +msgid "Enter LDAP Password:" +msgstr "Indtast LDAP-adgangskode:" + +#: lib/group.c:305 src/groupadd.c:506 src/groupdel.c:365 src/grpck.c:820 +#, c-format +msgid "Cannot lock group file: already locked.\n" +msgstr "Kan ikke lÃ¥se gruppefil: Er allerede lÃ¥st.\n" + +#: lib/group.c:334 lib/group.c:409 lib/user.c:440 lib/user.c:514 +#: lib/user.c:704 lib/user.c:778 src/grpck.c:227 src/grpck.c:294 +#: src/grpck.c:599 src/grpck.c:674 src/pwck.c:234 src/pwck.c:301 +#: src/pwck.c:571 src/pwck.c:861 src/pwck.c:936 src/useradd.c:582 +#, c-format +msgid "Can't open `%s': %m\n" +msgstr "Kan ikke Ã¥bne »%s«: %m\n" + +#: lib/group.c:340 lib/user.c:446 lib/user.c:710 src/grpck.c:233 +#: src/grpck.c:605 src/grpunconv.c:225 src/pwck.c:240 src/pwck.c:510 +#: src/pwck.c:867 src/pwconv.c:224 src/pwunconv.c:172 src/useradd.c:538 +#: src/vipw.c:249 src/vipw.c:258 src/vipw.c:272 +#, c-format +msgid "Can't stat `%s': %m\n" +msgstr "Kan ikke stat »%s«: %m\n" + +#: lib/group.c:435 lib/group.c:478 lib/group.c:492 lib/user.c:540 +#: lib/user.c:591 lib/user.c:605 lib/user.c:803 lib/user.c:873 src/grpck.c:703 +#: src/pwck.c:965 +#, c-format +msgid "Error while writing `%s': %m\n" +msgstr "Fejl under skrivning »%s«: %m\n" + +#: lib/group.c:503 +#, c-format +msgid "Group not found (and not deleted): %s\n" +msgstr "Gruppe ikke fundet (og ikke slettet): %s\n" + +#: lib/group.c:511 lib/group.c:540 lib/user.c:623 lib/user.c:653 +#: lib/user.c:883 lib/user.c:912 src/grpck.c:715 src/grpck.c:723 +#: src/pwck.c:977 src/pwck.c:985 +#, c-format +msgid "Error while closing `%s': %m\n" +msgstr "Fejl under lukning »%s«: %m\n" + +#: lib/group.c:520 lib/user.c:632 lib/user.c:893 +#, c-format +msgid "Error while writing to disk `%s': %m\n" +msgstr "Fejl under skrivning til disk »%s«: %m\n" + +#: lib/group.c:530 lib/user.c:642 lib/user.c:903 +#, c-format +msgid "Error while syncing to disk `%s': %m\n" +msgstr "Fejl under synkronisering med disk »%s«: %m\n" + +#: lib/group.c:547 lib/user.c:661 lib/user.c:919 src/grpck.c:472 +#: src/grpck.c:730 src/pwck.c:468 src/pwck.c:734 src/pwck.c:992 +#, c-format +msgid "Warning: cannot create backup file `%s': %m\n" +msgstr "Advarsel: Kan ikke oprette sikkerhedskopifil »%s«: %m\n" + +#: lib/group.c:552 lib/user.c:666 lib/user.c:923 +#, c-format +msgid "Error while renaming `%s': %m\n" +msgstr "Fejl under omdøbning af »%s«: %m\n" + +#: lib/group.c:693 lib/user.c:1094 +#, c-format +msgid "LDAP information update failed: %s\n" +msgstr "LDAP-informationsopdatering mislykkedes: %s\n" + +#: lib/group.c:702 +#, c-format +msgid "Cannot modify/add NIS group entries.\n" +msgstr "Kan ikke ændre/tilføje NIS-gruppe-poster.\n" + +#: lib/group.c:707 lib/user.c:1103 +#, c-format +msgid "Unknown service %d.\n" +msgstr "Ukendt tjeneste %d.\n" + +#: lib/libldap.c:1364 lib/libldap.c:1429 lib/libldap.c:1484 lib/libldap.c:1610 +#: lib/libldap.c:1752 lib/libldap.c:1992 +#, c-format +msgid "Authentication failure.\n" +msgstr "Godkendelse mislykkedes.\n" + +#: lib/libldap.c:1760 +#, c-format +msgid "Cannot find base ou for new users.\n" +msgstr "Kan ikke finde base ou for nye brugere.\n" + +#: lib/libldap.c:1763 +#, c-format +msgid "Base DN for user account `%s' is \"%s\".\n" +msgstr "Base DN for brugerkonto »%s« er »%s«.\n" + +#: lib/libldap.c:2000 +#, c-format +msgid "Cannot find base ou for new groups.\n" +msgstr "Kan ikke finde base ou for nye grupper.\n" + +#: lib/libldap.c:2003 +#, c-format +msgid "Base DN for group `%s' is \"%s\".\n" +msgstr "Base DN for gruppe »%s« er »%s«.\n" + +#: lib/logging.c:65 +#, c-format +msgid "" +"Cannot open logging plugin:\n" +"%s\n" +msgstr "" +"Kan ikke Ã¥bne logningsudvidelsesmodul:\n" +"%s\n" + +#: lib/logging.c:81 lib/logging.c:99 +#, c-format +msgid "" +"Cannot find symbol `%s':\n" +"%s\n" +msgstr "" +"Kan ikke finde symbol »%s«:\n" +"%s\n" + +#: lib/logging.c:140 +#, c-format +msgid "Error setting up logging subsystem!\n" +msgstr "Fejl under opsætning af logningsundersystem!\n" + +#: lib/parse_crypt_arg.c:87 +#, c-format +msgid "Can't open %s for reading: %s\n" +msgstr "Kan ikke Ã¥bne %s til læsning: %s\n" + +#: lib/parse_crypt_arg.c:95 +#, c-format +msgid "Unable to obtain entropy from %s\n" +msgstr "Kunne ikke hente entropi fra %s\n" + +#: lib/parse_crypt_arg.c:110 +#, c-format +msgid "Unable to generate a salt, check your crypt settings.\n" +msgstr "Kunne ikke oprette en salt, tjek din kryptopsætning.\n" + +#: lib/parse_crypt_arg.c:144 +#, c-format +msgid "No support for blowfish compiled in, using MD5.\n" +msgstr "Ingen understøttelse af blowfisk er kompileret ind, anvender MD5.\n" + +#: lib/parse_crypt_arg.c:149 +#, c-format +msgid "No support for %s available, using DES.\n" +msgstr "Ingen understøttelse af %s tilgængelig, anvender DES.\n" + +#: lib/passwd_nisplus.c:306 +#, c-format +msgid "Could not determine hostname!\n" +msgstr "Kunne ikke finde værtsnavn!\n" + +# en kedelig en pÃ¥ engelsk, der ikke kan blive korrekt pÃ¥ dansk. +#: lib/passwd_nisplus.c:322 +#, c-format +msgid "Can't find %s's secret key\n" +msgstr "Kan ikke finde %ss hemmelige nøgle\n" + +#: lib/passwd_nisplus.c:338 lib/passwd_nisplus.c:359 +#, c-format +msgid "Could not get public key for %s!\n" +msgstr "Kunne ikke finde offentlig nøgle for %s!\n" + +#: lib/passwd_nisplus.c:348 +#, c-format +msgid "Could not determine the NIS+ root server!\n" +msgstr "Kunne ikke finde NIS+-rootserveren!\n" + +#: lib/passwd_nisplus.c:366 +#, c-format +msgid "Could not create conversion key!\n" +msgstr "Kunne ikke oprette omregningsnøgle!\n" + +#: lib/passwd_nisplus.c:378 +#, c-format +msgid "DES encryption failure\n" +msgstr "DES-kryptering mislykkedes\n" + +#: lib/passwd_nisplus.c:390 +#, c-format +msgid "rpc.nispasswd not running on %s?\n" +msgstr "rpc.nispasswd kører ikke pÃ¥ %s?\n" + +#: lib/passwd_nisplus.c:411 +#, c-format +msgid "ERROR: password incorrect, try again\n" +msgstr "FEJL: Adgangskode forkert, forsøg igen\n" + +#: lib/passwd_nisplus.c:413 lib/passwd_nisplus.c:481 +#, c-format +msgid "" +"ERROR: %s\n" +" password not changed\n" +msgstr "" +"FEJL: %s\n" +" adgangskode ikke ændret\n" + +#: lib/passwd_nisplus.c:429 lib/passwd_nisplus.c:456 +#, c-format +msgid "DES decryption failure!\n" +msgstr "DES-afkryptering mislykkedes!\n" + +#: lib/passwd_nisplus.c:514 +#, c-format +msgid "ERROR: Unknown error, don't know what happened\n" +msgstr "FEJL: Ukendt fejl, ved ikke hvad der skete\n" + +#: lib/passwd_nisplus.c:519 +#, c-format +msgid "NIS+ password information changed for %s\n" +msgstr "Adgangskodeinformation for NIS+ ændredes for %s\n" + +#: lib/passwd_nisplus.c:521 +#, c-format +msgid "NIS+ credential information changed for %s\n" +msgstr "Baggrundsinformation for NIS+ ændredes for %s\n" + +#: lib/passwd_nisplus.c:590 +#, c-format +msgid "NIS+ passwd table not found: %s\n" +msgstr "Adgangskodetabel for NIS+ blev ikke fundet: %s\n" + +#: lib/passwd_nisplus.c:606 +#, c-format +msgid "User not found in NIS+ table.\n" +msgstr "Bruger ikke fundet i NIS+-tabel.\n" + +#: lib/print_error.c:30 src/rpasswd.c:120 src/rpasswdd.c:139 +#, c-format +msgid "Try `%s --help' or `%s --usage' for more information.\n" +msgstr "Forsøg »%s --help« eller »%s --usage« for yderligere information.\n" + +#: lib/print_version.c:31 src/rpasswd.c:73 src/rpasswdd.c:90 +#, c-format +msgid "" +"Copyright (C) %s Thorsten Kukuk.\n" +"This is free software; see the source for copying conditions. There is NO\n" +"warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n" +msgstr "" +"Ophavsret (C) %s Thorsten Kukuk.\n" +"Dette er frit software; se kilden for kopieringsbetingelser. Der er INGEN\n" +"garanti; end ikke for SALGBARHED eller EGNETHED FOR ET SPECIFIKT FORMÅL.\n" + +#: lib/remove_dir_rec.c:74 +#, c-format +msgid "Cannot remove file `%s': %s\n" +msgstr "Kan ikke fjerne fil »%s«: %s\n" + +#: lib/remove_dir_rec.c:83 +#, c-format +msgid "Cannot remove directory `%s': %s\n" +msgstr "Kan ikke fjerne mappe »%s«: %s\n" + +#: lib/selinux_utils.c:80 +#, c-format +msgid "Couldn't get security context `%s': %s\n" +msgstr "Kunne ikke indhente sikkerhedskontekst »%s«: %s\n" + +#: lib/selinux_utils.c:88 +#, c-format +msgid "Couldn't get default security context: %s\n" +msgstr "Kunne ikke indhente standardsikkerhedskontekst: %s\n" + +#: lib/selinux_utils.c:97 +#, c-format +msgid "Couldn't set default security context to `%s': %s\n" +msgstr "Kunne ikke indstille standardsikkerhedskontekst til »%s«: %s\n" + +#: lib/selinux_utils.c:117 +#, c-format +msgid "Couldn't reset default security context to `%s': %s\n" +msgstr "Kunne ikke nulstille standardsikkerhedskontekst til »%s«: %s\n" + +#: lib/user.c:81 +#, c-format +msgid "Can't find the NIS master server: %s\n" +msgstr "Kan ikke finde server for NIS-master: %s\n" + +#: lib/user.c:88 +#, c-format +msgid "rpc.yppasswdd not running on NIS master %s.\n" +msgstr "rpc.yppasswdd kører ikke pÃ¥ NIS-master %s.\n" + +#: lib/user.c:94 +#, c-format +msgid "rpc.yppasswdd running on illegal port on NIS master %s.\n" +msgstr "rpc.yppasswdd kører pÃ¥ illegal port pÃ¥ NIS-master %s.\n" + +#: lib/user.c:411 src/groupmod.c:434 src/pwck.c:1082 src/useradd.c:1630 +#: src/userdel.c:569 src/usermod.c:1373 +#, c-format +msgid "Cannot lock password file: already locked.\n" +msgstr "Kan ikke lÃ¥se adgangskodefil: Er allerede lÃ¥st.\n" + +#: lib/user.c:615 +#, c-format +msgid "User not found (and not deleted): %s\n" +msgstr "Bruger ikke fundet (og ikke slettet): %s\n" + +#: lib/user.c:858 +#, c-format +msgid " Error while writing `%s': %m\n" +msgstr " Fejl under skrivning af »%s«: %m\n" + +#: lib/user.c:982 +#, c-format +msgid "Error while changing the NIS data.\n" +msgstr "Fejl under ændring af NIS-dataene.\n" + +#: lib/user.c:991 +#, c-format +msgid "Error while changing the NIS+ data.\n" +msgstr "Fejl under ændring af NIS+-dataene.\n" + +#: src/chage.c:56 +#, c-format +msgid "" +"Usage: %s [-D binddn][-P path][-m mindays][-M maxdays][-d lastday][-I " +"inactive][-E expiredate][-W warndays] user\n" +msgstr "" +"Anvend: %s [-D binddn][-P sti][-m mindage][-M maksdage][-d sidstedag][-I " +"inaktiv][-E udløbsdato][-W advardage] bruger\n" + +#: src/chage.c:58 +#, c-format +msgid " %s -l user\n" +msgstr " %s -l bruger\n" + +#: src/chage.c:66 +#, c-format +msgid "" +"%s - change user password expiry information\n" +"\n" +msgstr "" +"%s - ændre udløbsinformation for brugeradgangskode\n" +"\n" + +#: src/chage.c:70 src/chfn.c:112 src/chpasswd.c:70 src/chsh.c:65 +#: src/gpasswd.c:94 src/groupadd.c:64 src/groupdel.c:64 src/groupmod.c:63 +#: src/passwd.c:401 src/useradd.c:67 src/userdel.c:68 src/usermod.c:67 +msgid " -D binddn Use dn \"binddn\" to bind to the LDAP directory\n" +msgstr " -D binddn Anvend dn »binddn« for at forbinde til LDAP-mappen\n" + +#: src/chage.c:73 src/chfn.c:115 src/chpasswd.c:73 src/chsh.c:68 +#: src/passwd.c:403 src/pwconv.c:54 src/pwunconv.c:54 +msgid " -P path Search passwd and shadow file in \"path\"\n" +msgstr " -P sti Find passwd og skyggefil i »sti«\n" + +#: src/chage.c:76 src/chfn.c:88 src/chfn.c:123 src/chpasswd.c:79 src/chsh.c:74 +#: src/gpasswd.c:93 src/groupmod.c:77 src/passwd.c:400 src/usermod.c:91 +msgid " --service srv Use nameservice 'srv'\n" +msgstr " --service srv Anvend navnetjeneste »srv«\n" + +#: src/chage.c:77 src/chfn.c:86 src/chfn.c:124 src/chsh.c:75 +msgid " -q, --quiet Don't be verbose\n" +msgstr " -q, --quiet Vær stille\n" + +#: src/chage.c:78 src/chfn.c:89 src/chfn.c:125 src/chpasswd.c:80 src/chsh.c:76 +#: src/expiry.c:52 src/groupadd.c:74 src/groupdel.c:70 src/groupmod.c:78 +#: src/grpck.c:68 src/grpconv.c:43 src/grpunconv.c:63 src/newgrp.c:66 +#: src/pwck.c:68 src/pwconv.c:56 src/pwunconv.c:56 src/useradd.c:92 +#: src/userdel.c:74 src/usermod.c:96 src/vipw.c:72 +msgid " --help Give this help list\n" +msgstr " --help Vis denne hjælpeliste\n" + +#: src/chage.c:79 src/chfn.c:90 src/chfn.c:126 src/chpasswd.c:81 src/chsh.c:77 +#: src/expiry.c:53 src/groupdel.c:71 src/grpck.c:69 src/grpconv.c:44 +#: src/grpunconv.c:64 src/newgrp.c:67 src/pwck.c:69 src/pwconv.c:57 +#: src/pwunconv.c:57 src/userdel.c:75 src/vipw.c:73 +msgid " -u, --usage Give a short usage message\n" +msgstr " -u, --usage Vis en kort brugerbesked\n" + +#: src/chage.c:80 src/chfn.c:91 src/chfn.c:127 src/chpasswd.c:82 src/chsh.c:78 +#: src/expiry.c:54 src/groupadd.c:76 src/groupdel.c:72 src/groupmod.c:80 +#: src/grpck.c:70 src/grpconv.c:45 src/grpunconv.c:65 src/newgrp.c:68 +#: src/pwck.c:70 src/pwconv.c:58 src/pwunconv.c:58 src/useradd.c:94 +#: src/userdel.c:76 src/usermod.c:98 src/vipw.c:74 +msgid " -v, --version Print program version\n" +msgstr " -v, --version Vis programversion\n" + +#: src/chage.c:81 src/chfn.c:94 src/chfn.c:130 src/chpasswd.c:83 src/chsh.c:81 +#: src/passwd.c:409 +msgid "Valid services are: files, nis, nisplus, ldap\n" +msgstr "Gyldige tjenester er: filer, nis, nisplus, ldap\n" + +#: src/chage.c:109 +#, c-format +msgid "Minimum:\t%ld\n" +msgstr "Minimum:\t%ld\n" + +#: src/chage.c:110 +#, c-format +msgid "Maximum:\t%ld\n" +msgstr "Maksimum:\t%ld\n" + +#: src/chage.c:111 +#, c-format +msgid "Warning:\t%ld\n" +msgstr "Advarsel:\t%ld\n" + +#: src/chage.c:112 +#, c-format +msgid "Inactive:\t%ld\n" +msgstr "Inaktiv:\t%ld\n" + +#: src/chage.c:113 +#, c-format +msgid "Last Change:\t\t" +msgstr "Sidste ændring:\t\t" + +#: src/chage.c:115 +#, c-format +msgid "Unknown, password is forced to change at next login\n" +msgstr "Ukendt, adgangskode skal ændres ved næste logind\n" + +#: src/chage.c:117 src/chage.c:123 src/chage.c:129 src/chage.c:135 +#, c-format +msgid "Never\n" +msgstr "Aldrig\n" + +#: src/chage.c:120 +#, c-format +msgid "Password Expires:\t" +msgstr "Adgangskode udløber:\t" + +#: src/chage.c:126 +#, c-format +msgid "Password Inactive:\t" +msgstr "Adgangskode inaktiv:\t" + +#: src/chage.c:133 +#, c-format +msgid "Account Expires:\t" +msgstr "Konto udløber:\t" + +#: src/chage.c:147 +msgid "Minimum Password Age" +msgstr "Minimum adgangskodealder" + +#: src/chage.c:154 src/chage.c:170 src/chage.c:186 +#, c-format +msgid "Input is no integer value\n" +msgstr "Inddata er ikke et heltal\n" + +#: src/chage.c:156 src/chage.c:172 src/chage.c:188 +#, c-format +msgid "Negative numbers are not allowed as input (except -1)\n" +msgstr "Negative tal er ikke tilladt som inddata (undtagen -1)\n" + +#: src/chage.c:163 +msgid "Maximum Password Age" +msgstr "Maksimal adgangskodealder" + +#: src/chage.c:179 +msgid "Password Expiration Warning" +msgstr "Udløbsadvarsel for adgangskode" + +#: src/chage.c:195 +msgid "Password Inactive" +msgstr "Inaktiv adgangskode" + +#: src/chage.c:203 +msgid "Last Password Change (YYYY-MM-DD)" +msgstr "Sidste ændring af adgangskode (ÅÅÅÅ-MM-DD)" + +#: src/chage.c:217 src/chage.c:237 +#, c-format +msgid "Invalid date\n" +msgstr "Ugyldig dato\n" + +#: src/chage.c:223 +msgid "Account Expiration Date (YYYY-MM-DD)" +msgstr "Udløbsdato for konto (ÅÅÅÅ-MM-DD)" + +#: src/chage.c:340 src/chfn.c:478 src/chsh.c:337 +#, c-format +msgid "Only root is allowed to specify another path\n" +msgstr "Kun root mÃ¥ angive en anden sti\n" + +#: src/chage.c:370 src/chfn.c:439 src/chpasswd.c:171 src/chsh.c:320 +#: src/gpasswd.c:197 src/groupadd.c:376 src/groupdel.c:224 src/groupmod.c:300 +#: src/passwd.c:523 src/useradd.c:1403 src/userdel.c:454 src/usermod.c:978 +#, c-format +msgid "Service `%s' not supported.\n" +msgstr "Tjeneste »%s« er ikke understøttet.\n" + +#: src/chage.c:395 src/chfn.c:510 src/chpasswd.c:208 src/chsh.c:363 +#: src/chsh.c:370 src/expiry.c:247 src/gpasswd.c:230 src/groupadd.c:413 +#: src/groupdel.c:249 src/groupmod.c:333 src/grpck.c:806 src/grpconv.c:100 +#: src/grpunconv.c:197 src/newgrp.c:155 src/passwd.c:589 src/pwck.c:1068 +#: src/pwconv.c:170 src/pwunconv.c:144 src/rpasswd.c:491 src/rpasswdd.c:1339 +#: src/useradd.c:1511 src/userdel.c:479 src/usermod.c:1014 src/vipw.c:410 +#, c-format +msgid "%s: Too many arguments.\n" +msgstr "%s: For mange argumenter.\n" + +#: src/chage.c:402 +#, c-format +msgid "%s: Do not include \"l\" with other flags\n" +msgstr "%s: Inkluder ikke »l« med andre flag\n" + +#: src/chage.c:427 src/chfn.c:531 src/chsh.c:397 src/expiry.c:267 +#: src/gpasswd.c:265 src/groupadd.c:450 src/groupdel.c:278 src/groupmod.c:362 +#: src/passwd.c:656 src/useradd.c:1545 src/userdel.c:507 src/usermod.c:1048 +#, c-format +msgid "%s: Cannot determine your user name.\n" +msgstr "%s: Kan ikke afgøre dit brugernavn.\n" + +#: src/chage.c:446 src/chfn.c:566 src/chsh.c:431 src/userdel.c:527 +#, c-format +msgid "%s: User `%s' is not known to service `%s'.\n" +msgstr "%s: Bruger »%s« er ikke kendt i tjeneste »%s«.\n" + +#: src/chage.c:449 src/chfn.c:555 src/chfn.c:569 src/chsh.c:421 src/chsh.c:434 +#: src/passwd.c:675 src/passwd.c:696 src/userdel.c:530 +#, c-format +msgid "%s: Unknown user `%s'.\n" +msgstr "%s: Ukendt bruger »%s«.\n" + +#: src/chage.c:467 +#, c-format +msgid "Only an administrator is allowed to change aging information.\n" +msgstr "Kun en administrator mÃ¥ ændre aldersinformation.\n" + +#: src/chage.c:483 +#, c-format +msgid "This system does not support shadow accounts.\n" +msgstr "Dette system tillader ikke skyggekonti.\n" + +#: src/chage.c:489 +#, c-format +msgid "This account does not have a shadow entry.\n" +msgstr "Denne konto har ikke en skyggepost.\n" + +#: src/chage.c:535 +#, c-format +msgid "You can only list your own aging information.\n" +msgstr "Du kan kun vise din egen aldersinformation.\n" + +#: src/chage.c:542 src/expiry.c:306 src/passwd.c:1019 +#, c-format +msgid "%s: Failed to drop privileges: %s\n" +msgstr "%s: Kunne ikke slippe privilegier: %s\n" + +#: src/chage.c:554 +#, c-format +msgid "No aging information available for %s.\n" +msgstr "Ingen aldersinformation tilgængelig for %s.\n" + +#: src/chage.c:574 +#, c-format +msgid "Changing aging information for %s.\n" +msgstr "Ændrer aldersinformation for %s.\n" + +#: src/chage.c:580 src/chage.c:667 +#, c-format +msgid "Aging information not changed.\n" +msgstr "Aldersinformation er ikke ændret.\n" + +#: src/chage.c:623 +#, c-format +msgid "Lastday is no date and no integer value >= -1\n" +msgstr "Sidste dag er ikke nogen dato og har ikke værdi af et helt tal >= -1\n" + +#: src/chage.c:643 +#, c-format +msgid "Expiredate is no date and no integer value >= -1\n" +msgstr "Udløbsdato er ingen dato og er ikke et helt tal >= -1\n" + +#: src/chage.c:652 +#, c-format +msgid "Error while parsing options.\n" +msgstr "Fejl under fortolkning af indstillinger.\n" + +#: src/chage.c:698 +#, c-format +msgid "Error while converting to shadow account.\n" +msgstr "Fejl under konvertering til skyggekonto.\n" + +#: src/chage.c:716 +#, c-format +msgid "Error while changing aging information.\n" +msgstr "Fejl under ændring af alderinformation.\n" + +#: src/chage.c:726 +#, c-format +msgid "Aging information changed.\n" +msgstr "Aldersinformation ændret.\n" + +#: src/chfn.c:71 +#, c-format +msgid "" +"Usage: %s [-f name] [-r room] [-w work_phone]\n" +" [-h home_phone] [-o other] [-q] [-u] [-v] [user]\n" +msgstr "" +"Anvend: %s [-f navn] [-r værelse] [-w arbejds_telefon]\n" +" [-h hjemme_telefon] [-o andre] [-q] [-u] [-v] [bruger]\n" + +#: src/chfn.c:79 src/chfn.c:109 +#, c-format +msgid "" +"%s - change user name and information\n" +"\n" +msgstr "" +"%s - ændr brugernavn og -information\n" +"\n" + +#: src/chfn.c:81 src/chfn.c:117 +msgid " -f full-name Change your real name\n" +msgstr " -f fulde-navn Ændr dit navn\n" + +#: src/chfn.c:82 +msgid " -r room Change your office room number\n" +msgstr " -r værelse Ændr dit arbejdsværelsesnummer\n" + +#: src/chfn.c:83 +msgid " -w work_phone Change your office phone number\n" +msgstr " -w arbejds_tlf Ændr dit arbejdstelefonnummer\n" + +#: src/chfn.c:84 +msgid " -h home_phone Change your home phone number\n" +msgstr " -h hjemme_tlf Ændr dit hjemmetelefonnummer\n" + +#: src/chfn.c:85 +msgid " -o other Change the undefined portions of the GECOS field\n" +msgstr " -o andre Ændr de udefinerede dele af GECOS-feltet\n" + +#: src/chfn.c:101 +#, c-format +msgid "" +"Usage: %s [-D binddn] [-P path] [-f name] [-o office] [-p office-phone]\n" +" [-h home-phone][-m other] [-q] [-u] [-v] [user]\n" +msgstr "" +"Anvend: %s [-D binddn] [-P sti] [-f navn] [-o arbejde] [-p arbejds-telefon]\n" +" [-h hjemme-telefon][-m andet] [-q] [-u] [-v] [bruger]\n" + +#: src/chfn.c:118 +msgid " -o office Change your office room number\n" +msgstr " -o arbejde Ændr dit arbejdsværelsesnummer\n" + +#: src/chfn.c:119 +msgid " -p phone Change your office phone number\n" +msgstr " -p telefon Ændr dit arbejdstelefonnummer\n" + +#: src/chfn.c:120 +msgid " -h home-phone Change your home phone number\n" +msgstr " -h hjemme-tlf Ændr dit hjemmetelefonnummer\n" + +#: src/chfn.c:121 +msgid " -m other Change the undefined portions of the GECOS field\n" +msgstr " -m andet Ændr de udefinerede dele af GECOS-feltet\n" + +#: src/chfn.c:165 +#, c-format +msgid "Enter the new value, or press ENTER for the default\n" +msgstr "Indtast den nye værdi, eller tast RETUR for standard\n" + +#: src/chfn.c:171 +msgid "Full Name" +msgstr "Fulde navn" + +#: src/chfn.c:173 +#, c-format +msgid "\tFull Name: %s\n" +msgstr "\tFulde navn: %s\n" + +#: src/chfn.c:176 +msgid "Room Number" +msgstr "Værelsesnummer" + +#: src/chfn.c:178 +#, c-format +msgid "\tRoom Number: %s\n" +msgstr "\tVærelsesnummer: %s\n" + +#: src/chfn.c:181 +msgid "Work Phone" +msgstr "Arbejdstelefon" + +#: src/chfn.c:183 +#, c-format +msgid "\tWork Phone: %s\n" +msgstr "\tArbejdstelefon: %s\n" + +#: src/chfn.c:186 +msgid "Home Phone" +msgstr "Hjemmetelefon" + +#: src/chfn.c:188 +#, c-format +msgid "\tHome Phone: %s\n" +msgstr "\tHjemmetelefon: %s\n" + +#: src/chfn.c:191 +msgid "Other" +msgstr "Andre" + +#: src/chfn.c:193 +#, c-format +msgid "\tOther: %s\n" +msgstr "\tAndre: %s\n" + +#: src/chfn.c:255 +#, c-format +msgid "%s: The characters '%s\"' are not allowed.\n" +msgstr "%s: Tegnene »%s\"« er ikke tilladt.\n" + +#: src/chfn.c:261 src/chsh.c:204 +#, c-format +msgid "%s: Control characters are not allowed.\n" +msgstr "%s: Kontroltegn er ikke tilladt.\n" + +#: src/chfn.c:331 src/chsh.c:257 +#, c-format +msgid "%s: Don't know what I should do.\n" +msgstr "%s: Ved ikke hvad jeg bør gøre.\n" + +#: src/chfn.c:377 src/chfn.c:395 src/chfn.c:407 src/chfn.c:451 src/chfn.c:460 +#: src/gpasswd.c:296 src/passwd.c:614 src/passwd.c:628 +#, c-format +msgid "%s: Permission denied.\n" +msgstr "%s: Tilladelse afvist.\n" + +#: src/chfn.c:586 src/chsh.c:451 src/passwd.c:712 +msgid "Unknown user context" +msgstr "Ukendt brugerkontekst" + +#: src/chfn.c:588 +#, c-format +msgid "%s: %s is not authorized to change the finger information for %s.\n" +msgstr "%s: %s er ikke autoriseret til at ændre fingerinformationen for %s.\n" + +#: src/chfn.c:601 +#, c-format +msgid "SELinux is in permissive mode, continuing.\n" +msgstr "SELinux er i liberal tilstand, fortsætter.\n" + +#: src/chfn.c:619 +#, c-format +msgid "You cannot change the finger information for `%s'.\n" +msgstr "Du kan ikke ændre fingerinformationen for »%s«.\n" + +#: src/chfn.c:626 +#, c-format +msgid "Changing finger information for %s.\n" +msgstr "Ændrer fingerinformation for %s.\n" + +#: src/chfn.c:658 +#, c-format +msgid "%s: Invalid name: `%s'\n" +msgstr "%s: Ugyldigt navn: »%s«\n" + +#: src/chfn.c:666 +#, c-format +msgid "%s: Invalid room number: `%s'\n" +msgstr "%s: Ugyldigt værelsesnummer: »%s«\n" + +#: src/chfn.c:674 +#, c-format +msgid "%s: Invalid work phone: `%s'\n" +msgstr "%s: Ugyldig arbejdstelefon: »%s«\n" + +#: src/chfn.c:682 +#, c-format +msgid "%s: Invalid home phone: `%s'\n" +msgstr "%s: Ugyldig hjemmetelefon: »%s«\n" + +#: src/chfn.c:690 +#, c-format +msgid "%s: `%s' contains illegal characters.\n" +msgstr "%s: »%s« indeholder illegale tegn.\n" + +#: src/chfn.c:716 +#, c-format +msgid "Finger information not changed.\n" +msgstr "Fingerinformation er ikke ændret.\n" + +#: src/chfn.c:724 +#, c-format +msgid "Error while changing finger information.\n" +msgstr "Fejl under ændring af fingerinfomation.\n" + +#: src/chfn.c:734 +#, c-format +msgid "Finger information changed.\n" +msgstr "Fingerinformation ændret.\n" + +#: src/chpasswd.c:59 +#, c-format +msgid "Usage: %s [-D binddn] [-P path] [-e] [-c des|md5|blowfish] [file]\n" +msgstr "Anvend: %s [-D binddn] [-P sti] [-e] [-c des|md5|blowfish] [fil]\n" + +#: src/chpasswd.c:67 +#, c-format +msgid "" +"%s - update password entries in batch\n" +"\n" +msgstr "" +"%s - opdater adgangskodepunkter gruppevis\n" +"\n" + +#: src/chpasswd.c:75 +msgid "" +" -c, --crypt Password should be encrypted with DES, MD5 or blowfish\n" +msgstr "" +" -c, --crypt Adgangskode bør krypteres med DES, MD5 eller blowfish\n" + +#: src/chpasswd.c:77 +msgid " -e, --encrypted The passwords are in encrypted form\n" +msgstr " -e, --encrypted Adgangskoderne er i krypteret format\n" + +#: src/chpasswd.c:278 +#, c-format +msgid "%s: line %ld: missing new password\n" +msgstr "%s: Linje %ld: Mangler ny adgangskode\n" + +#: src/chpasswd.c:287 +#, c-format +msgid "%s: line %ld: unknown user %s\n" +msgstr "%s: LInje %ld: Ukendt bruger %s\n" + +#: src/chpasswd.c:318 src/gpasswd.c:425 +#, c-format +msgid "Cannot create salt for standard crypt" +msgstr "Kan ikke oprette salt for standardkrypt" + +#: src/chpasswd.c:334 src/gpasswd.c:460 +#, c-format +msgid "Cannot create salt for MD5 crypt" +msgstr "Kan ikke oprette salt for MD5-krypt" + +#: src/chpasswd.c:350 src/gpasswd.c:441 +#, c-format +msgid "Cannot create salt for blowfish crypt" +msgstr "Kan ikke oprette salt for blowfishkrypt" + +#: src/chpasswd.c:380 +#, c-format +msgid "%s: line %ld: cannot update password entry\n" +msgstr "%s: Linje %ld: Kan ikke opdatere adgangskodepost\n" + +#: src/chpasswd.c:395 +#, c-format +msgid "%s: errors occurred, %ld passwords not updated\n" +msgstr "%s: Fejl opstod, %ld adgangskoder er ikke opdateret\n" + +#: src/chsh.c:54 +#, c-format +msgid "" +"Usage: %s [-D binddn] [-P path] [-s shell] [-l] [-q]\n" +" [--help] [--usage] [--version] [user]\n" +msgstr "" +"Brug: %s [-D binddn] [-P sti] [-s skal] [-l] [-q]\n" +" [--help] [--usage] [--version] [bruger]\n" + +#: src/chsh.c:62 +#, c-format +msgid "" +"%s - change login shell\n" +"\n" +msgstr "" +"%s - ændr logindskal\n" +"\n" + +#: src/chsh.c:70 +msgid " -l List allowed shells from /etc/shells\n" +msgstr " -l Vis tilladte skaller fra /etc/shells\n" + +#: src/chsh.c:72 +msgid " -s shell Use 'shell' as new login shell\n" +msgstr " -s skal Anvend »skal« som ny logindskal\n" + +#: src/chsh.c:109 +#, c-format +msgid "No known shells.\n" +msgstr "Ingen kendte skaller.\n" + +#: src/chsh.c:177 +#, c-format +msgid "%s: Shell must be a full path name.\n" +msgstr "%s: Skal skal være et fuldt stinavn.\n" + +#: src/chsh.c:183 +#, c-format +msgid "%s: `%s' does not exist.\n" +msgstr "%s: »%s« eksisterer ikke.\n" + +#: src/chsh.c:189 +#, c-format +msgid "%s: `%s' is not executable.\n" +msgstr "%s: »%s« er ikke kørbar.\n" + +#: src/chsh.c:199 +#, c-format +msgid "%s: '%c' is not allowed.\n" +msgstr "%s: »%c« er ikke tilladt.\n" + +#: src/chsh.c:212 +#, c-format +msgid "Warning: \"%s\" is not listed in /etc/shells.\n" +msgstr "Advarsel: »%s« er ikke vist i /etc/shells.\n" + +#: src/chsh.c:215 +#, c-format +msgid "%s: \"%s\" is not listed in /etc/shells.\n" +msgstr "%s: »%s« er ikke vist i /etc/shells.\n" + +#: src/chsh.c:217 +#, c-format +msgid "%s: Use -l option to see list.\n" +msgstr "%s: Anvend tilvalget -l for at se liste.\n" + +#: src/chsh.c:453 +#, c-format +msgid "%s: %s is not authorized to change the shell of `%s'.\n" +msgstr "%s: %s er ikke autoriseret til at ændre skallen pÃ¥ »%s«.\n" + +#: src/chsh.c:466 src/passwd.c:728 +#, c-format +msgid "SELinux is in permissive mode, continuing\n" +msgstr "SELinux er i liberal tilstand, fortsætter\n" + +#: src/chsh.c:484 +#, c-format +msgid "You cannot change the shell for %s.\n" +msgstr "Du kan ikke ændre skallen for %s.\n" + +#: src/chsh.c:495 +#, c-format +msgid "You cannot change a restricted shell.\n" +msgstr "Du kan ikke ændre en begrænset skal.\n" + +#: src/chsh.c:501 +#, c-format +msgid "Changing login shell for %s.\n" +msgstr "Ændrer logindskal for %s.\n" + +#: src/chsh.c:545 +#, c-format +msgid "Enter the new value, or press return for the default.\n" +msgstr "Indtast den nye værdi, eller tast retur for standarden.\n" + +#: src/chsh.c:546 +msgid "Login Shell" +msgstr "Logindskal" + +#: src/chsh.c:554 +#, c-format +msgid "Shell not changed.\n" +msgstr "Skal er ikke ændret.\n" + +#: src/chsh.c:568 +#, c-format +msgid "Error while changing login shell.\n" +msgstr "Fejl under forsøg pÃ¥ ændring af logindskal.\n" + +#: src/chsh.c:578 +#, c-format +msgid "Shell changed.\n" +msgstr "Skal ændret.\n" + +#: src/expiry.c:40 +#, c-format +msgid "Usage: %s [-f]\n" +msgstr "Anvend: %s [-f]\n" + +#: src/expiry.c:48 +#, c-format +msgid "" +"%s - check password expiration and enforce password change\n" +"\n" +msgstr "" +"%s - tjek adgangskodeudløb og gennemtving ændring af adgangskode\n" +"\n" + +#: src/expiry.c:50 +msgid " -f, --force The caller is forced to change the password\n" +msgstr " -f, --force Kalderen er tvunget til at ændre adgangskoden\n" + +#: src/expiry.c:100 +#, c-format +msgid "Age field for %s is wrong" +msgstr "Aldersfelt for %s er forkert" + +#: src/expiry.c:121 +#, c-format +msgid "Your password has expired. Choose a new password." +msgstr "Din adgangskode er udløbet. Vælg en ny adgangskode." + +#: src/expiry.c:139 +#, c-format +msgid "Your login has expired. Contact the system administrator.\n" +msgstr "Dit logind er udløbet. Kontakt systemadministratoren.\n" + +#: src/expiry.c:147 +#, c-format +msgid "Password changing requested. Choose a new password.\n" +msgstr "Anmodning om ændring af adgangskode. Vælg en ny adgangskode.\n" + +#: src/expiry.c:157 +#, c-format +msgid "Your password is inactive. Contact the system administrator.\n" +msgstr "Din adgangskode er inaktiv. Kontakt systemadministratoren.\n" + +#: src/expiry.c:162 +#, c-format +msgid "Your password has expired. Choose a new password.\n" +msgstr "Din adgangskode er udløbet. Vælg en ny adgangskode.\n" + +#: src/expiry.c:171 +#, c-format +msgid "Your password will expire in %ld days.\n" +msgstr "Din adgangskode vil udløbe om %ld dage.\n" + +#: src/expiry.c:174 +#, c-format +msgid "Your password will expire tomorrow.\n" +msgstr "Din adgangskode vil udløbe i morgen.\n" + +# præposition for »inden for« her? +#: src/expiry.c:176 +#, c-format +msgid "Your password will expire within 24 hours.\n" +msgstr "Din adgangskode vil udløbe inden for 24 timer.\n" + +#: src/gpasswd.c:63 src/passwd.c:796 +#, c-format +msgid "%s: error reading from stdin!\n" +msgstr "%s: fejl under læsning af stdin!\n" + +#: src/gpasswd.c:80 +#, c-format +msgid "Usage: %s [-r|-l|-u] group\n" +msgstr "Anvend: %s [-r|-l|-u] gruppe\n" + +#: src/gpasswd.c:87 +#, c-format +msgid "" +"%s - change group password\n" +"\n" +msgstr "" +"%s - ændr gruppeadgangskode\n" +"\n" + +#: src/gpasswd.c:88 +msgid " -r Remove the password for this group\n" +msgstr " -r Fjern adgangskoden for denne gruppe\n" + +#: src/gpasswd.c:89 +msgid " -l Locks the password entry for \"group\"\n" +msgstr " -l LÃ¥ser adgangskodepost for »gruppe«\n" + +#: src/gpasswd.c:91 +msgid " -u Try to unlock the password entry for \"group\"\n" +msgstr " -u Forsøg at lÃ¥se adgangskodepost for »gruppe« op\n" + +#: src/gpasswd.c:96 +msgid " -P path Search group file in \"path\"\n" +msgstr " -P sti Søg gruppefil i »sti«\n" + +#: src/gpasswd.c:98 src/passwd.c:406 src/rpasswd.c:111 src/rpasswdd.c:130 +msgid " --help Give this help list\n" +msgstr " --help Vis denne hjælpeliste\n" + +#: src/gpasswd.c:99 src/passwd.c:407 src/rpasswd.c:112 src/rpasswdd.c:131 +msgid " --usage Give a short usage message\n" +msgstr " --usage Vis en kort anvendelsesbesked\n" + +#: src/gpasswd.c:100 src/passwd.c:408 src/rpasswd.c:113 src/rpasswdd.c:132 +msgid " --version Print program version\n" +msgstr " --version Vis programversion\n" + +#: src/gpasswd.c:101 +msgid " --stdin Receive input from stdin instead of /dev/tty\n" +msgstr " --stdin Modtag inddata fra stdin i steden for /dev/tty\n" + +#: src/gpasswd.c:102 +msgid "Valid services for -r are: files, nis, nisplus, ldap\n" +msgstr "Gyldige tjenester for -r er: filer, nis, nisplus, ldap\n" + +#: src/gpasswd.c:238 +#, c-format +msgid "%s: Group argument missing.\n" +msgstr "%s: Gruppeargument mangler.\n" + +#: src/gpasswd.c:277 +#, c-format +msgid "%s: Group `%s' is not known to service `%s'.\n" +msgstr "%s: Gruppe »%s« er ikke kendt for tjeneste »%s«.\n" + +#: src/gpasswd.c:280 src/groupdel.c:300 src/groupmod.c:384 src/useradd.c:220 +#: src/usermod.c:185 +#, c-format +msgid "%s: Unknown group `%s'.\n" +msgstr "%s: Ukendt gruppe »%s«.\n" + +#: src/gpasswd.c:314 src/passwd.c:909 src/usermod.c:1125 +#, c-format +msgid "Cannot unlock the password for `%s'!\n" +msgstr "Kan ikke lÃ¥se adgangskoden for »%s« op!\n" + +#: src/gpasswd.c:336 src/passwd.c:936 src/usermod.c:1104 +#, c-format +msgid "Password for `%s' is already locked!\n" +msgstr "Adgangskoden for »%s« er allerede lÃ¥st!\n" + +#: src/gpasswd.c:348 +#, c-format +msgid "Changing the password for group %s.\n" +msgstr "Ændrer adgangskoden for gruppe %s.\n" + +#: src/gpasswd.c:355 src/gpasswd.c:357 +msgid "New Password: " +msgstr "Ny adgangskode: " + +#: src/gpasswd.c:366 +#, c-format +msgid "Password change aborted.\n" +msgstr "Ændring af adgangskode afbrudt.\n" + +#: src/gpasswd.c:379 src/gpasswd.c:381 +msgid "Re-enter new password: " +msgstr "Genindtast ny adgangskode: " + +#: src/gpasswd.c:392 +#, c-format +msgid "Sorry, passwords do not match.\n" +msgstr "Beklager, adgangskoderne var ikke ens.\n" + +#: src/gpasswd.c:400 +#, c-format +msgid "%s: Try again later.\n" +msgstr "%s: Forsøg igen senere.\n" + +#: src/gpasswd.c:448 +#, c-format +msgid "No support for blowfish compiled in. Using MD5\n" +msgstr "Ingen understøttelse af blowfish er kompileret ind. Anvender MD5\n" + +#: src/gpasswd.c:475 +#, c-format +msgid "%s: Error changing password.\n" +msgstr "%s: Fejl under ændring af adgangskode.\n" + +#: src/gpasswd.c:484 +#, c-format +msgid "Password removed.\n" +msgstr "Adgangskode fjernet.\n" + +#: src/gpasswd.c:490 src/passwd.c:978 +#, c-format +msgid "Password changed.\n" +msgstr "Adgangskode ændret.\n" + +#: src/groupadd.c:54 +#, c-format +msgid "" +"Usage: %s [-D binddn] [-g gid [-o]] [-r] [-P path] [-p password] group\n" +msgstr "" +"Anvend: %s [-D binddn] [-g gid [-o]] [-r] [-P sti] [-p adgangskode] gruppe\n" + +#: src/groupadd.c:62 +#, c-format +msgid "" +"%s - create a new group\n" +"\n" +msgstr "" +"%s - opret en ny gruppe\n" +"\n" + +#: src/groupadd.c:65 +msgid " -g gid Force the new groupid to be the given number\n" +msgstr "" +" -g gid Fremtving at det nye gruppe-id har det angivne nummer\n" + +#: src/groupadd.c:67 src/groupmod.c:70 src/useradd.c:80 src/usermod.c:79 +msgid " -o Allow duplicate (non-unique) UID\n" +msgstr " -o Tillad duplikat-UID (ikke-unik)\n" + +#: src/groupadd.c:68 src/groupdel.c:67 src/groupmod.c:71 src/grpck.c:61 +#: src/pwck.c:61 src/useradd.c:81 src/userdel.c:71 src/usermod.c:84 +msgid " -P path Search passwd, shadow and group file in \"path\"\n" +msgstr " -P sti Søg passwd, skygge og gruppefil i »sti«\n" + +#: src/groupadd.c:70 src/groupmod.c:73 src/useradd.c:83 src/usermod.c:86 +msgid " -p password Encrypted password as returned by crypt(3)\n" +msgstr " -p adgangskode Krypteret adgangskode som returneret af krypt(3)\n" + +#: src/groupadd.c:72 src/useradd.c:89 +msgid " -r, --system Create a system account\n" +msgstr " -r, --system Opret en systemkonto\n" + +#: src/groupadd.c:73 src/groupdel.c:69 src/useradd.c:91 src/userdel.c:73 +msgid " --service srv Add account to nameservice 'srv'\n" +msgstr " --service srv Tilføj konto til navnetjeneste »srv«\n" + +#: src/groupadd.c:75 src/groupmod.c:79 src/useradd.c:93 src/usermod.c:97 +msgid " --usage Give a short usage message\n" +msgstr " --usage Vis en kort hjælpebesked\n" + +#: src/groupadd.c:77 src/groupdel.c:73 src/useradd.c:95 src/userdel.c:77 +msgid "Valid services for --service are: files, ldap\n" +msgstr "Gyldige tjenester for --service er: Filer, ldap\n" + +#: src/groupadd.c:257 +#, c-format +msgid "%s: Can't get unique gid in range %u - %u.\n" +msgstr "%s: Kan ikke se unik gid i interval %u - %u.\n" + +#: src/groupadd.c:312 +#, c-format +msgid "%s: You are using an undocumented option (-f)!\n" +msgstr "%s: Du anvender et udokumenteret tilvalg (-f)!\n" + +#: src/groupadd.c:320 src/groupadd.c:330 +#, c-format +msgid "%s: Invalid numeric argument `%s' for Group ID.\n" +msgstr "%s: Ugyldigt numerisk argument »%s« for gruppe-id.\n" + +#: src/groupadd.c:352 src/useradd.c:1328 src/usermod.c:925 +#, c-format +msgid "%s: Invalid characters in password `%s'.\n" +msgstr "%s: Ugyldige tegn i adgangskode »%s«.\n" + +#: src/groupadd.c:398 +#, c-format +msgid "%s: You cannot use --gid and --preferred-gid at the same time.\n" +msgstr "%s: Du kan ikke samtidigt anvende --gid og --preferred-gid.\n" + +#: src/groupadd.c:419 src/groupdel.c:255 src/groupmod.c:339 src/useradd.c:1517 +#: src/userdel.c:485 src/usermod.c:1020 +#, c-format +msgid "%s: Too few arguments.\n" +msgstr "%s: For fÃ¥ argumenter.\n" + +#: src/groupadd.c:425 +#, c-format +msgid "%s: You cannot use -f with -o.\n" +msgstr "%s: Du kan ikke bruge -f med -o.\n" + +#: src/groupadd.c:474 +#, c-format +msgid "%s: GID %u is not unique, using another one.\n" +msgstr "%s: GID %u er ikke unik, anvender en anden.\n" + +#: src/groupadd.c:484 src/groupmod.c:398 +#, c-format +msgid "%s: GID %u is not unique.\n" +msgstr "%s: GID %u er ikke unik.\n" + +#: src/groupadd.c:495 src/groupmod.c:411 +#, c-format +msgid "%s: Invalid group name `%s'.\n" +msgstr "%s: Ugyldigt gruppenavn »%s«.\n" + +#: src/groupadd.c:513 src/groupmod.c:421 +#, c-format +msgid "%s: Group `%s' already exists.\n" +msgstr "%s: Gruppe »%s« eksisterer allerede.\n" + +#: src/groupadd.c:555 +#, c-format +msgid "%s: Cannot add group to LDAP database without DN.\n" +msgstr "%s: Kan ikke tilføje gruppe til LDAP-database uden DN.\n" + +#: src/groupadd.c:572 +#, c-format +msgid "%s: Group not added to LDAP database.\n" +msgstr "%s: Gruppe ikke tilføjet til LDAP-database.\n" + +#: src/groupadd.c:604 +#, c-format +msgid "%s: GROUPADD_CMD fails with exit code %d.\n" +msgstr "%s: GROUPADD_CMD fejler med koden %d.\n" + +#: src/groupdel.c:54 +#, c-format +msgid "Usage: %s [-D binddn] [-P path] group\n" +msgstr "Anvend: %s [-D binddn] [-P sti] gruppe\n" + +#: src/groupdel.c:61 +#, c-format +msgid "" +"%s - delete a group\n" +"\n" +msgstr "" +"%s - slet en gruppe\n" +"\n" + +#: src/groupdel.c:130 src/groupdel.c:147 +#, c-format +msgid "%s: GID `%u' is primary group of `%s'.\n" +msgstr "%s: GID »%u« er primær gruppe for »%s«.\n" + +#: src/groupdel.c:297 src/groupmod.c:381 src/useradd.c:214 src/usermod.c:179 +#, c-format +msgid "%s: Group `%s' not found in service `%s'.\n" +msgstr "%s: Gruppe »%s« ikke fundet i tjeneste »%s«.\n" + +#: src/groupdel.c:310 +#, c-format +msgid "%s: Cannot remove user's primary group.\n" +msgstr "%s: Kan ikke fjerne brugers primære gruppe.\n" + +#: src/groupdel.c:325 +#, c-format +msgid "%s: Cannot delete group from LDAP database without DN.\n" +msgstr "%s: Kan ikke slette gruppe fra LDAP-database uden DN.\n" + +#: src/groupdel.c:342 +#, c-format +msgid "%s: Group not deleted from LDAP database.\n" +msgstr "%s: Gruppe er ikke slettet fra LDAP-database.\n" + +#: src/groupdel.c:355 +#, c-format +msgid "%s: GROUPDEL_PRECMD fails with exit code %d.\n" +msgstr "%s: GROUPDEL_PRECMD fejler med kode %d.\n" + +#: src/groupdel.c:373 +#, c-format +msgid "%s: Error deleting group `%s'.\n" +msgstr "%s: Fejl under sletning af gruppe »%s«.\n" + +#: src/groupdel.c:397 +#, c-format +msgid "%s: GROUPDEL_POSTCMD fails with exit code %d.\n" +msgstr "%s: GROUPDEL_POSTCMD fejler med kode %d.\n" + +#: src/groupmod.c:54 +#, c-format +msgid "Usage: %s [-g gid [-o]] [-n new_name] group\n" +msgstr "Anvend: %s [-g gid [-o]] [-n nyt_navn] gruppe\n" + +#: src/groupmod.c:61 +#, c-format +msgid "" +"%s - modify a group entry\n" +"\n" +msgstr "" +"%s - ændr en gruppepost\n" +"\n" + +#: src/groupmod.c:65 +msgid " -g gid Change the groupid to the given number\n" +msgstr " -g gid Ændr gruppe-id'et til det angivne nummer\n" + +#: src/groupmod.c:67 src/useradd.c:76 +msgid " -k skeldir Specify an alternative skel directory\n" +msgstr " -k skeldir Angiv en alternativ skelmappe\n" + +#: src/groupmod.c:69 +msgid " -n name Change group name.\n" +msgstr " -n navn Ændr gruppenavn.\n" + +#: src/groupmod.c:75 +msgid " -A user Add the user to the group entry\n" +msgstr " -A bruger Tilføj brugeren til gruppeposten\n" + +#: src/groupmod.c:76 +msgid " -R user Remove the user from the group entry\n" +msgstr " -R bruger Fjern brugeren fra gruppeposten\n" + +#: src/groupmod.c:81 src/usermod.c:99 +msgid "Valid services are: files, ldap\n" +msgstr "Gyldige tjenester er: Filer, ldap\n" + +#: src/groupmod.c:245 +#, c-format +msgid "%s: invalid numeric argument `%s' for Group ID.\n" +msgstr "%s: Ugyldigt numerisk argument »%s« for gruppe-id.\n" + +#: src/groupmod.c:271 +#, c-format +msgid "%s: invalid characters in password `%s'.\n" +msgstr "%s: Ugyldige tegn i adgangskode »%s«.\n" + +#: src/groupmod.c:467 +#, c-format +msgid "%s: Cannot modify group in LDAP database without DN.\n" +msgstr "%s: Kan ikke ændre gruppe i LDAP-database uden DN.\n" + +#: src/groupmod.c:485 +#, c-format +msgid "%s: Group not modified in LDAP database.\n" +msgstr "%s: Gruppe ikke ændret i LDAP-database.\n" + +#: src/grpck.c:51 +#, c-format +msgid "Usage: %s [-P path] [-q|-r]\n" +msgstr "Anvend: %s [-P sti] [-q|-r]\n" + +#: src/grpck.c:59 +#, c-format +msgid "" +"%s - check integrity of group file\n" +"\n" +msgstr "" +"%s - tjek integritet pÃ¥ gruppefil\n" +"\n" + +#: src/grpck.c:63 src/pwck.c:63 +msgid " -q, --quiet Don't print warnings, only errors\n" +msgstr " -q, --quiet Vis ikke advarsler, kun fejl\n" + +#: src/grpck.c:64 src/pwck.c:64 +msgid " -r, --read-only Run in read-only mode, don't make changes\n" +msgstr " -r, --read-only Kør i læsningstilstand, lav ikke ændringer\n" + +#: src/grpck.c:66 +msgid " -s, --sort Sort the group file, no checks are done\n" +msgstr " -s, --sort Sorter gruppefilen, ingen tjek er udført\n" + +#: src/grpck.c:78 src/pwck.c:78 +#, c-format +msgid "No\n" +msgstr "Nej\n" + +#: src/grpck.c:222 src/pwck.c:229 +#, c-format +msgid "Checking `%s'\n" +msgstr "Tjekker »%s«\n" + +#: src/grpck.c:337 src/grpck.c:384 +#, c-format +msgid "Invalid group entry.\n" +msgstr "Ugyldig gruppepost.\n" + +#: src/grpck.c:338 src/pwck.c:346 src/pwck.c:616 +#, c-format +msgid "Delete empty line? " +msgstr "Slet tom linje? " + +#: src/grpck.c:356 +#, c-format +msgid "Invalid group entry with comment.\n" +msgstr "Ugyldig gruppepost med kommentar.\n" + +#: src/grpck.c:357 src/grpck.c:385 src/grpck.c:402 src/grpck.c:418 +#: src/pwck.c:365 src/pwck.c:381 src/pwck.c:397 src/pwck.c:413 src/pwck.c:635 +#: src/pwck.c:650 src/pwck.c:666 src/pwck.c:682 src/pwck.c:700 +#, c-format +msgid "Delete line `%s'? " +msgstr "Slet linje »%s«? " + +#: src/grpck.c:401 +#, c-format +msgid "Invalid group name `%s'.\n" +msgstr "Ugyldigt gruppenavn »%s«.\n" + +#: src/grpck.c:417 +#, c-format +msgid "Duplicate group entry\n" +msgstr "Dupliker gruppepost\n" + +#: src/grpck.c:445 +#, c-format +msgid "Group `%s': unknown user `%s'\n" +msgstr "Gruppe »%s«: Ukendt bruger »%s«\n" + +#: src/grpck.c:451 +#, c-format +msgid "Group `%s': Duplicate user entry `%s', already primary group.\n" +msgstr "Gruppe »%s«: Dupliker brugerpost »%s«, er allerede primærgruppe.\n" + +#: src/grpck.c:812 src/pwck.c:1074 +#, c-format +msgid "%s: -s and -r are incompatibile.\n" +msgstr "%s: - s og -r er inkompatible.\n" + +#: src/grpconv.c:33 src/grpunconv.c:51 src/pwconv.c:44 src/pwunconv.c:44 +#, c-format +msgid "Usage: %s\n" +msgstr "Anvend: %s\n" + +#: src/grpconv.c:40 +#, c-format +msgid "" +"%s - convert to shadow group\n" +"\n" +msgstr "" +"%s - konverter til skyggegruppe\n" +"\n" + +#: src/grpconv.c:105 +#, c-format +msgid "%s: /etc/gshadow is not supported by this system.\n" +msgstr "%s: /etc/gshadow er ikke understøttet af dette system.\n" + +#: src/grpunconv.c:58 +#, c-format +msgid "" +"%s - convert from shadow groups\n" +"\n" +msgstr "" +"%s - konverter fra skyggegrupper\n" +"\n" + +#: src/grpunconv.c:61 +msgid " -P path Search group and gshadow file in \"path\"\n" +msgstr " -P sti Søg efter gruppe og gshadowfil i »sti«\n" + +#: src/grpunconv.c:219 +#, c-format +msgid "%s: No gshadow file found.\n" +msgstr "%s: Ingen gshadow-fil fundet.\n" + +#: src/grpunconv.c:243 src/pwconv.c:243 src/pwconv.c:267 src/pwunconv.c:190 +#, c-format +msgid "Cannot create backup file `%s': %m\n" +msgstr "Kan ikke oprette sikkerhedsfil »%s«: %m\n" + +#: src/grpunconv.c:266 src/pwunconv.c:214 +#, c-format +msgid "Error while moving password for `%s'.\n" +msgstr "Fejl under flytning af adgangskode for »%s«.\n" + +#: src/newgrp.c:52 +#, c-format +msgid "Usage: %s [-l|-c command] [group]\n" +msgstr "Anvend: %s [-l|-c kommando] [gruppe]\n" + +#: src/newgrp.c:60 +#, c-format +msgid "" +"%s - change the effective group id\n" +"\n" +msgstr "" +"%s - ændr den effektive gruppe-id\n" +"\n" + +#: src/newgrp.c:63 +msgid " -l, --login reinitialize environment as if logged in\n" +msgstr " -l, --logind geninstaller miljø som om du var logget ind\n" + +#: src/newgrp.c:65 +msgid " -c command Execute `command' with new group\n" +msgstr " -c kommando Kør »kommando« med ny gruppe\n" + +#: src/newgrp.c:161 +#, c-format +msgid "%s: -l and -c are exclusive\n" +msgstr "%s: -l og -c udelukker hinanden indbyrdes\n" + +#: src/newgrp.c:167 +#, c-format +msgid "%s: -c requires a group argument\n" +msgstr "%s: -c kræver et gruppeargument\n" + +#: src/newgrp.c:174 +#, c-format +msgid "%s: Unknown user.\n" +msgstr "%s: Ukendt bruger.\n" + +#: src/newgrp.c:195 +#, c-format +msgid "%s: bad group `%s'.\n" +msgstr "%s: dårlig gruppe »%s«.\n" + +#: src/newgrp.c:218 src/newgrp.c:313 +#, c-format +msgid "%s: calling getgroups failed: %s\n" +msgstr "%s: Kunne ikke kalde op til getgrupper: %s\n" + +#: src/newgrp.c:271 +#, c-format +msgid "%s: failure to get group entry for %d.\n" +msgstr "%s: Kunne ikke indhente gruppepost for %d.\n" + +#: src/newgrp.c:281 +msgid "Password: " +msgstr "Adgangskode: " + +#: src/newgrp.c:284 +#, c-format +msgid "%s: password incorrect.\n" +msgstr "%s: Ugyldig adgangskode.\n" + +#: src/newgrp.c:351 +#, c-format +msgid "%s: too many groups, not added.\n" +msgstr "%s: For mange grupper, ikke tilføjet.\n" + +#: src/newgrp.c:358 +#, c-format +msgid "%s: calling setgroups failed: %s\n" +msgstr "%s: Kunne ikke kalde op til setgrupper: %s\n" + +#: src/newgrp.c:365 src/newgrp.c:380 +#, c-format +msgid "%s: calling setgid failed: %s\n" +msgstr "%s: Kunne ikke kalde op til setgid: %s\n" + +#: src/newgrp.c:374 +#, c-format +msgid "%s: calling initgroups failed: %s\n" +msgstr "%s: Kunne ikke kalde op til initgrupper: %s\n" + +#: src/newgrp.c:389 +#, c-format +msgid "%s: calling setuid failed: %s\n" +msgstr "%s: Kunne ikke kalde op til setuid: %s\n" + +#: src/newgrp.c:401 +#, c-format +msgid "Cannot change to directory %s: %s\n" +msgstr "Kan ikke skifte til mappe %s: %s\n" + +#: src/newgrp.c:439 +#, c-format +msgid "%s: execl failed: %s\n" +msgstr "%s: execl mislykkedes: %s\n" + +#: src/pam_rpasswd.c:219 src/pam_rpasswd.c:223 src/pam_rpasswd.c:330 +#: src/pam_rpasswd.c:334 src/rpasswd.c:211 src/rpasswd.c:214 src/rpasswd.c:297 +#: src/rpasswd.c:300 +#, c-format +msgid "error while reading request: %s" +msgstr "fejl under læsning af forespørgsel: %s" + +#: src/pam_rpasswd.c:220 src/rpasswd.c:212 src/rpasswd-client.c:58 +#: src/rpasswd-client.c:71 src/rpasswd-client.c:82 src/rpasswd-client.c:108 +#: src/rpasswd-client.c:121 +msgid "Peer has closed the TLS connection" +msgstr "Modpart har lukket TLS-forbindelsen" + +#: src/pam_rpasswd.c:235 src/pam_rpasswd.c:344 +#, c-format +msgid "error while allocating memory: %m" +msgstr "fejl under tildeling af hukommelse: %m" + +#: src/pam_rpasswd.c:242 src/rpasswd.c:223 src/rpasswd.c:312 +#, c-format +msgid "error while reading request data: %s" +msgstr "fejl under læsning af forespørgselsdata: %s" + +#: src/pam_rpasswd.c:296 src/rpasswd.c:269 src/rpasswd.c:358 +#, c-format +msgid "Cannot send input back to server: %s\n" +msgstr "Kan ikke sende inddata tilbage til server: %s\n" + +#: src/pam_rpasswd.c:331 src/rpasswd.c:298 +msgid "wrong data received" +msgstr "modtog forkerte data" + +#: src/pam_rpasswd.c:352 +#, c-format +msgid "error while reading request data: %m" +msgstr "fejl under læsning af forespørgselsdata: %m" + +#: src/pam_rpasswd.c:403 +#, c-format +msgid "Cannot send input back to server: %m\n" +msgstr "Kan ikke sende inddata tilbage til server: %m\n" + +#: src/pam_rpasswd.c:565 +#, c-format +msgid "SLP: Found Server on %s, port %s (%s)\n" +msgstr "SLP: Fandt server på %s, port %s (%s)\n" + +#: src/pam_rpasswd.c:568 +#, c-format +msgid "SLP: Found Server on %s, port %s\n" +msgstr "SLP: Fandt server på %s, port %s\n" + +#: src/pam_rpasswd.c:574 +#, c-format +msgid "SLP: Found Server on %s (%s)\n" +msgstr "SLP: Fandt server på %s (%s)\n" + +#: src/pam_rpasswd.c:577 +#, c-format +msgid "SLP: Found Server on %s\n" +msgstr "SLP: Fandt server på %s\n" + +#: src/passwd.c:210 +#, c-format +msgid "Unable to initialize BioAPI framework, BioAPI error #:%x.\n" +msgstr "Kan ikke initialisere BioAPI-struktur, BioAPI-fejl #:%x.\n" + +#: src/passwd.c:220 +#, c-format +msgid "Unable to parse UUID (BioAPI error #:%x) : %s\n" +msgstr "Kan ikke fortolke UUID (BioAPI-fejl #:%x) : %s\n" + +#: src/passwd.c:241 +#, c-format +msgid "Unable to load BioAPI BSP with UUID of %s, BioAPI error #%x.\n" +msgstr "Kan ikke indlæste BioAPI BSP med UUID fra %s, BioAPI-fejl #%x.\n" + +#: src/passwd.c:252 +#, c-format +msgid "" +"Unable to attach default device to BioAPI BSP with UUID of %s, BioAPI error #" +"%x.\n" +msgstr "" +"Kan ikke tilføje standardenhed til BioAPI BSP med UUID fra %s, BioAPI-fejl #%" +"x.\n" + +#: src/passwd.c:278 +#, c-format +msgid "Unable to create BIR database directory, \"%s\"\n" +msgstr "Kan ikke oprette BIR-databasemappe, »%s«\n" + +#: src/passwd.c:291 +#, c-format +msgid "" +"Unable to create BSP-specific subdirectory in BIR database directory, \"%s" +"\"\n" +msgstr "Kan ikke oprette BSP-specifik undermappe i BIR-databasemappe, »%s«\n" + +#: src/passwd.c:306 +#, c-format +msgid "" +"Unable to write biometric identification record, \"%s\": BioAPI error #%x\n" +msgstr "" +"Kan ikke skrive biometrisk identifikationsoptagelse, »%s«: BioAPI-fejl #%x\n" + +#: src/passwd.c:318 +#, c-format +msgid "Unable to open BIR for writing, \"%s\"\n" +msgstr "Kan ikke åbne og skrive i BIR, »%s«\n" + +#: src/passwd.c:349 +#, c-format +msgid "Unable to enroll user %s using BSP with UUID of %s, BioAPI error #%x.\n" +msgstr "" +"Kan ikke indtegne bruger %s der anvender BSP med UUID fra %s, BioAPI-fejl #%" +"x.\n" + +#: src/passwd.c:367 +#, c-format +msgid "Usage: %s [-f|-g|-s|-k[-q]] [account]\n" +msgstr "Anvend: %s [-f|-g|-s|-k[-q]] [konto]\n" + +#: src/passwd.c:368 +#, c-format +msgid " %s [-D binddn] [-n min] [-x max] [-w warn] [-i inact] account\n" +msgstr " %s [-D binddn] [-n min] [-x maks] [-w adv] [-i inakt] konto\n" + +#: src/passwd.c:369 +#, c-format +msgid " %s {-l|-u|-d|-S[-a]|-e} account\n" +msgstr " %s {-l|-u|-d|-S[-a]|-e} konto\n" + +#: src/passwd.c:371 +#, c-format +msgid " %s --bioapi [account]\n" +msgstr " %s --bioapi [konto]\n" + +#: src/passwd.c:373 +#, c-format +msgid " %s --stdin [account]\n" +msgstr " %s --stdin [konto]\n" + +#: src/passwd.c:380 src/rpasswd.c:93 src/rpasswdd.c:114 +#, c-format +msgid "" +"%s - change password information\n" +"\n" +msgstr "" +"%s - ændr adgangskodeinformation\n" +"\n" + +#: src/passwd.c:382 +msgid " -f Change the finger (GECOS) information\n" +msgstr " -f Ændr fingerinformationen (GECOS)\n" + +#: src/passwd.c:384 +msgid " -s Change the login shell\n" +msgstr " -s Ændr logindskallen\n" + +#: src/passwd.c:385 +msgid " -g Change the group password\n" +msgstr " -g Ændr gruppeadgangskoden\n" + +#: src/passwd.c:386 +msgid " -k Change the password only if expired\n" +msgstr " -k Ændr kun adgangskoden hvis udløbet\n" + +#: src/passwd.c:387 +msgid " -q Try to be quiet\n" +msgstr " -q Forsøg at være stille\n" + +#: src/passwd.c:388 +msgid " -S Show the password attributes\n" +msgstr " -S Vis attributterne for adgangskode\n" + +#: src/passwd.c:389 +msgid " -a Only with -S, show for all accounts\n" +msgstr " -a Kun med -S, vis for alle konti\n" + +#: src/passwd.c:390 +msgid " -d Delete the password for the named account\n" +msgstr " -d Slet adgangskoden for den navngivne konto\n" + +#: src/passwd.c:391 +msgid " -l Locks the password entry for \"account\"\n" +msgstr " -l Låser adgangskodeposter for »konto«\n" + +#: src/passwd.c:392 +msgid " -u Try to unlock the password entry for \"account\"\n" +msgstr " -u Forsøg at åbne adgangskodeposter for »konto«\n" + +#: src/passwd.c:393 +msgid " -e Force the user to change password at next login\n" +msgstr "" +" -e Tving brugeren til at ændre adgangskode ved næste logind\n" + +#: src/passwd.c:394 +msgid " -n min Set minimum field for \"account\"\n" +msgstr " -n min Indstil minimumslængde for »konto«\n" + +#: src/passwd.c:395 +msgid " -x max Set maximum field for \"account\"\n" +msgstr " -x maks Indstil maksimumlængde for »konto«\n" + +#: src/passwd.c:396 +msgid " -w warn Set warn field for \"account\"\n" +msgstr " -w adv Indstil advarelseslængde for »konto«\n" + +#: src/passwd.c:398 +msgid " --bioapi Authentication token is handled via BioAPI\n" +msgstr " --bioapi Godkendelsessymbol håndteres via BioAPI\n" + +#: src/passwd.c:405 +msgid " --stdin Read new password from stdin (root only)\n" +msgstr " --stdin Læs ny adgangskode fra stdin (kun root)\n" + +#: src/passwd.c:597 +#, c-format +msgid "%s: User argument missing\n" +msgstr "%s: Mangler brugerargument\n" + +#: src/passwd.c:690 +#, c-format +msgid "%s: User `%s' is not known to service `%s'\n" +msgstr "%s: Bruger »%s« er ikke kendt for tjeneste »%s«\n" + +#: src/passwd.c:715 +#, c-format +msgid "%s: %s is not authorized to change the password of %s\n" +msgstr "%s: %s er ikke autoriseret til at ændre adgangskoden for %s\n" + +#: src/passwd.c:744 +#, c-format +msgid "%s: Permission denied\n" +msgstr "%s: Tilladelse nægtet\n" + +#: src/passwd.c:753 +#, c-format +msgid "You cannot change the shadow data for `%s'.\n" +msgstr "Du kan ikke ændre skyggedataene for »%s«.\n" + +#: src/passwd.c:781 +#, c-format +msgid "%s: -P flag not supported in this mode!\n" +msgstr "%s: Mærke -P er ikke understøttet i denne tilstand!\n" + +#: src/passwd.c:811 +#, c-format +msgid "Changing password for %s.\n" +msgstr "Ændrer adgangskode for %s.\n" + +#: src/passwd.c:960 +#, c-format +msgid "Error while changing password expiry information.\n" +msgstr "Fejl under ændring af udløbsinformation for adgangskode.\n" + +#: src/passwd.c:962 +#, c-format +msgid "Error while changing password.\n" +msgstr "Fejl under ændring af adgangskode.\n" + +#: src/passwd.c:974 +#, c-format +msgid "Password expiry information changed.\n" +msgstr "Udløbsinformation for adgangskode er ændret.\n" + +#: src/passwd.c:976 +#, c-format +msgid "Password deleted.\n" +msgstr "Adgangskode slettet.\n" + +#: src/passwd.c:1038 +#, c-format +msgid "passwd: Cannot execute %s" +msgstr "Adgangsk.: Kan ikke udføre %s" + +#: src/pwck.c:51 +#, c-format +msgid "Usage: %s [-P path] [-q|-r|-s]\n" +msgstr "Anvend: %s [-P sti] [-q|-r|-s]\n" + +#: src/pwck.c:59 +#, c-format +msgid "" +"%s - check integrity of password files\n" +"\n" +msgstr "" +"%s - tjek integritet på adgangskodefiler\n" +"\n" + +#: src/pwck.c:66 +msgid " -s, --sort Sort the password file, no checks are done\n" +msgstr " -s, --sort Sorter adgangskodefilen, ingen tjek foretages\n" + +#: src/pwck.c:345 src/pwck.c:380 +#, c-format +msgid "Invalid password entry.\n" +msgstr "Ugyldig adgangskodepost.\n" + +#: src/pwck.c:364 +#, c-format +msgid "Invalid password entry with comment.\n" +msgstr "Ugyldig adgangskodepost med kommentar.\n" + +#: src/pwck.c:396 src/pwck.c:665 +#, c-format +msgid "Invalid account name `%s'.\n" +msgstr "Ugyldigt kontonavn »%s«.\n" + +#: src/pwck.c:412 +#, c-format +msgid "Duplicate password entry\n" +msgstr "Dupliker adgangskodepost\n" + +#: src/pwck.c:431 +#, c-format +msgid "User `%s': unknown group `%u'\n" +msgstr "Bruger »%s«: Ukendt gruppe »%u«\n" + +#: src/pwck.c:440 +#, c-format +msgid "User `%s': directory `%s' does not exist.\n" +msgstr "Bruger »%s«: Mappe »%s« eksisterer ikke.\n" + +#: src/pwck.c:449 +#, c-format +msgid "User `%s': shell `%s' is not executable.\n" +msgstr "Bruger »%s«: Skal »%s« er ikke kørbar.\n" + +#: src/pwck.c:506 +#, c-format +msgid "Checking `%s'.\n" +msgstr "Tjekker »%s«.\n" + +#: src/pwck.c:615 src/pwck.c:649 +#, c-format +msgid "Invalid shadow entry.\n" +msgstr "Ugyldig skyggepost.\n" + +#: src/pwck.c:634 +#, c-format +msgid "Invalid shadow entry with comment.\n" +msgstr "Ugyldig skyggepost med kommentar.\n" + +#: src/pwck.c:681 +#, c-format +msgid "Duplicate shadow entry\n" +msgstr "Dupliker skyggepost\n" + +#: src/pwck.c:699 +#, c-format +msgid "No matching password file entry.\n" +msgstr "Ingen matchende adgangskodefilpost.\n" + +#: src/pwck.c:714 +#, c-format +msgid "User `%s': last password change in the future.\n" +msgstr "Bruger »%s«: Sidste adgangskodeændring i fremtiden.\n" + +#: src/pwconv.c:51 +#, c-format +msgid "" +"%s - convert to shadow account\n" +"\n" +msgstr "" +"%s - konverter til skyggekonto\n" +"\n" + +#: src/pwconv.c:307 +#, c-format +msgid "Orphaned entry '%s' removed from shadow database.\n" +msgstr "Forældreløs post »%s« fjernet fra skyggedatabase.\n" + +#: src/pwconv.c:316 +#, c-format +msgid "Error while deleting `%s' shadow account.\n" +msgstr "Fejl under sletning af skyggekonto »%s«.\n" + +#: src/pwconv.c:343 +#, c-format +msgid "%s: Error trying to get data for `%s'\n" +msgstr "%s: Fejl under indhentning af data for »%s«\n" + +#: src/pwconv.c:365 src/pwconv.c:388 src/pwconv.c:419 src/pwconv.c:435 +#, c-format +msgid "Error while converting `%s' to shadow account.\n" +msgstr "Fejl under konvertering af »%s« til skyggekonto.\n" + +#: src/pwconv.c:466 +#, c-format +msgid "Error while renaming temporary shadow file: %m\n" +msgstr "Fejl under omdøbning af midlertidig skyggefil: %m\n" + +#: src/pwconv.c:491 +#, c-format +msgid "Error while renaming temporary password file: %m\n" +msgstr "Fejl under omdøbning af midlertidig adgangskodefil: %m\n" + +#: src/pwunconv.c:51 +#, c-format +msgid "" +"%s - convert from shadow account\n" +"\n" +msgstr "" +"%s - konverter fra skyggekonto\n" +"\n" + +#: src/pwunconv.c:166 +#, c-format +msgid "%s: No shadow file found.\n" +msgstr "%s: Ingen skyggefil fundet.\n" + +#: src/rpasswd.c:85 +#, c-format +msgid "Usage: %s [-4|-6][-a][-f config-file][-h hostname][-p port][-v][name]\n" +msgstr "" +"Anvend: %s [-4|-6][-a][-f konfigurationsfil][-h værtsnavn][-p port][-v]" +"[navn]\n" + +#: src/rpasswd.c:95 +msgid " -4 Use IPv4 only\n" +msgstr " -4 Anvend kun IPv4\n" + +#: src/rpasswd.c:96 +msgid " -6 Use IPv6 only\n" +msgstr " -6 Anvend kun IPv6\n" + +#: src/rpasswd.c:98 +msgid " -a Admin mode, special admin password is required\n" +msgstr " -a Admintilstand, speciel adgangskode for admin krævet\n" + +#: src/rpasswd.c:100 +msgid " -f config-file Specify a different config file\n" +msgstr " -f konfig.-fil Angiv en anden konfigurationsfil\n" + +#: src/rpasswd.c:101 +msgid " -h hostname Specify the remote server\n" +msgstr " -h værtsnavn Angiv fjernserveren\n" + +#: src/rpasswd.c:102 +msgid " -p port Specify port remote server is listening on\n" +msgstr " -p port Angiv den port som fjernserveren lytter på\n" + +#: src/rpasswd.c:104 +msgid " -r level Specify level of SSL certificate checks\n" +msgstr " -r niveau Angiv tjekniveau for SSL-certifikat\n" + +#: src/rpasswd.c:107 +msgid " --no-slp Don't use SLP to find a server\n" +msgstr " --no-slp Anvend ikke SLP for at finde en server\n" + +#: src/rpasswd.c:109 +msgid " -v, --verbose Be verbose, print SSL connection data\n" +msgstr " -v, --verbose Vær stille, vis data for SSL-forbindelse\n" + +#: src/rpasswd.c:150 +#, c-format +msgid "Warning: cannot turn echo off\n" +msgstr "Advarsel: Kan ikke slukke for ekko\n" + +#: src/rpasswd.c:515 +#, c-format +msgid "SLP: Found Server on %s, port %s" +msgstr "SLP: Fandt server på %s, port %s" + +#: src/rpasswd.c:518 +#, c-format +msgid "SLP: Found Server on %s" +msgstr "SLP: Fandt server på %s" + +#: src/rpasswd.c:554 +#, c-format +msgid "Go away, you do not exist!" +msgstr "Forsvind, du eksisterer ikke!" + +#: src/rpasswd.c:568 +#, c-format +msgid "No server specified\n" +msgstr "Ingen server angivet\n" + +#: src/rpasswd-client.c:57 src/rpasswd-client.c:60 +#, c-format +msgid "error while sending start request: %s\n" +msgstr "fejl under afsendelse af startforespørgsel: %s\n" + +#: src/rpasswd-client.c:70 src/rpasswd-client.c:73 +#, c-format +msgid "error while sending locale data: %s\n" +msgstr "fejl under afsendelse af lokale data: %s\n" + +#: src/rpasswd-client.c:81 src/rpasswd-client.c:84 +#, c-format +msgid "error while sending username: %s\n" +msgstr "fejl under afsendelse af brugernavn: %s\n" + +#: src/rpasswd-client.c:107 src/rpasswd-client.c:110 src/rpasswd-client.c:120 +#: src/rpasswd-client.c:123 +#, c-format +msgid "error while sending string: %s\n" +msgstr "fejl under afsendelse af streng: %s\n" + +#: src/rpasswd-client.c:318 +msgid "Searching a server...\n" +msgstr "Søger efter en server...\n" + +#: src/rpasswd-client.c:323 +#, c-format +msgid "Error opening SLP handle: %i.\n" +msgstr "Fejl under åbning af SLP-håndtering: %i.\n" + +#: src/rpasswd-client.c:334 +msgid "No service found with SLP.\n" +msgstr "Ingen tjeneste fundet med SLP.\n" + +#: src/rpasswd-client.c:353 +msgid "Error while searching for SLP description.\n" +msgstr "Fejl under søgning efter SLP-beskrivelse.\n" + +#: src/rpasswd-client.c:372 +#, c-format +msgid "" +"\n" +"Please select a server:\n" +msgstr "" +"\n" +"Vælg venligst en server:\n" + +#: src/rpasswd-client.c:378 +#, c-format +msgid " (port %s)" +msgstr " (port %s)" + +#: src/rpasswd-client.c:388 +#, c-format +msgid "Enter number of choice [1-%d]: " +msgstr "Indtast valgmulighed [1-%d]: " + +#: src/rpasswd-client.c:458 +msgid "parsing config file" +msgstr "fortolker konfigurationsfil" + +#: src/rpasswd-client.c:501 src/rpasswd-client.c:504 +msgid "Trying entry:" +msgstr "Forsøger post:" + +#: src/rpasswd-client.c:543 +#, c-format +msgid "Entry \"%s\" is not valid!\n" +msgstr "Post »%s« er ikke gyldig!\n" + +#: src/rpasswd-client.c:547 +#, c-format +msgid "Entry \"%s\" is not valid, ignored!\n" +msgstr "Post »%s« er ikke gyldig, ignoreret!\n" + +#: src/rpasswd-client.c:560 +msgid "Bad entries found.\n" +msgstr "Ugyldige poster fundet.\n" + +#: src/rpasswd-client.c:565 +msgid "No entry found.\n" +msgstr "Ingen post fundet.\n" + +#: src/rpasswd-client.c:575 +msgid "No entry found." +msgstr "Ingen post fundet." + +#: src/rpasswd-client.c:609 +msgid "Hostname or service not known for specified protocol\n" +msgstr "Værtsnavn eller tjeneste er ikke kendt for den angivne protokol\n" + +#: src/rpasswd-client.c:623 +#, c-format +msgid "bad port: %s\n" +msgstr "ugyldig port: %s\n" + +#: src/rpasswd-client.c:648 src/rpasswd-client.c:657 +#, c-format +msgid "Trying %s port %d...\n" +msgstr "Forsøger %s port %d...\n" + +#: src/rpasswd-client.c:663 +#, c-format +msgid "Trying %s...\n" +msgstr "Forsøger %s...\n" + +#: src/rpasswd-client.c:677 +#, c-format +msgid "connect to address %s: %s\n" +msgstr "forbind til adresse %s: %s\n" + +#: src/rpasswd-client.c:732 src/rpasswd-client.c:1028 +msgid "Server certificate info:\n" +msgstr "Servercertifikatinfo:\n" + +#: src/rpasswd-client.c:742 +#, c-format +msgid " Certificate is valid since: %s" +msgstr " Certifikat er gyldigt siden: %s" + +#: src/rpasswd-client.c:744 +#, c-format +msgid " Certificate expires: %s" +msgstr " Certifikat udløber: %s" + +#: src/rpasswd-client.c:750 +#, c-format +msgid " Certificate public key: %s" +msgstr " Offentlig nøgle for certifikat: %s" + +#: src/rpasswd-client.c:756 +#, c-format +msgid " Certificate version: #%d\n" +msgstr " Certifikatversion: #%d\n" + +#: src/rpasswd-client.c:761 src/rpasswd-client.c:1034 +#, c-format +msgid " DN: %s\n" +msgstr " DN: %s\n" + +#: src/rpasswd-client.c:765 src/rpasswd-client.c:1041 +#, c-format +msgid " Issuer's DN: %s\n" +msgstr " Udgivers DN: %s\n" + +#: src/rpasswd-client.c:846 +#, c-format +msgid "Handshake failed: %s\n" +msgstr "Forhandling mislykkedes: %s\n" + +#: src/rpasswd-client.c:869 +#, c-format +msgid "TLS certificate error: %s\n" +msgstr "TLS-certifikatfejl: %s\n" + +#: src/rpasswd-client.c:880 +#, c-format +msgid "" +"%s connection using %s-%s (%s)\n" +"\n" +msgstr "" +"%s forbindelse under anvendelse af %s-%s (%s)\n" +"\n" + +#: src/rpasswd-client.c:898 +msgid "TLS authentication error: server certificate issuer is unknown.\n" +msgstr "TLS-godkendelsesfejl: Udsteder af servercertifikat er ikke kendt.\n" + +#: src/rpasswd-client.c:906 +msgid "TLS authentication error: server certificate is NOT trusted.\n" +msgstr "TLS-godkendelsesfejl: Der kan IKKE stoles på servercertifikat.\n" + +#: src/rpasswd-client.c:917 +msgid "TLS authentication error: server certificate not yet activated.\n" +msgstr "TLS-godkendelsesfejl: Servercertifikat er endnu ikke aktiveret.\n" + +#: src/rpasswd-client.c:925 +msgid "TLS authentication error: server certificate expired.\n" +msgstr "TLS-godkendelsesfejl: Servercertifikat er udløbet.\n" + +#: src/rpasswd-client.c:960 +#, c-format +msgid "error loading default verify locations: %s\n" +msgstr "fejl under indlæsning af standardplaceringer til verificering: %s\n" + +#: src/rpasswd-client.c:968 +#, c-format +msgid "error setting default verify path: %s\n" +msgstr "fejl under indstilling af standardverificeringssti: %s\n" + +#: src/rpasswd-client.c:1003 +#, fuzzy +msgid "Unable to get certificate from peer.\n" +msgstr "Kunne ikke hente entropi fra %s\n" + +#: src/rpasswd-client.c:1017 +#, c-format +msgid "" +"SSL connection using %s\n" +"\n" +msgstr "" +"SSL-forbindelse under anvendelse af %s\n" +"\n" + +#: src/rpasswd-client.c:1022 +msgid "Server does not have a certificate?\n" +msgstr "Server har ikke et certifikat?\n" + +#: src/rpasswdd.c:102 +#, c-format +msgid "" +"Usage: %s [-4] [-6] [-d] [-c certificate] [-k privatekey] [-p port]\n" +" [--slp [--slp-timeout timeout] [--slp-descr description]]\n" +msgstr "" +"Anvend: %s [-4] [-6] [-d] [-c certifikat] [-k privat nøgle] [-p port]\n" +" [--slp [--slp-timeout tidsudløb] [--slp-descr beskrivelse]]\n" + +#: src/rpasswdd.c:105 +#, c-format +msgid "Usage: %s [-4] [-6] [-d] [-c certificate] [-k privatekey] [-p port]\n" +msgstr "" +"Anvend: %s [-4] [-6] [-d] [-c certifikat] [-k privat nøgle] [-p port]\n" + +#: src/rpasswdd.c:116 +msgid " -4 Use IPv4\n" +msgstr " -4 Anvend IPv4\n" + +#: src/rpasswdd.c:117 +msgid " -6 Use IPv6\n" +msgstr " -6 Anvend IPv6\n" + +#: src/rpasswdd.c:118 +msgid " -c certificate Specify alternate certificate file\n" +msgstr " -c certifikat Angiv alternativ certifikatfil\n" + +#: src/rpasswdd.c:119 +msgid " -k privatekey Specify alternate file with private key\n" +msgstr " -k privatnøgle Angiv alternativ fil med privat nøgle\n" + +#: src/rpasswdd.c:121 +msgid " -d Run in debug mode\n" +msgstr " -d Kør i fejlsøgningstilstand\n" + +#: src/rpasswdd.c:122 +msgid " -p port Port on which the server should listen\n" +msgstr " -p port Den port serveren skal lytte på\n" + +#: src/rpasswdd.c:125 +msgid " --slp Register at local SLP server\n" +msgstr " --slp Registrer på lokal SLP-server\n" + +#: src/rpasswdd.c:126 +msgid " --slp-timeout Set timeout for re-registration\n" +msgstr " --slp-timeout Lav tidsudløb for genregistrering\n" + +#: src/rpasswdd.c:127 +msgid " --slp-descr Set a description shown to SLP clients\n" +msgstr " --slp-descr Lav en beskrivelse som vist til SLP-klienter\n" + +#: src/rpasswdd.c:710 +#, c-format +msgid "Please authenticate as %s on %s" +msgstr "Godkend venligst som %s på %s" + +#: src/rpasswdd.c:749 +#, c-format +msgid "" +"\n" +"Now enter the new password for %s" +msgstr "" +"\n" +"Indtast nu den nye adgangskode for %s" + +#: src/rpasswdd.c:770 +#, c-format +msgid "setresuid failed on server: %s" +msgstr "setresuid lykkedes ikke på server: %s" + +#: src/rpasswdd.c:813 +msgid "Password not changed" +msgstr "Adgangskode ikke ændret" + +#: src/rpasswdd.c:816 +msgid "Password changed" +msgstr "Adgangskode ændret" + +#: src/rpasswdd.c:1349 +msgid "already running" +msgstr "kører allerede" + +#: src/useradd.c:54 src/usermod.c:55 +#, c-format +msgid "Usage: %s ...\n" +msgstr "Anvend: %s ...\n" + +#: src/useradd.c:61 +#, c-format +msgid "" +"%s - create a new user\n" +"\n" +msgstr "" +"%s - opret en ny bruger\n" +"\n" + +#: src/useradd.c:63 src/usermod.c:64 +msgid " -c comment Set the GECOS field for the new account\n" +msgstr " -c bemærkning Angiv GECOS-feltet for den nye konto\n" + +#: src/useradd.c:65 +msgid " --show-defaults Print default values\n" +msgstr " --show-defaults Vis standardværdier\n" + +#: src/useradd.c:66 +msgid " --save-defaults Save modified default values\n" +msgstr " --save-defaults Gem ændrede standardværdier\n" + +#: src/useradd.c:68 src/usermod.c:69 +msgid " -d homedir Home directory for the new user\n" +msgstr " -d homedir Hjemmmappe for den nye bruger\n" + +#: src/useradd.c:69 src/usermod.c:70 +msgid " -e expire Date on which the new account will be disabled\n" +msgstr " -e udløb Datoen hvor den nye konto vil blive slået fra\n" + +#: src/useradd.c:71 src/usermod.c:72 +msgid "" +" -f inactive Days after a password expires until account is disabled\n" +msgstr "" +" -f inaktiv Antal dage efter en adgangskode udløber hvorefter kontoen " +"slås fra\n" + +#: src/useradd.c:73 src/usermod.c:74 +msgid " -G group,... List of supplementary groups\n" +msgstr " -G group,... Liste over supplerende grupper\n" + +#: src/useradd.c:74 src/usermod.c:75 +msgid " -g gid Name/number of the users primary group\n" +msgstr " -g gid Navn/nummer på brugernes primære gruppe\n" + +#: src/useradd.c:78 +msgid " -m Create home directory for the new user\n" +msgstr " -m Oprette hjemmmappe for den nye bruger\n" + +#: src/useradd.c:85 +msgid " -u uid Force the new userid to be the given number\n" +msgstr "" +" -u uid Tving det nye bruger-id til at være det angivne nummer\n" + +#: src/useradd.c:87 +msgid " -U umask Umask value used for creating home directory\n" +msgstr " -U umask Umask-værdi brugt til oprettelse af hjemmemappe\n" + +#: src/useradd.c:90 src/usermod.c:88 +msgid " -s shell Name of the user's login shell\n" +msgstr " -s shell Navn på brugerens logindskal\n" + +#: src/useradd.c:186 +#, c-format +msgid "%s: Invalid numeric argument `%s' for group ID.\n" +msgstr "%s: Ugyldigt numerisk argument »%s« for gruppe-id.\n" + +#: src/useradd.c:196 src/usermod.c:160 +#, c-format +msgid "%s: Group `%u' not found in service `%s'.\n" +msgstr "%s: Gruppe »%u« ikke fundet i tjeneste »%s«.\n" + +#: src/useradd.c:202 src/usermod.c:166 +#, c-format +msgid "%s: Unknown group `%u'.\n" +msgstr "%s: Ukendt gruppe »%u«.\n" + +#: src/useradd.c:301 +#, c-format +msgid "%s: Unknown group `%s' in %s.\n" +msgstr "%s: Ukendt gruppe »%s« i %s.\n" + +#: src/useradd.c:316 +#, c-format +msgid "%s: Invalid home directory `%s' in %s.\n" +msgstr "%s: Ugyldig hjemmemappe »%s« i %s.\n" + +#: src/useradd.c:335 +#, c-format +msgid "%s: Invalid numeric argument `%s' for `INACTIVE' in %s.\n" +msgstr "%s: Ugyldigt numerisk argument »%s« for »INAKTIV« i %s.\n" + +#: src/useradd.c:358 +#, c-format +msgid "%s: Expiredate `%s' is no date and no integer value >= -1 in %s.\n" +msgstr "" +"%s: Udløbsdato »%s« er ikke en dato og har ikke værdi som et heltal >= -1 i %" +"s.\n" + +#: src/useradd.c:374 +#, c-format +msgid "%s: Invalid shell `%s' in %s.\n" +msgstr "%s: Ugyldig skal »%s« i %s.\n" + +#: src/useradd.c:388 +#, c-format +msgid "%s: Skel directory \"%s\" in %s does not exist.\n" +msgstr "%s: Skelmappe »%s« i %s eksisterer ikke.\n" + +#: src/useradd.c:449 +#, c-format +msgid "%s: Invalid value `%s' for option CREATE_MAIL_SPOOL in %s.\n" +msgstr "%s: Ugyldig værdi »%s« for tilvalg OPRET_E-POST_SPOOL i %s.\n" + +#: src/useradd.c:465 +#, c-format +msgid "%s: Invalid numeric argument `%s' for `UMASK' in %s.\n" +msgstr "%s: Ugyldigt numerisk argument »%s« for »UMASK« i %s.\n" + +#: src/useradd.c:913 +#, c-format +msgid "%s: Can't get unique uid in range %u - %u.\n" +msgstr "%s: Kan ikke indhente unik uid i interval %u - %u.\n" + +#: src/useradd.c:987 +#, c-format +msgid "%s: Can't stat `%s': %m\n" +msgstr "%s: Kan ikke stat »%s«: %m\n" + +#: src/useradd.c:1018 +#, c-format +msgid "" +"%s: No group named \"mail\" exists, creating mail spool with mode 0600.\n" +msgstr "" +"%s: Ingen gruppe navngivet »e-post« eksisterer, opretter e-post-spool med " +"tilstand 0600.\n" + +#: src/useradd.c:1026 +#, c-format +msgid "%s: Can't create mail spool for user %s.\n" +msgstr "%s: Kan ikke oprette e-post-spool for bruger %s.\n" + +#: src/useradd.c:1095 src/usermod.c:520 +#, c-format +msgid "%s: Cannot create directory `%s'.\n" +msgstr "%s: Kan ikke oprette mappe »%s«.\n" + +#: src/useradd.c:1100 src/usermod.c:525 src/usermod.c:549 +#, c-format +msgid "%s: Warning: chown on `%s' failed: %m\n" +msgstr "%s: Advarsel: chown på »%s« mislykkedes: %m\n" + +#: src/useradd.c:1103 src/usermod.c:528 +#, c-format +msgid "%s: Warning: chmod on `%s' failed: %m\n" +msgstr "%s: Advarsel: chmod på »%s« mislykkedes: %m\n" + +#: src/useradd.c:1126 +#, c-format +msgid "%s: Copying of skel directory failed.\n" +msgstr "%s: Kunne ikke kopiere skelmappe.\n" + +#: src/useradd.c:1136 +#, c-format +msgid "%s: Warning: home directory already exists, not modifying it.\n" +msgstr "%s: Advarsel: Hjemmemappe eksisterer allerede, ændrer den ikke.\n" + +#: src/useradd.c:1197 +#, c-format +msgid "%s: Reading of `%s' was not successful.\n" +msgstr "%s: Læsning af »%s« lykkedes ikke.\n" + +#: src/useradd.c:1226 src/usermod.c:798 +#, c-format +msgid "%s: Invalid comment `%s'.\n" +msgstr "%s: Ugyldig bemærkning »%s«\n" + +#: src/useradd.c:1243 src/usermod.c:812 +#, c-format +msgid "%s: Invalid home directory `%s'.\n" +msgstr "%s: Ugyldig hjemmemappe »%s«.\n" + +#: src/useradd.c:1264 src/usermod.c:836 +#, c-format +msgid "%s: Expiredate `%s' is no date and no integer value >= -1.\n" +msgstr "%s: Udløbsdato »%s« er ingen dato og er ikke et heltal >= -1.\n" + +#: src/useradd.c:1280 +#, c-format +msgid "%s: Invalid numeric argument `%s' for `-f'.\n" +msgstr "%s: Ugyldigt numerisk argument »%s« for »-f«.\n" + +#: src/useradd.c:1299 +#, c-format +msgid "%s: Skel directory `%s' does not exist.\n" +msgstr "%s: Skelmappe »%s« eksisterer ikke.\n" + +#: src/useradd.c:1341 src/usermod.c:935 +#, c-format +msgid "%s: Invalid shell `%s'.\n" +msgstr "%s: Ugyldig skal »%s«.\n" + +#: src/useradd.c:1350 src/useradd.c:1374 +#, c-format +msgid "%s: Invalid numeric argument `%s' for User ID.\n" +msgstr "%s: Ugyldigt numerisk argument »%s« for bruger-id.\n" + +#: src/useradd.c:1364 +#, c-format +msgid "%s: Invalid numeric argument `%s' for `-U'.\n" +msgstr "%s: Ugyldigt numerisk argument »%s« for »-U«.\n" + +#: src/useradd.c:1425 +#, c-format +msgid "%s: You cannot use --uid and --preferred-uid at the same time.\n" +msgstr "%s: Du kan ikke samtidigt anvende --uid og --preferred-uid.\n" + +#: src/useradd.c:1576 +#, c-format +msgid "%s: Writing of `%s' was not successful.\n" +msgstr "%s: Skrivning af »%s« lykkedes ikke.\n" + +#: src/useradd.c:1604 src/usermod.c:1335 +#, c-format +msgid "%s: UID %u is not unique.\n" +msgstr "%s: UID %u er ikke unik.\n" + +#: src/useradd.c:1616 src/usermod.c:1349 +#, c-format +msgid "%s: Invalid account name `%s'.\n" +msgstr "%s: Ugyldigt kontonavn »%s«.\n" + +#: src/useradd.c:1637 src/usermod.c:1360 +#, c-format +msgid "%s: Account `%s' already exists.\n" +msgstr "%s: Konto »%s« eksisterer allerede.\n" + +#: src/useradd.c:1721 +#, c-format +msgid "%s: Error: Cannot clear old faillog entry: %s\n" +msgstr "%s: Fejl: Kan ikke rydde gammel fejlloglinje: %s\n" + +#: src/useradd.c:1734 +#, c-format +msgid "%s: Error: Cannot clear old lastlog entry: %s\n" +msgstr "%s: Fejl: Kan ikke rydde gammel sidsteloglinje: %s\n" + +#: src/useradd.c:1748 +#, c-format +msgid "%s: Cannot add user to LDAP database without DN.\n" +msgstr "%s: Kan ikke tilføje bruger til LDAP-database uden DN.\n" + +#: src/useradd.c:1765 +#, c-format +msgid "%s: User not added to LDAP database.\n" +msgstr "%s: Bruger ikke tilføjet til LDAP-database.\n" + +#: src/useradd.c:1793 src/usermod.c:397 src/usermod.c:635 src/usermod.c:1563 +#, c-format +msgid "%s: ERROR: Cannot find group `%s' anymore!\n" +msgstr "%s: FEJL: Kan ikke længere finde gruppe »%s«!\n" + +#: src/useradd.c:1797 src/usermod.c:1567 src/usermod.c:1667 +#, c-format +msgid "%s: Cannot find group `%s' in service `%s', ignored.\n" +msgstr "%s: Kan ikke finde gruppe »%s« i tjeneste »%s«, ignoreret.\n" + +#: src/useradd.c:1813 src/usermod.c:1583 +#, c-format +msgid "%s: Cannot add user to groups stored in LDAP database without DN.\n" +msgstr "" +"%s: Kan ikke tilføje bruger til grupper gemt i LDAP-database uden DN.\n" + +#: src/useradd.c:1821 src/useradd.c:1839 src/useradd.c:1856 src/usermod.c:1591 +#: src/usermod.c:1610 src/usermod.c:1628 +#, c-format +msgid "%s: User not added to LDAP group `%s'.\n" +msgstr "%s: Bruger ikke tilføjet til LDAP-gruppe »%s«.\n" + +#: src/useradd.c:1908 +#, c-format +msgid "%s: USERADD_CMD fails with exit code %d.\n" +msgstr "%s: USERADD_CMD fejler med udgangskode %d.\n" + +#: src/userdel.c:54 +#, c-format +msgid "Usage: %s [-D binddn] [-P path] [-r [-f]] user\n" +msgstr "Anvend: %s [-D binddn] [-P sti] [-r [-f]] bruger\n" + +#: src/userdel.c:61 +#, c-format +msgid "" +"%s - delete a user and related files\n" +"\n" +msgstr "" +"%s - slet en bruger og relaterede filer\n" +"\n" + +#: src/userdel.c:63 +msgid " -r Remove home directory and mail spool\n" +msgstr " -r Fjern hjemmemappe og e-post-spool\n" + +#: src/userdel.c:65 +msgid " -f Force removal of files, even if not owned by user\n" +msgstr "" +" -f Fremtving fjernelse af filer, selvom de ikke er ejet af " +"bruger\n" + +#: src/userdel.c:175 src/userdel.c:194 +#, c-format +msgid "%s: directory `%s' is in use by `%s'.\n" +msgstr "%s: Mappe »%s« er i brug af »%s«.\n" + +#: src/userdel.c:262 src/usermod.c:1663 +#, c-format +msgid "%s: ERROR: cannot find group `%s' anymore!\n" +msgstr "%s: FEJL: Kan ikke længere finde gruppe »%s«!\n" + +#: src/userdel.c:279 src/usermod.c:652 src/usermod.c:1683 +#, c-format +msgid "" +"%s: Cannot remove user from groups stored in LDAP database without DN.\n" +msgstr "%s: Kan ikke fjerne bruger fra grupper gemt i LDAP-database uden DN.\n" + +#: src/userdel.c:287 src/userdel.c:306 src/usermod.c:664 src/usermod.c:687 +#: src/usermod.c:1691 src/usermod.c:1710 src/usermod.c:1728 +#, c-format +msgid "%s: User not removed from LDAP group `%s'.\n" +msgstr "%s: Bruger ikke fjernet fra LDAP-gruppe »%s«.\n" + +#: src/userdel.c:327 src/usermod.c:709 +#, c-format +msgid "%s: User not removed from group `%s'.\n" +msgstr "%s: Bruger ikke fjernet fra gruppe »%s«.\n" + +#: src/userdel.c:537 +#, c-format +msgid "%s: account `%s' is currently in use.\n" +msgstr "%s: Konto »%s« er i brug.\n" + +#: src/userdel.c:559 +#, c-format +msgid "%s: USERDEL_PRECMD fails with exit code %d.\n" +msgstr "%s: USERDEL_PRECMD fejler med udgangskode %d.\n" + +#: src/userdel.c:587 src/userdel.c:605 +#, c-format +msgid "%s: `%s' is not owned by `%s', not removed.\n" +msgstr "%s: »%s« er ikke ejet af »%s«, ikke fjernet.\n" + +#: src/userdel.c:593 src/userdel.c:615 +#, c-format +msgid "%s: warning: can't remove `%s': %s" +msgstr "%s: Advarsel: Kan ikke fjerne »%s«: %s" + +#: src/userdel.c:625 +#, c-format +msgid "%s: directory `%s' not removed.\n" +msgstr "%s: Mappe »%s« er ikke fjernet.\n" + +#: src/userdel.c:637 +#, c-format +msgid "%s: error deleting user `%s'.\n" +msgstr "%s: Fejl ved sletning af bruger »%s«.\n" + +#: src/userdel.c:659 +#, c-format +msgid "%s: USERDEL_POSTCMD fails with exit code %d.\n" +msgstr "%s: USERDEL_POSTCMD fejler med udgangskode %d.\n" + +#: src/usermod.c:62 +#, c-format +msgid "" +"%s - modify a user account\n" +"\n" +msgstr "" +"%s - ændre en brugerkonto\n" +"\n" + +#: src/usermod.c:77 +msgid " -l login Change login name.\n" +msgstr " -l logind Ændre logindnavn.\n" + +#: src/usermod.c:78 +msgid " -m Move home directory to the new path\n" +msgstr " -m Flyt hjemmemappe til den nye sti\n" + +#: src/usermod.c:80 +msgid " -A group,... List of groups the user should be added to\n" +msgstr " -A gruppe,... Liste over grupper som brugeren bør tilføjes til\n" + +#: src/usermod.c:82 +msgid " -R group,... List of groups the user should be removed from\n" +msgstr " -R gruppe,... Liste over grupper som brugeren bør fjernes fra\n" + +#: src/usermod.c:89 +msgid " -u uid Change the userid to the given number\n" +msgstr " -u uid Ændre brugerid'et til det angivne nummer\n" + +#: src/usermod.c:92 +msgid " -L Locks the password entry for \"user\"\n" +msgstr " -L Låser adgangskodepost for »bruger«\n" + +#: src/usermod.c:94 +msgid " -U Try to unlock the password entry for \"user\"\n" +msgstr " -U Forsøg at låse adgangskodepost op for »bruger«\n" + +#: src/usermod.c:149 src/usermod.c:853 src/usermod.c:948 +#, c-format +msgid "%s: Invalid numeric argument `%s'.\n" +msgstr "%s: Ugyldigt numerisk argument »%s«.\n" + +#: src/usermod.c:416 +#, c-format +msgid "%s: User not renamed in LDAP group `%s'.\n" +msgstr "%s: Bruger ikke omdøbt i LDAP-gruppe »%s«.\n" + +#: src/usermod.c:433 +#, c-format +msgid "%s: User not renamed from LDAP group `%s'.\n" +msgstr "%s: Bruger ikke omdøbt fra LDAP-gruppe »%s«.\n" + +#: src/usermod.c:455 +#, c-format +msgid "%s: User not renamed in group `%s'.\n" +msgstr "%s: Bruger ikke omdøbt i gruppe »%s«.\n" + +#: src/usermod.c:558 +#, c-format +msgid "%s: Cannot copy directory %s to %s.\n" +msgstr "%s: Kan ikke kopiere mappe %s til %s.\n" + +#: src/usermod.c:565 +#, c-format +msgid "%s: Cannot rename directory %s to %s.\n" +msgstr "%s: Kan ikke omdøbe mappe %s til %s.\n" + +#: src/usermod.c:1067 +#, c-format +msgid "%s: Account `%s' does not exist.\n" +msgstr "%s: Konto »%s« eksisterer ikke.\n" + +#: src/usermod.c:1175 src/usermod.c:1240 +#, c-format +msgid "%s: `%s' is primary group name.\n" +msgstr "%s: »%s« er det primære gruppenavn.\n" + +#: src/usermod.c:1323 +#, c-format +msgid "%s: Account `%s' is currently in use.\n" +msgstr "%s: Konto »%s« er i brug.\n" + +#: src/usermod.c:1418 +#, c-format +msgid "%s: Shadow passwords required for -e and -f.\n" +msgstr "%s: Skyggeadgangskoder kræves for -e og -f.\n" + +#: src/usermod.c:1443 +#, c-format +msgid "%s: Cannot modify user in LDAP database without DN.\n" +msgstr "%s: Kan ikke ændre bruger i LDAP-database uden DN.\n" + +#: src/usermod.c:1461 +#, c-format +msgid "%s: User not modified in LDAP database.\n" +msgstr "%s: Bruger ikke ændret i LDAP-database.\n" + +#: src/usermod.c:1780 src/usermod.c:1791 src/usermod.c:1817 +#, c-format +msgid "%s: Error: Cannot copy faillog entry: %s\n" +msgstr "%s: Fejl: Kan ikke kopiere linje i fejllog: %s\n" + +#: src/usermod.c:1806 +#, c-format +msgid "%s: Error: Cannot copy lastlog entry: %s\n" +msgstr "%s: Fejl: Kan ikke kopiere linje i sidstelog: %s\n" + +#: src/vipw.c:58 +#, c-format +msgid "Usage: %s [-g|-p|-s]\n" +msgstr "Anvend: %s [-g|-p|-s]\n" + +#: src/vipw.c:66 +#, c-format +msgid "" +"%s - edit the password, group or shadow file\n" +"\n" +msgstr "" +"%s - rediger adgangskoden, gruppe eller skyggefil\n" +"\n" + +#: src/vipw.c:69 +msgid " -g, --group Edit the /etc/group file\n" +msgstr " -g, --group Rediger filen for /etc/group\n" + +#: src/vipw.c:70 +msgid " -p, --passwd Edit the /etc/passwd file\n" +msgstr " -p, --passwd Rediger filen for /etc/passwd\n" + +#: src/vipw.c:71 +msgid " -s, --shadow Edit the /etc/shadow file\n" +msgstr " -s, --shadow Rediger filen for /etc/shadow\n" + +#: src/vipw.c:164 +#, c-format +msgid "Cannot lock `%s': already locked.\n" +msgstr "Kan ikke låse »%s«: Allerede låst.\n" + +#: src/vipw.c:278 +#, c-format +msgid "%s: no changes made\n" +msgstr "%s: Ingen ændringer foretaget\n" + +#: src/vipw.c:318 +#, c-format +msgid "Warning: cannot create backup file: %m\n" +msgstr "Advarsel: Kan ikke oprette sikkerhedsfil: %m\n" + +#~ msgid "cannot open socket: %s" +#~ msgstr "kan ikke åbne sokkel: %s" + +#~ msgid "cannot enable socket to accept connections: %s" +#~ msgstr "kan ikke få sokkel til at acceptere forbindelser: %s" + +#~ msgid "handle_request: request received (Version = %d)" +#~ msgstr "handle_request: Forespørgsel modtaget (version = %d)" + +#~ msgid "cannot handle request version %d; current version is %d" +#~ msgstr "kan ikke håndtere forespørgsel version %d; nuværende version er %d" + +#~ msgid "User %s: %s" +#~ msgstr "Bruger %s: %s" + +#~ msgid "handle_request: exit (%d)" +#~ msgstr "handle_request: Afslut (%d)" + +#~ msgid "while accepting connection: %s" +#~ msgstr "under godkendelse af forbindelse: %s" + +#~ msgid "Handshake has failed (%s)" +#~ msgstr "Forhandling er mislykkedes (%s)" + +#~ msgid "client has closed the GNUTLS connection" +#~ msgstr "klient har lukket GNUTLS-forbindelsen" + +#~ msgid "cannot enable SSL encryption" +#~ msgstr "kan ikke slå SSL-kryptering til" + +#~ msgid "locale length in request too long: %d" +#~ msgstr "lokal længde i forespørgsel er for lang: %d" + +#~ msgid "error while reading request locale: %s" +#~ msgstr "fejl under læsning af forespørgsel om lokalitet: %s" + +#~ msgid "data length in request too long: %d" +#~ msgstr "datalængde i forespørgsel er for lang: %d" + +#~ msgid "error while reading request username: %s" +#~ msgstr "fejl under læsning af forespørgelsesbrugernavn: %s" + +#~ msgid "No username supplied" +#~ msgstr "Intet brugernavn angivet" diff --git a/po/de.gmo b/po/de.gmo new file mode 100644 index 0000000000000000000000000000000000000000..4036928e346ce7dedfa00abd2a4c8c06772cb261 GIT binary patch literal 21098 zcmb`O3zTJ7S?5mz22&6*!6b$d*lB3HoAm8hnwV4)lIrg2PMPlNqN+NPG;MP0-gB!i zb?e;fbMC21^)$W)`7$#q)20TfyH4cY=TGpRXlx8_#!wdLR4ecY=5E z{4{tQ_>bT%;Qp6H(H3wKycv8exCi{S$FG7a=T+b3%6%QUkLNY;<>0S_*MXn$>Hibl z#q$+cN6{VN9iZB?1|9$(2UYL?@Ob?-F8?&B@>(8$5>)?w72FQ~d+H8>ASuI~hu{t=I#1Nn=-%$Lf4-gmq7Eufz71}QRn5ES2v$G3v~MIZL~DUZ*B z;`<7S2&2pC{7vA?K*{MI@TFi5eh>I|5RpW`4XVD+f(%vkW$=3NpTSpv*O7@LquW3O zPJ@zL21*X^2i4Bs^Uu$MD(_!Fm45?;3HO1@cf?~GMAXrH!B>J$fRf{X09Ef-!B>GV zL3m2P6_gy`z?bxJ4OIGDK&5{K)OdUWRKLFks(srLy2_gbRel1J6uli(`V$_%;PIQF z%6kQ!Q27TzUPTKaU5Xw7KMp<)@)tco;Tq>PQ2jdx?gu{$N*^yVPJa7Ajn6Sq@{d8) z|0pQ=d=y0F(KDd(|2Oa!@ERJeb{qpKGD<<0fV;s3 zQ1!hJ6#pmv^Iw4CyOcsDm;ImtUk6?erl86@3##4k2S>n9gObPRK!z&%YfvWR`7~DJ zdKIYtYzL)32SDk`Nf6d31!-#Z9#Hf0 z$}YSIR6m~qUkiR6)I7X}Mt>Vv2Q@F=2rB=ZKuk#VHc> zK)Mi}2i1M3u>)#+J_gdH=$}B=F zsH0a?snYKQQGw_YP<$T&ZwLP)sQRv?vBC*Z^Z7?Wjl<7@DsLUsxPJxII9&lVU5|Ey zlJi5LbMH4a|}H9xK) zk*N^v2VVld0aQ85p!)T8P~-g+D84@fH7=JRY{}tfQ2Jc+&u;$IbS;F>bV^}%=^i>4|h2U{e<(&jI-fsr41fK-AfPV<8-oF8_0$<4FlDu9H8t@MA<=`psW#Cy* z`tumL75ogS@&5{_`nKNV?D$@f6Cf%SRl(qs`J`GA={>I}gF(T^MDNz0V zAb2(SC*XI1Ujo(suYuC{7kr;<_w}ICcX>Prs@>o3pI5;Vo*xBY1ilxf%IF-p9sGN6 z2Y3xiD0$osz6zWJ)z2RXUkyG1s{UueYr($-CD%)jI=$Ej-pz9iYP>!Ss=t2$N`7DS z=~o?d@|po(%=-sHx)im+9Q*|MCUEzpTUVa|)y_|XlG|T_8mDWHyYb!+Y95^grC*PN z8mHd`HP8MMl$@`g!UqD6gI9n*3o<36Ujvy+(O-kxz-_N{`f=Q23aZ?9gDUS6ASxIA z9caLP)3gPg0WSgH0Q~{fgjC)SK~-oL(!BZ@)PNSDOChpZy#?$z{xSFqkj6rvEzob+ zU)VPAJN$38VGa5$^g`%;(7PagB!7+BZm14@9(oee=iQLxaXs`&NS`-DbU%8#9{Bug zNHX~;=y#wOLE&?TABUiKKzD|h-~ng_dIY)(3Ln(V+BZG_I5Y-*LJxe-LJVg#1682C z(1)N8Ko3CrFg>F-^z(Y~AK9Pt;Q{lB5ub>};o`PNq-2`0;=_8%h=VzfGvA^8c?*qRI z{U-G7&`(1D2Ks5pK$h^+66rZ{Q#uTerN*v z6to8_e_|f8(u;lkUhvPqTY9gb|E~0Wgx_z2j_Tdzhx1m;OjeiTQL{B0i7vmVy%d|N zg?18N9Pcc|sZX44x0lRhzBE_7xxbw*mf4N_Y|TuiW%4XeM2l>+bv_oG<*J%&p`CUpNpF|pOep43aRu{Wk(CN9SZUT`lcg)hoXBF6 z(ADsA8*jI{(u!(}(l)7jB~G(uI}xifQ)x5lnB}xRpH`QQPqKv`GIPzOUiW;eoZnmA zyDg^Ew#h;yY>plpn=9qt94UN>WHRVZ?Bq0 zvlW{rC5wBD&Djc>EFML`rrK(?S7T+0TdmAAQbuxj+^Ow$FKo8cJCW<@ycu_t?@&A0 z)-iLj`ZU+hoY;r4EL#bzR@0=J%x61IJ87+%I8ECr3dK-mu2S0;V|C568@AI@kZqZ1 zwdZNSZOD)e65KYMxXn~Elf3&A`c%h^)e(BF*3KDhhHRJ` zjjPLMbwT5?nl?K~!#uP#+s5Qs8i_O|Ol_f>pvdJ8_ohf9ws1Sb&7{#zm#Q6jMs!D(>LRmQ#gV=} z#7Owswr#C#E1K-)g-Euq2egoo};EX`tzKjr4}B)pR~zLM6;nGs~#n*E*4`R9nru znYXoTo|Hu&QWvz$EW2e!jd0@`Qk84eX6t>QYW+$4`ZJhqRg2L;p;KeW%;9RYm8bDe zQ=MZup|Ng3lMYR3tmpvtydEdbxbCVPcpb!mdXb$6GEq^f8RED@QG|)1%reJgtT3iWo}F~ss>mE&qJ$BDtl%3xAXz0lrLa(~HL z2Yb=;vMU~g4T#g-uJbC?^DzdLSmIkQW`?VLkgvVGHYB&}>|C|Bi21SJ$zV$yPvP%u zSW33Ggw8Aurd!#~X)xQl6^;A?+b7LP-;tqA8q|Iss+q$i+jfpf8$$tDlwu$y8Z8ag z4$I(N&VVv1eq||!b%3cyc5dj!(`vIW`!PU)MzQ@G+%=mJOT~Q?EMu_jR-7C2F172; z#@g;GzKT@J74KK=Zi!Z*a6#Z zTOAr*%kgX1f^+0&hDr*o{Ve5)8~8Ag%%Y77mA-g;Aw3A0E=&L>j+4R&+Ev7iPtJ}{+d&qGmsqG{qfBYs$y28q zrCbcT^A-`L-I-vUgAK^?xoi!kT|!9ZO^ofjR5J9rD8y}YigeW@gTr>AdI6rBhBCF< z@*u;wGqcOhSgx|&Cbew`RHnO}n#QQ?#+i#`y0_d;tBh3WjW?!RkB1i6%~9HEJ40XQ z&(@Nf>PK(u&8%3e`br(#5SGgbsYA-J?vUMwVFeQEkSC$-Kfj4Q#M)O`y)m!7(^U43 zM2Be%@5*~Eufs@gNMcFJ#Sr2_(UD^N(C4jbc8>UDWp-PI?XFFl*ey0d^&QSSbmK|U zM4~mp^`fWcBP6*^L-4iA+lG*)j(0h`Yug&F4m|Gdu-wIFc778q zGZN#s$~icSt7gLNHV56Fe*5eBRE{0196Geaa@4Er$S-clj@kgoj6yTfvFgLkrF^Md z{@8pR9cw0oFDG%lJBp>b9nruxQqhv8mHGDg;aa@hK|OYiM3bx>gykmN#%)aO4q3B` zH(9>SByqc57PIOKy{^u+ut~X{f|$@j#yKKOjb^sMvS6KIZ5u;|V~1XIaT#_IozpBL z!$@>o5u|Ejs&!^I(W|sdP)x!MQ7q<()9JyLpXzLO_KH^7N?EeyxQ2g3$!#naMwWmX z-1;3A!`a<`6t5-{_UQ<^%M{+QODVYgBpY}^g9;u$H_ER{)33|t94vW(A?v7#O3~M7 zX8dR~$scx}K%yb4?=;Q%q>Z=G9 z)Sbp^(8lE!3>PjU)TD_K7Gib8K9>Z?JL_i!^HFcdE+Dl~WqK%*Ya^v$j$2;0;t@;n ztU>iXuP;jTVwN=no9AQB+q68pM;me6X4mH>3BF`D$acaGi5ULrp4S7<^oytSTa8~eUQaVzU=P?7@X&T17u&8}UlBczy< zl@O^u#qW7DPxR(wrF}|IslHqwTECWy%1^o7#RlaRc}`ZAh#n-^!tB(^$}x7i5BuMB z)547M!21bA=cX7B<1U;T%ii;Nzfok_X7UFL<(4;WWX-nJC_1EHgv;2rJ!k_#r$)R_ zce1iz6m;^hVPjl0^OfVYzH)u7@Fl6A>g`yg|M_fX{%j>XTUk_Q@_2RWW9yY=A|LNT zElxv)m!7S(&Z-r55mWulP!x@jK?s((Vmk zdUbgu+JphiyVLN+7I7nXS(k34oSn_)rCat?;m(3@SS9znql8gY^YMtyA`0CTsOa^C z0?6VHAatzc0MlgKeS)f;@34#;=t{@g-KRCAQ4znta0^4(;fb zoW`f~nC76;)eA9cvPS80ZI>kP4tvzXG*5KA;!O5kBbH-r*)hl$?BOWIlk5go#dVoW zMTO{{HQB5N{TWxQ&CW9BVEfkk4!e^IF3@V)rZMUdovXzxj`e6NZNHK2P-UWCxzC-D zjhf}vdfsVr;Iwbo&AV>fKQbMws>-npBU3q$&u5j{_NZZ}oG;$pS+KaP9*;~NpRF9! zsI!Bs9KsNcntglr?yc;3O=a&Mv-g(K{kPn-XWyPZFjl7Hm8Jr21>c_ADq_9G?7eyP z=38&tvv(9m`D~S0_Rm>M&ctZnM%~=e--g$cC7I7LpOx9Tx-^Q6lX&FV#If;i@AmH6 zGjdP|1qo%ZEz?S!8SGweu@$^s3s%Z*>&_Fihby;s`P7C+oL0u!Ke}Mvt(CcEaRh42 zeQjc@Y3Webn=l^);M(LDx=eHb#Z99Tb}wsnF#klCfo z;=4CO?9yk_%GWXn;w0~!+2A~Pj-3yidUH>+)nL8N@sVBTo>RFw6D$0?n5Sm~>lqx~ zvAmJyjgV{LV0UQQU7KSMc75a6dL-shGftRlTS#z+q1}T)wdqLnBAZd15Qbb{r=8@f zDq}qCp)Uu@MeD;#>bf7=RUG)}DJquObI&O=)gWr_KQnnvoBpOh zfUC0#6lcDg5>3-wGBoN;+^j8NEX)?=9(DkXgk=p8P9439(^fT~)06e1Y}+qz6nw88 zxEX@Vc~&_Vx9T}tOpI!t&Bt@T@x3R*E{6~%L zXL2^-Rz7AfW`t*I3u)X$%69PF!0V_&>xd3yI8|OhmoTusG73p=c1d2Y&Z;Cyott;q_b;62h#7P22)(6MvK$TGn^*Nh3xC^FcV$cb&L z1E`rD?V_A=GkWr_Kb0!Z20vSwX52lAu2<8Boir}eQRy*;ZsH-cgelYUa!b&|;xHM@ z;nKL`62sG+*Q(7_cRn{eV@+L3IFpC$MQ&TQ%Pq0FU5e$`cm;M}n?Hl@m_>Cu%*o6= zpxGRUHrNQi*1Z~VtX*0`yo6R-ziq3GiBb1g|rxwiVH%xVjFlX z7!1~-&=M_koLX0W`wZHE+hN7%8}B>DDzyIdK4n!A2rjKGRn;eg-L01AIv~|{daDk0 z1*~9s$0~xK1l7F3p$kFHqA6H-b0j5F5j#mJLun@UN(TXUe4Rb{@-4Qai^=EeN-AUF zz`Mcp427OZ=GV`+&=a)LGy0WV?eH~snF#EQAIQxr zhw1Ys$Sm$AtTb^l1`ayQ+Vdx${`X5}Jv z$#wlXWb{>r>iV?F6{}I?h@!Kwevadop4k=mS%#7#IJFxs_nBFWjO{`Du_6fW8doG4REQ&7t4I8x6zAQ zr<{Nn+sh1khxwo4>bRo4DYyR2I1Xzr?@_+!jBHc7fG3jKe0C6BM-H)e;6QY}Tg{D9 zJ-SH8`1Dq!dFjsbnfcWjFqn^tgxvs zm5rse?m}5t=yNwqzlQW?IN-8dpM|!>4=)lLV(*`r2lDx}+0ZV|d0$>)c2C|MW!B=u zb~3I{5Q9%snUX?s!L@R{URIV(UDM2#FE%W<6^xBpgzCmQS4!8<;bwc)-fcZ3D^o4=_C;4EY~h6&V#qGc&H7z*w>!X?r2a83tRdwGhkM3G%=;|8&1eHk zfo(GGQixqldY0_#mj$$_FI_BQ-iOKQlqvI3i2v;+?J;p^1HyX^qB`&#H0Z@pU z9XoO4=)}Q$$T4f$ShA7(#;5NepFDJ6Y}&p%y#9e{qv9sb*yNG%BjX3g_4|SQ#}D3H zC_n9#VdgfLg2F-dO1?Me@oor74EH5UCbJTD1+I~$xmt`p8HZ&UZW7A5E?k|ax-I8S zp01y-Ef#9@9E&OE*Hw-2q$7u6{d|_itwATkU+7>;ZpIb%(smsRk(EN>R&&-UKg5Lt z)6G)w$q2CprXpPAW`~uObw5*lM&f1Pnz4h!KI0f4Q9#7Ll)=zxa-}E+EgJ1-P*_9f zX&ZArL@$ti`&})0pR63ffv;zHvg_K%tPVUg745 zw<_v$uRUd$p6gz(T&=St&S_APS`L%^$W3@|8pzK2*U6^qBU-m?HNO94O)t5x2wT^aq!E!zwt5W5pT{?{XH6-iRj)~M;ffWHgtjE zxBp&+^p${l^w()*m$%void@mTYRWp|4pfZ0Qga~Op$S>aOA|%8t2NqKb#uDAHP1cg zB$0UAN_+RO_pXilWB295cKqJArk5(hUbL~XPsxH)0UL2n+*yWpY4mg?8hSVtg+bDK zS_C1Am)x>hEZ@7~Uts*3?!6mb$#(7ObW1B<(Zr%Owu{zJ*XE;mSr&7VtD8J54>xhj z$7oTwiX(&O)Wx>ijn%-0tm}NQHu=vjdu2zgG|Jx3K}&4lRUysdFbfaM2Gh|UX3Rx1 z`Xc={LjD@1+Y6}ku`^@CICh#TT>*nNaJdS5iWy|uyr}+K?G2tn;Oe})(}R~@8d2V3 zJ2m4%uuA_2rDa0lb=~RdHTi*G+iKlsWmRGFXPx!)*q+{ezChjYkqc?h+8(0M?);HU zJ~D0YMXsANT=UT+UWy5s_ZT}0a6UR~o9_5HkHRT}-NY43rQcI_Z~g?ck=mV}{!P{2 z{^=$ZYk_z5Sq6L}BM{CcmU1HQHn@_kpQ|m{lRjq@3kmxzCym8{iS(6Q zTpJ3hpnmqgd|{|RYrDCvdz#l>hRd$`7`KuXcBfVa|7Mo$fujC{ zf2n6@;lk0{#7(=~N%}Y3i(u)$oYY!Bmp6))&#o~8*OLZ#bnK>WoC~D0)?k==FDdyf oRSJ~3Ukd+dNVn|rq=aFm^xjw+;)fo#`*;^}*TL(89K\n" +"Language-Team: none\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8-bit\n" + +#: lib/authentication.c:46 src/passwd.c:840 +#, c-format +msgid "%s: PAM Failure, aborting: %s\n" +msgstr "%s: PAM Fehler, breche ab: %s\n" + +#: lib/authentication.c:100 +#, c-format +msgid "Enter login(%s) password:" +msgstr "Geben Sie das Login(%s)-Passwort ein:" + +#: lib/call_script.c:68 src/vipw.c:89 +#, c-format +msgid "Cannot fork: %s\n" +msgstr "Kann keinen neuen Sub-Prozess starten: %s\n" + +#: lib/call_script.c:76 +#, c-format +msgid "waitpid (%d) failed: %s\n" +msgstr "waitpid (%d) fehlgeschlagen: %s\n" + +#: lib/check_name.c:70 +#, c-format +msgid "Can't compile regular expression: %s\n" +msgstr "Kann regulären Ausdruck nicht übersetzen: %s\n" + +#: lib/chown_dir_rec.c:54 lib/copy_dir_rec.c:147 lib/group.c:389 +#: lib/user.c:495 lib/user.c:759 src/grpck.c:277 src/grpck.c:654 +#: src/pwck.c:284 src/pwck.c:554 src/pwck.c:916 src/pwconv.c:206 +#: src/useradd.c:564 src/useradd.c:1036 src/useradd.c:1111 src/vipw.c:295 +#, c-format +msgid "Cannot change owner/group for `%s': %s\n" +msgstr "Kann den Besitzer/die Rechte für \"%s\" nicht ändern: %s\n" + +#: lib/copy_dir_rec.c:77 lib/group.c:369 lib/user.c:475 lib/user.c:739 +#: src/grpck.c:259 src/grpck.c:634 src/pwck.c:266 src/pwck.c:536 +#: src/pwck.c:896 src/pwconv.c:198 src/useradd.c:547 src/usermod.c:543 +#: src/vipw.c:189 +#, c-format +msgid "Can't create `%s': %m\n" +msgstr "Kann die Datei \"%s\" nicht anlegen: %m\n" + +#: lib/copy_dir_rec.c:99 +#, c-format +msgid "Cannot create directory `%s': %s\n" +msgstr "Das Verzeichnis \"%s\" kann nicht angelegt werden: %s\n" + +#: lib/copy_dir_rec.c:113 lib/copy_dir_rec.c:199 lib/group.c:378 +#: lib/user.c:484 lib/user.c:748 src/grpck.c:267 src/grpck.c:643 +#: src/pwck.c:274 src/pwck.c:544 src/pwck.c:905 src/pwconv.c:215 +#: src/useradd.c:554 src/useradd.c:1046 src/useradd.c:1117 src/vipw.c:287 +#, c-format +msgid "Cannot change permissions for `%s': %s\n" +msgstr "Kann die Rechte für \"%s\" nicht ändern: %s\n" + +#: lib/copy_dir_rec.c:138 +#, c-format +msgid "Cannot create symlink `%s': %s\n" +msgstr "Der symbolische Link \"%s\" kann nicht angelegt werden: %s\n" + +#: lib/copy_dir_rec.c:185 src/vipw.c:230 src/vipw.c:238 +#, c-format +msgid "Cannot copy `%s': %s\n" +msgstr "Die Datei \"%s\" kann nicht kopiert werden: %s\n" + +#: lib/copy_dir_rec.c:215 +#, c-format +msgid "Warning: ignoring `%s', not a regular file\n" +msgstr "" + +#: lib/copy_xattr.c:51 lib/copy_xattr.c:69 +#, c-format +msgid "Cannot get attributes for `%s': %m\n" +msgstr "Kann die Attribute für \"%s\" nicht bekommen: %m\n" + +#: lib/copy_xattr.c:93 lib/copy_xattr.c:113 +#, c-format +msgid "Cannot get attribute %s of `%s': %m\n" +msgstr "Kann das Attribute %s von \"%s\" nicht bekommen: %m\n" + +#: lib/copy_xattr.c:127 +#, c-format +msgid "SELinux not enabled, ignore attribute %s for `%s'.\n" +msgstr "" +"SELinux ist nicht aktiviert, das Attribute %s für \"%s\" wird ignoriert.\n" + +#: lib/copy_xattr.c:133 +#, c-format +msgid "Cannot set attribute %s for `%s': %m\n" +msgstr "Kann das Attribute %s für \"%s\" nicht setzen: %m\n" + +#: lib/copy_xattr.c:154 +#, c-format +msgid "%s: Can't get context for `%s'" +msgstr "%s: Kann den Kontext für \"%s\" nicht bekommen" + +#: lib/copy_xattr.c:161 +#, c-format +msgid "%s: Can't set context for `%s'" +msgstr "%s: Kann den Kontext für `%s' nicht setzen" + +#: lib/get_ldap_password.c:39 src/chpasswd.c:224 src/chsh.c:516 +#: src/passwd.c:881 +#, c-format +msgid "Enter LDAP Password:" +msgstr "Geben Sie das LDAP-Passwort ein:" + +#: lib/group.c:305 src/groupadd.c:506 src/groupdel.c:365 src/grpck.c:820 +#, c-format +msgid "Cannot lock group file: already locked.\n" +msgstr "" +"Bekomme keinen exklusiven Zugriff auf die Gruppen-Datei: Bereits gesperrt.\n" + +#: lib/group.c:334 lib/group.c:409 lib/user.c:440 lib/user.c:514 +#: lib/user.c:704 lib/user.c:778 src/grpck.c:227 src/grpck.c:294 +#: src/grpck.c:599 src/grpck.c:674 src/pwck.c:234 src/pwck.c:301 +#: src/pwck.c:571 src/pwck.c:861 src/pwck.c:936 src/useradd.c:582 +#, c-format +msgid "Can't open `%s': %m\n" +msgstr "Kann die Datei \"%s\" nicht öffnen: %m\n" + +#: lib/group.c:340 lib/user.c:446 lib/user.c:710 src/grpck.c:233 +#: src/grpck.c:605 src/grpunconv.c:225 src/pwck.c:240 src/pwck.c:510 +#: src/pwck.c:867 src/pwconv.c:224 src/pwunconv.c:172 src/useradd.c:538 +#: src/vipw.c:249 src/vipw.c:258 src/vipw.c:272 +#, c-format +msgid "Can't stat `%s': %m\n" +msgstr "stat()-Aufruf für \"%s\" fehlgeschlagen: %m\n" + +#: lib/group.c:435 lib/group.c:478 lib/group.c:492 lib/user.c:540 +#: lib/user.c:591 lib/user.c:605 lib/user.c:803 lib/user.c:873 src/grpck.c:703 +#: src/pwck.c:965 +#, c-format +msgid "Error while writing `%s': %m\n" +msgstr "Fehler beim Schreiben der Datei \"%s\": %m\n" + +#: lib/group.c:503 +#, c-format +msgid "Group not found (and not deleted): %s\n" +msgstr "Gruppe nicht gefunden (und nicht entfernt): %s\n" + +#: lib/group.c:511 lib/group.c:540 lib/user.c:623 lib/user.c:653 +#: lib/user.c:883 lib/user.c:912 src/grpck.c:715 src/grpck.c:723 +#: src/pwck.c:977 src/pwck.c:985 +#, c-format +msgid "Error while closing `%s': %m\n" +msgstr "Fehler beim Schliessen der Datei \"%s\": %m\n" + +#: lib/group.c:520 lib/user.c:632 lib/user.c:893 +#, c-format +msgid "Error while writing to disk `%s': %m\n" +msgstr "Fehler beim Schreiben Schreiben der Datei \"%s\" auf Festplatte: %m\n" + +#: lib/group.c:530 lib/user.c:642 lib/user.c:903 +#, c-format +msgid "Error while syncing to disk `%s': %m\n" +msgstr "Fehler beim Syncen der Datei \"%s\" auf Festplatte: %m\n" + +#: lib/group.c:547 lib/user.c:661 lib/user.c:919 src/grpck.c:472 +#: src/grpck.c:730 src/pwck.c:468 src/pwck.c:734 src/pwck.c:992 +#, c-format +msgid "Warning: cannot create backup file `%s': %m\n" +msgstr "" +"Warning: Es konnte keine Sicherheitskopie der Datei \"%s\" angelegt werden: %" +"m\n" + +#: lib/group.c:552 lib/user.c:666 lib/user.c:923 +#, c-format +msgid "Error while renaming `%s': %m\n" +msgstr "Fehler beim Umbennen der Datei \"%s\": %m\n" + +#: lib/group.c:693 lib/user.c:1094 +#, c-format +msgid "LDAP information update failed: %s\n" +msgstr "Update der LDAP-Informationen fehlgeschlagen: %s\n" + +#: lib/group.c:702 +#, c-format +msgid "Cannot modify/add NIS group entries.\n" +msgstr "Kann keine NIS Gruppen-Einträge ändern/hinzufügen.\n" + +#: lib/group.c:707 lib/user.c:1103 +#, c-format +msgid "Unknown service %d.\n" +msgstr "Unbekannter Service %d.\n" + +#: lib/libldap.c:1364 lib/libldap.c:1429 lib/libldap.c:1484 lib/libldap.c:1610 +#: lib/libldap.c:1752 lib/libldap.c:1992 +#, c-format +msgid "Authentication failure.\n" +msgstr "Authentifizierung fehlgeschlagen.\n" + +#: lib/libldap.c:1760 +#, c-format +msgid "Cannot find base ou for new users.\n" +msgstr "Kann die \"base ou\" für neue Benutzer nicht bestimmen.\n" + +#: lib/libldap.c:1763 +#, c-format +msgid "Base DN for user account `%s' is \"%s\".\n" +msgstr "Base DN für den Benutzer-Account \"%s\" ist \"%s\".\n" + +#: lib/libldap.c:2000 +#, c-format +msgid "Cannot find base ou for new groups.\n" +msgstr "Kann die \"base ou\" für neue Gruppen nicht bestimmen.\n" + +#: lib/libldap.c:2003 +#, c-format +msgid "Base DN for group `%s' is \"%s\".\n" +msgstr "Base DN für die Gruppe \"%s\" ist \"%s\".\n" + +#: lib/logging.c:65 +#, c-format +msgid "" +"Cannot open logging plugin:\n" +"%s\n" +msgstr "" +"Kann das Plugin zum Protokollieren nicht öffnen:\n" +"%s\n" + +#: lib/logging.c:81 lib/logging.c:99 +#, c-format +msgid "" +"Cannot find symbol `%s':\n" +"%s\n" +msgstr "" +"Kann das Symbol \"%s\" nicht finden:\n" +"%s\n" + +#: lib/logging.c:140 +#, c-format +msgid "Error setting up logging subsystem!\n" +msgstr "Fehler beim Aufsetzen des Subsystems für das Protokollieren!\n" + +#: lib/parse_crypt_arg.c:87 +#, c-format +msgid "Can't open %s for reading: %s\n" +msgstr "Kann %s nicht zum Lesen öffnen: %s\n" + +#: lib/parse_crypt_arg.c:95 +#, c-format +msgid "Unable to obtain entropy from %s\n" +msgstr "" + +#: lib/parse_crypt_arg.c:110 +#, c-format +msgid "Unable to generate a salt, check your crypt settings.\n" +msgstr "" + +#: lib/parse_crypt_arg.c:144 +#, c-format +msgid "No support for blowfish compiled in, using MD5.\n" +msgstr "Blowfish Support wurde nicht eincompiliert, benutze MD5.\n" + +#: lib/parse_crypt_arg.c:149 +#, c-format +msgid "No support for %s available, using DES.\n" +msgstr "Kein Support für %s verfügbar, benutze DES.\n" + +#: lib/passwd_nisplus.c:306 +#, c-format +msgid "Could not determine hostname!\n" +msgstr "Kann den Rechnernamen nicht feststellen!\n" + +#: lib/passwd_nisplus.c:322 +#, c-format +msgid "Can't find %s's secret key\n" +msgstr "" + +#: lib/passwd_nisplus.c:338 lib/passwd_nisplus.c:359 +#, c-format +msgid "Could not get public key for %s!\n" +msgstr "" + +#: lib/passwd_nisplus.c:348 +#, c-format +msgid "Could not determine the NIS+ root server!\n" +msgstr "" + +#: lib/passwd_nisplus.c:366 +#, c-format +msgid "Could not create conversion key!\n" +msgstr "" + +#: lib/passwd_nisplus.c:378 +#, c-format +msgid "DES encryption failure\n" +msgstr "DES Verschlüsselung fehlgeschlagen\n" + +#: lib/passwd_nisplus.c:390 +#, c-format +msgid "rpc.nispasswd not running on %s?\n" +msgstr "rpc.nispasswd läuft nicht auf %s?\n" + +#: lib/passwd_nisplus.c:411 +#, c-format +msgid "ERROR: password incorrect, try again\n" +msgstr "Fehler: Passwort ist falsch, bitte versuchen Sie es erneut\n" + +#: lib/passwd_nisplus.c:413 lib/passwd_nisplus.c:481 +#, c-format +msgid "" +"ERROR: %s\n" +" password not changed\n" +msgstr "" +"Fehler: %s\n" +" Passwort wurde nicht geändert\n" + +#: lib/passwd_nisplus.c:429 lib/passwd_nisplus.c:456 +#, c-format +msgid "DES decryption failure!\n" +msgstr "DES Entschlüsselung fehlgeschlagen!\n" + +#: lib/passwd_nisplus.c:514 +#, c-format +msgid "ERROR: Unknown error, don't know what happened\n" +msgstr "" + +#: lib/passwd_nisplus.c:519 +#, c-format +msgid "NIS+ password information changed for %s\n" +msgstr "" + +#: lib/passwd_nisplus.c:521 +#, c-format +msgid "NIS+ credential information changed for %s\n" +msgstr "" + +#: lib/passwd_nisplus.c:590 +#, c-format +msgid "NIS+ passwd table not found: %s\n" +msgstr "" + +#: lib/passwd_nisplus.c:606 +#, c-format +msgid "User not found in NIS+ table.\n" +msgstr "" + +#: lib/print_error.c:30 src/rpasswd.c:120 src/rpasswdd.c:139 +#, c-format +msgid "Try `%s --help' or `%s --usage' for more information.\n" +msgstr "Versuche `%s --help' oder `%s --usage' für mehr Informationen.\n" + +#: lib/print_version.c:31 src/rpasswd.c:73 src/rpasswdd.c:90 +#, c-format +msgid "" +"Copyright (C) %s Thorsten Kukuk.\n" +"This is free software; see the source for copying conditions. There is NO\n" +"warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n" +msgstr "" +"Copyright (C) %s Thorsten Kukuk.\n" +"Dies ist freie Software; in den Quellen befinden sich die\n" +"Lizenzbedingungen.\n" +"Es gibt KEINERLEI Garantie; nicht einmal für die TAUGLICHKEIT oder\n" +"VERWENDBARKEIT FÜR EINEN ANGEGEBENEN ZWECK.\n" + +#: lib/remove_dir_rec.c:74 +#, c-format +msgid "Cannot remove file `%s': %s\n" +msgstr "Die Datei \"%s\" kann nicht entfernt werden: %s\n" + +#: lib/remove_dir_rec.c:83 +#, c-format +msgid "Cannot remove directory `%s': %s\n" +msgstr "Kann das Verzeichnis \"%s\" nicht löschen: %s\n" + +#: lib/selinux_utils.c:80 +#, c-format +msgid "Couldn't get security context `%s': %s\n" +msgstr "Kann den Sicherheits-Kontext \"%s\" nicht bekommen: %s\n" + +#: lib/selinux_utils.c:88 +#, c-format +msgid "Couldn't get default security context: %s\n" +msgstr "Kann den default Sicherheits-Kontext nicht bekommen: %s\n" + +#: lib/selinux_utils.c:97 +#, c-format +msgid "Couldn't set default security context to `%s': %s\n" +msgstr "Kann den default Sicherheits-Kontext nicht auf \"%s\" setzen: %s\n" + +#: lib/selinux_utils.c:117 +#, c-format +msgid "Couldn't reset default security context to `%s': %s\n" +msgstr "" +"Kann den default Sicherheits-Kontext nicht auf \"%s\" zurücksetzen: %s\n" + +#: lib/user.c:81 +#, c-format +msgid "Can't find the NIS master server: %s\n" +msgstr "Kann den NIS-Master-Server nicht bestimmen: %s\n" + +#: lib/user.c:88 +#, c-format +msgid "rpc.yppasswdd not running on NIS master %s.\n" +msgstr "rpc.yppasswdd läuft nicht auf dem NIS Master %s.\n" + +#: lib/user.c:94 +#, c-format +msgid "rpc.yppasswdd running on illegal port on NIS master %s.\n" +msgstr "rpc.yppasswdd läuft auf einem illegalen Port auf dem NIS Master %s.\n" + +#: lib/user.c:411 src/groupmod.c:434 src/pwck.c:1082 src/useradd.c:1630 +#: src/userdel.c:569 src/usermod.c:1373 +#, c-format +msgid "Cannot lock password file: already locked.\n" +msgstr "Kann die Passwort-Datei nicht sperren: ist bereits gesperrt.\n" + +#: lib/user.c:615 +#, c-format +msgid "User not found (and not deleted): %s\n" +msgstr "Account nicht gefunden (und nicht entfernt): %s\n" + +#: lib/user.c:858 +#, c-format +msgid " Error while writing `%s': %m\n" +msgstr "Fehler beim Schreiben der Datei \"%s\": %m\n" + +#: lib/user.c:982 +#, c-format +msgid "Error while changing the NIS data.\n" +msgstr "Fehler beim Ändern der NIS Daten.\n" + +#: lib/user.c:991 +#, c-format +msgid "Error while changing the NIS+ data.\n" +msgstr "Fehler beim Ändern der NIS+ Daten.\n" + +#: src/chage.c:56 +#, c-format +msgid "" +"Usage: %s [-D binddn][-P path][-m mindays][-M maxdays][-d lastday][-I " +"inactive][-E expiredate][-W warndays] user\n" +msgstr "" +"Aufruf: %s [-D binddn][-P path][-m mindays][-M maxdays][-d lastday][-I " +"inactive][-E expiredate][-W warndays] Account\n" + +#: src/chage.c:58 +#, c-format +msgid " %s -l user\n" +msgstr " %s -l Benutzer\n" + +#: src/chage.c:66 +#, c-format +msgid "" +"%s - change user password expiry information\n" +"\n" +msgstr "" +"%s - Ändere die Verfallsinformationen des Benutzerpassworts\n" +"\n" + +#: src/chage.c:70 src/chfn.c:112 src/chpasswd.c:70 src/chsh.c:65 +#: src/gpasswd.c:94 src/groupadd.c:64 src/groupdel.c:64 src/groupmod.c:63 +#: src/passwd.c:401 src/useradd.c:67 src/userdel.c:68 src/usermod.c:67 +msgid " -D binddn Use dn \"binddn\" to bind to the LDAP directory\n" +msgstr " -D binddn Benutze \"binddn\" als DN für LDAP anfragen\n" + +#: src/chage.c:73 src/chfn.c:115 src/chpasswd.c:73 src/chsh.c:68 +#: src/passwd.c:403 src/pwconv.c:54 src/pwunconv.c:54 +msgid " -P path Search passwd and shadow file in \"path\"\n" +msgstr "" +" -P Pfad Suche die passwd und shadow Datei im Verzeichnis \"Pfad\"\n" + +#: src/chage.c:76 src/chfn.c:88 src/chfn.c:123 src/chpasswd.c:79 src/chsh.c:74 +#: src/gpasswd.c:93 src/groupmod.c:77 src/passwd.c:400 src/usermod.c:91 +msgid " --service srv Use nameservice 'srv'\n" +msgstr " --service srv Benutze den Dienst \"srv\"\n" + +#: src/chage.c:77 src/chfn.c:86 src/chfn.c:124 src/chsh.c:75 +msgid " -q, --quiet Don't be verbose\n" +msgstr " -q, --quiet Keine Status-Meldungen ausgeben\n" + +#: src/chage.c:78 src/chfn.c:89 src/chfn.c:125 src/chpasswd.c:80 src/chsh.c:76 +#: src/expiry.c:52 src/groupadd.c:74 src/groupdel.c:70 src/groupmod.c:78 +#: src/grpck.c:68 src/grpconv.c:43 src/grpunconv.c:63 src/newgrp.c:66 +#: src/pwck.c:68 src/pwconv.c:56 src/pwunconv.c:56 src/useradd.c:92 +#: src/userdel.c:74 src/usermod.c:96 src/vipw.c:72 +msgid " --help Give this help list\n" +msgstr " --help Gib diese Hilfe aus\n" + +#: src/chage.c:79 src/chfn.c:90 src/chfn.c:126 src/chpasswd.c:81 src/chsh.c:77 +#: src/expiry.c:53 src/groupdel.c:71 src/grpck.c:69 src/grpconv.c:44 +#: src/grpunconv.c:64 src/newgrp.c:67 src/pwck.c:69 src/pwconv.c:57 +#: src/pwunconv.c:57 src/userdel.c:75 src/vipw.c:73 +msgid " -u, --usage Give a short usage message\n" +msgstr " -u, --usage Gib eine kurze Hilfe zum Aufruf aus\n" + +#: src/chage.c:80 src/chfn.c:91 src/chfn.c:127 src/chpasswd.c:82 src/chsh.c:78 +#: src/expiry.c:54 src/groupadd.c:76 src/groupdel.c:72 src/groupmod.c:80 +#: src/grpck.c:70 src/grpconv.c:45 src/grpunconv.c:65 src/newgrp.c:68 +#: src/pwck.c:70 src/pwconv.c:58 src/pwunconv.c:58 src/useradd.c:94 +#: src/userdel.c:76 src/usermod.c:98 src/vipw.c:74 +msgid " -v, --version Print program version\n" +msgstr " -v, --version Gib Versionsnummer des Programmes aus\n" + +#: src/chage.c:81 src/chfn.c:94 src/chfn.c:130 src/chpasswd.c:83 src/chsh.c:81 +#: src/passwd.c:409 +msgid "Valid services are: files, nis, nisplus, ldap\n" +msgstr "Gültige Dienste sind: files, nis, nisplus, ldap\n" + +#: src/chage.c:109 +#, c-format +msgid "Minimum:\t%ld\n" +msgstr "" + +#: src/chage.c:110 +#, c-format +msgid "Maximum:\t%ld\n" +msgstr "" + +#: src/chage.c:111 +#, c-format +msgid "Warning:\t%ld\n" +msgstr "" + +#: src/chage.c:112 +#, c-format +msgid "Inactive:\t%ld\n" +msgstr "" + +#: src/chage.c:113 +#, c-format +msgid "Last Change:\t\t" +msgstr "" + +#: src/chage.c:115 +#, c-format +msgid "Unknown, password is forced to change at next login\n" +msgstr "Unbekannt, Passwort muß beim nächsten Login geändert werden.\n" + +#: src/chage.c:117 src/chage.c:123 src/chage.c:129 src/chage.c:135 +#, c-format +msgid "Never\n" +msgstr "Nie\n" + +#: src/chage.c:120 +#, c-format +msgid "Password Expires:\t" +msgstr "Passwort verfällt:\t" + +#: src/chage.c:126 +#, c-format +msgid "Password Inactive:\t" +msgstr "Passwort Inaktive:\t" + +#: src/chage.c:133 +#, c-format +msgid "Account Expires:\t" +msgstr "Account verfällt:\t" + +#: src/chage.c:147 +msgid "Minimum Password Age" +msgstr "Minimales Passwortalter" + +#: src/chage.c:154 src/chage.c:170 src/chage.c:186 +#, c-format +msgid "Input is no integer value\n" +msgstr "Die Eingabe ist kein Integer-Wert\n" + +#: src/chage.c:156 src/chage.c:172 src/chage.c:188 +#, c-format +msgid "Negative numbers are not allowed as input (except -1)\n" +msgstr "Negative Werte sind als Eingabe nicht erlaubt (ausser -1)\n" + +#: src/chage.c:163 +msgid "Maximum Password Age" +msgstr "Maximales Passwortalter" + +#: src/chage.c:179 +msgid "Password Expiration Warning" +msgstr "" + +#: src/chage.c:195 +msgid "Password Inactive" +msgstr "Passwort Inaktive" + +#: src/chage.c:203 +msgid "Last Password Change (YYYY-MM-DD)" +msgstr "Letzte Passwortänderung (JJJJ-MM-TT)" + +#: src/chage.c:217 src/chage.c:237 +#, c-format +msgid "Invalid date\n" +msgstr "Ungültiges Datum\n" + +#: src/chage.c:223 +msgid "Account Expiration Date (YYYY-MM-DD)" +msgstr "" + +#: src/chage.c:340 src/chfn.c:478 src/chsh.c:337 +#, c-format +msgid "Only root is allowed to specify another path\n" +msgstr "Nur root darf einen anderen Pfad angeben\n" + +#: src/chage.c:370 src/chfn.c:439 src/chpasswd.c:171 src/chsh.c:320 +#: src/gpasswd.c:197 src/groupadd.c:376 src/groupdel.c:224 src/groupmod.c:300 +#: src/passwd.c:523 src/useradd.c:1403 src/userdel.c:454 src/usermod.c:978 +#, c-format +msgid "Service `%s' not supported.\n" +msgstr "" + +#: src/chage.c:395 src/chfn.c:510 src/chpasswd.c:208 src/chsh.c:363 +#: src/chsh.c:370 src/expiry.c:247 src/gpasswd.c:230 src/groupadd.c:413 +#: src/groupdel.c:249 src/groupmod.c:333 src/grpck.c:806 src/grpconv.c:100 +#: src/grpunconv.c:197 src/newgrp.c:155 src/passwd.c:589 src/pwck.c:1068 +#: src/pwconv.c:170 src/pwunconv.c:144 src/rpasswd.c:491 src/rpasswdd.c:1339 +#: src/useradd.c:1511 src/userdel.c:479 src/usermod.c:1014 src/vipw.c:410 +#, c-format +msgid "%s: Too many arguments.\n" +msgstr "%s: Zu viele Argumente.\n" + +#: src/chage.c:402 +#, c-format +msgid "%s: Do not include \"l\" with other flags\n" +msgstr "" + +#: src/chage.c:427 src/chfn.c:531 src/chsh.c:397 src/expiry.c:267 +#: src/gpasswd.c:265 src/groupadd.c:450 src/groupdel.c:278 src/groupmod.c:362 +#: src/passwd.c:656 src/useradd.c:1545 src/userdel.c:507 src/usermod.c:1048 +#, c-format +msgid "%s: Cannot determine your user name.\n" +msgstr "%s: Kann Ihr Benutzer-Login nicht feststellen.\n" + +#: src/chage.c:446 src/chfn.c:566 src/chsh.c:431 src/userdel.c:527 +#, c-format +msgid "%s: User `%s' is not known to service `%s'.\n" +msgstr "%s: Der Benutzer \"%s\" ist dem Dienst \"%s\" nicht bekannt.\n" + +#: src/chage.c:449 src/chfn.c:555 src/chfn.c:569 src/chsh.c:421 src/chsh.c:434 +#: src/passwd.c:675 src/passwd.c:696 src/userdel.c:530 +#, c-format +msgid "%s: Unknown user `%s'.\n" +msgstr "%s: Unbekannter Benutzer \"%s\".\n" + +#: src/chage.c:467 +#, c-format +msgid "Only an administrator is allowed to change aging information.\n" +msgstr "Nur ein Systemadministrator kann die Aging-Informationen ändern.\n" + +#: src/chage.c:483 +#, c-format +msgid "This system does not support shadow accounts.\n" +msgstr "Dieses System unterstützt keine Shadow-Accounts.\n" + +#: src/chage.c:489 +#, c-format +msgid "This account does not have a shadow entry.\n" +msgstr "Dieser Account hat keine Shadow-Informationen.\n" + +#: src/chage.c:535 +#, c-format +msgid "You can only list your own aging information.\n" +msgstr "Sie können nur Ihre eigenen Shadow-Informationen einsehen.\n" + +#: src/chage.c:542 src/expiry.c:306 src/passwd.c:1019 +#, c-format +msgid "%s: Failed to drop privileges: %s\n" +msgstr "" + +#: src/chage.c:554 +#, c-format +msgid "No aging information available for %s.\n" +msgstr "" + +#: src/chage.c:574 +#, c-format +msgid "Changing aging information for %s.\n" +msgstr "Ändere Shadow-Informationen für %s.\n" + +#: src/chage.c:580 src/chage.c:667 +#, c-format +msgid "Aging information not changed.\n" +msgstr "Aging-Informationen nicht geändert.\n" + +#: src/chage.c:623 +#, c-format +msgid "Lastday is no date and no integer value >= -1\n" +msgstr "Lastday ist kein Datum und kein Integer-Wert >= -1\n" + +#: src/chage.c:643 +#, c-format +msgid "Expiredate is no date and no integer value >= -1\n" +msgstr "Die Eingabe ist kein Datum und kein Integer-Wert >= -1\n" + +#: src/chage.c:652 +#, c-format +msgid "Error while parsing options.\n" +msgstr "Fehler beim Parsen der Optionen.\n" + +#: src/chage.c:698 +#, c-format +msgid "Error while converting to shadow account.\n" +msgstr "" + +#: src/chage.c:716 +#, c-format +msgid "Error while changing aging information.\n" +msgstr "" + +#: src/chage.c:726 +#, c-format +msgid "Aging information changed.\n" +msgstr "Aging-Informationen geändert.\n" + +#: src/chfn.c:71 +#, c-format +msgid "" +"Usage: %s [-f name] [-r room] [-w work_phone]\n" +" [-h home_phone] [-o other] [-q] [-u] [-v] [user]\n" +msgstr "" +"Aufruf: %s [-f Name] [-r Büro] [-w Büro_Telefon]\n" +" [-h Privates_Telefon] [-o Anderes] [-q] [-u] [-v] [Benutzerlogin]\n" + +#: src/chfn.c:79 src/chfn.c:109 +#, c-format +msgid "" +"%s - change user name and information\n" +"\n" +msgstr "" +"%s - Ändere Benutzer Namen und weitere Informationen\n" +"\n" + +#: src/chfn.c:81 src/chfn.c:117 +msgid " -f full-name Change your real name\n" +msgstr "" + +#: src/chfn.c:82 +msgid " -r room Change your office room number\n" +msgstr "" + +#: src/chfn.c:83 +msgid " -w work_phone Change your office phone number\n" +msgstr "" + +#: src/chfn.c:84 +msgid " -h home_phone Change your home phone number\n" +msgstr "" + +#: src/chfn.c:85 +msgid " -o other Change the undefined portions of the GECOS field\n" +msgstr "" + +#: src/chfn.c:101 +#, c-format +msgid "" +"Usage: %s [-D binddn] [-P path] [-f name] [-o office] [-p office-phone]\n" +" [-h home-phone][-m other] [-q] [-u] [-v] [user]\n" +msgstr "" + +#: src/chfn.c:118 +msgid " -o office Change your office room number\n" +msgstr "" + +#: src/chfn.c:119 +msgid " -p phone Change your office phone number\n" +msgstr "" + +#: src/chfn.c:120 +msgid " -h home-phone Change your home phone number\n" +msgstr "" + +#: src/chfn.c:121 +msgid " -m other Change the undefined portions of the GECOS field\n" +msgstr "" + +#: src/chfn.c:165 +#, c-format +msgid "Enter the new value, or press ENTER for the default\n" +msgstr "Geben Sie den neuen Wert ein, oder drücken Sie ENTER für den Alten\n" + +#: src/chfn.c:171 +msgid "Full Name" +msgstr "Voller Name" + +#: src/chfn.c:173 +#, c-format +msgid "\tFull Name: %s\n" +msgstr " Voller Name: %s\n" + +#: src/chfn.c:176 +msgid "Room Number" +msgstr "Büro Nummer" + +#: src/chfn.c:178 +#, c-format +msgid "\tRoom Number: %s\n" +msgstr " Büro Nummer: %s\n" + +#: src/chfn.c:181 +msgid "Work Phone" +msgstr "Büro Telefon" + +#: src/chfn.c:183 +#, c-format +msgid "\tWork Phone: %s\n" +msgstr " Büro Telefon: %s\n" + +#: src/chfn.c:186 +msgid "Home Phone" +msgstr "Private Rufnummer" + +#: src/chfn.c:188 +#, c-format +msgid "\tHome Phone: %s\n" +msgstr " Private Rufnummer: %s\n" + +#: src/chfn.c:191 +msgid "Other" +msgstr "Weitere Informationen" + +#: src/chfn.c:193 +#, c-format +msgid "\tOther: %s\n" +msgstr " Weitere Informationen: %s\n" + +#: src/chfn.c:255 +#, c-format +msgid "%s: The characters '%s\"' are not allowed.\n" +msgstr "" + +#: src/chfn.c:261 src/chsh.c:204 +#, c-format +msgid "%s: Control characters are not allowed.\n" +msgstr "%s: Control-Zeichen sind nicht erlaubt.\n" + +#: src/chfn.c:331 src/chsh.c:257 +#, c-format +msgid "%s: Don't know what I should do.\n" +msgstr "%s: Weiß nicht was ich machen soll.\n" + +#: src/chfn.c:377 src/chfn.c:395 src/chfn.c:407 src/chfn.c:451 src/chfn.c:460 +#: src/gpasswd.c:296 src/passwd.c:614 src/passwd.c:628 +#, c-format +msgid "%s: Permission denied.\n" +msgstr "%s: Erlaubnis verweigert.\n" + +#: src/chfn.c:586 src/chsh.c:451 src/passwd.c:712 +msgid "Unknown user context" +msgstr "Unbekannter Benutzer Kontext" + +#: src/chfn.c:588 +#, c-format +msgid "%s: %s is not authorized to change the finger information for %s.\n" +msgstr "%s: %s darf die Finger-Informationen für %s nicht ändern.\n" + +#: src/chfn.c:601 +#, c-format +msgid "SELinux is in permissive mode, continuing.\n" +msgstr "" + +#: src/chfn.c:619 +#, c-format +msgid "You cannot change the finger information for `%s'.\n" +msgstr "Sie können die Finger-Informationen für '%s' nicht ändern.\n" + +#: src/chfn.c:626 +#, c-format +msgid "Changing finger information for %s.\n" +msgstr "Ändere Finger-Informationen für %s.\n" + +#: src/chfn.c:658 +#, c-format +msgid "%s: Invalid name: `%s'\n" +msgstr "%s: Ungültiger Name: \"%s\"\n" + +#: src/chfn.c:666 +#, c-format +msgid "%s: Invalid room number: `%s'\n" +msgstr "%s: Ungültige Raum Nummer: \"%s\"\n" + +#: src/chfn.c:674 +#, c-format +msgid "%s: Invalid work phone: `%s'\n" +msgstr "%s: Ungültige dienstliche Telefon Nummer: \"%s\"\n" + +#: src/chfn.c:682 +#, c-format +msgid "%s: Invalid home phone: `%s'\n" +msgstr "%s: Ungültige private Telefon Nummer: \"%s\".\n" + +#: src/chfn.c:690 +#, c-format +msgid "%s: `%s' contains illegal characters.\n" +msgstr "%s: \"%s\" enthält nicht erlaubte Zeichen.\n" + +#: src/chfn.c:716 +#, c-format +msgid "Finger information not changed.\n" +msgstr "Finger-Informationen nicht geändert.\n" + +#: src/chfn.c:724 +#, c-format +msgid "Error while changing finger information.\n" +msgstr "" + +#: src/chfn.c:734 +#, c-format +msgid "Finger information changed.\n" +msgstr "Finger-Informationen geändert.\n" + +#: src/chpasswd.c:59 +#, c-format +msgid "Usage: %s [-D binddn] [-P path] [-e] [-c des|md5|blowfish] [file]\n" +msgstr "" + +#: src/chpasswd.c:67 +#, c-format +msgid "" +"%s - update password entries in batch\n" +"\n" +msgstr "" +"%s - Ändere die Benutzerpasswörter in Serie\n" +"\n" + +#: src/chpasswd.c:75 +msgid "" +" -c, --crypt Password should be encrypted with DES, MD5 or blowfish\n" +msgstr "" + +#: src/chpasswd.c:77 +msgid " -e, --encrypted The passwords are in encrypted form\n" +msgstr "" + +#: src/chpasswd.c:278 +#, c-format +msgid "%s: line %ld: missing new password\n" +msgstr "" + +#: src/chpasswd.c:287 +#, c-format +msgid "%s: line %ld: unknown user %s\n" +msgstr "%s: Zeile %ld: Unbekannter Benutzer %s\n" + +#: src/chpasswd.c:318 src/gpasswd.c:425 +#, c-format +msgid "Cannot create salt for standard crypt" +msgstr "" + +#: src/chpasswd.c:334 src/gpasswd.c:460 +#, c-format +msgid "Cannot create salt for MD5 crypt" +msgstr "" + +#: src/chpasswd.c:350 src/gpasswd.c:441 +#, c-format +msgid "Cannot create salt for blowfish crypt" +msgstr "" + +#: src/chpasswd.c:380 +#, c-format +msgid "%s: line %ld: cannot update password entry\n" +msgstr "" + +#: src/chpasswd.c:395 +#, c-format +msgid "%s: errors occurred, %ld passwords not updated\n" +msgstr "" + +#: src/chsh.c:54 +#, c-format +msgid "" +"Usage: %s [-D binddn] [-P path] [-s shell] [-l] [-q]\n" +" [--help] [--usage] [--version] [user]\n" +msgstr "" + +#: src/chsh.c:62 +#, c-format +msgid "" +"%s - change login shell\n" +"\n" +msgstr "" +"%s - ändere Login-Shell\n" +"\n" + +#: src/chsh.c:70 +msgid " -l List allowed shells from /etc/shells\n" +msgstr " -l Auflisten der erlaubten Shells aus /etc/shells\n" + +#: src/chsh.c:72 +msgid " -s shell Use 'shell' as new login shell\n" +msgstr " -s shell Benutze 'shell' als neue Login-Shell\n" + +#: src/chsh.c:109 +#, c-format +msgid "No known shells.\n" +msgstr "Keine bekannten Shells.\n" + +#: src/chsh.c:177 +#, c-format +msgid "%s: Shell must be a full path name.\n" +msgstr "" + +#: src/chsh.c:183 +#, c-format +msgid "%s: `%s' does not exist.\n" +msgstr "" + +#: src/chsh.c:189 +#, c-format +msgid "%s: `%s' is not executable.\n" +msgstr "" + +#: src/chsh.c:199 +#, c-format +msgid "%s: '%c' is not allowed.\n" +msgstr "%s: '%c' ist kein erlaubtes Zeichen.\n" + +#: src/chsh.c:212 +#, c-format +msgid "Warning: \"%s\" is not listed in /etc/shells.\n" +msgstr "" + +#: src/chsh.c:215 +#, c-format +msgid "%s: \"%s\" is not listed in /etc/shells.\n" +msgstr "" + +#: src/chsh.c:217 +#, c-format +msgid "%s: Use -l option to see list.\n" +msgstr "" + +#: src/chsh.c:453 +#, c-format +msgid "%s: %s is not authorized to change the shell of `%s'.\n" +msgstr "%s: %s darf nicht die Shell für \"%s\" ändern.\n" + +#: src/chsh.c:466 src/passwd.c:728 +#, c-format +msgid "SELinux is in permissive mode, continuing\n" +msgstr "" + +#: src/chsh.c:484 +#, c-format +msgid "You cannot change the shell for %s.\n" +msgstr "" + +#: src/chsh.c:495 +#, c-format +msgid "You cannot change a restricted shell.\n" +msgstr "" + +#: src/chsh.c:501 +#, c-format +msgid "Changing login shell for %s.\n" +msgstr "Ändere Login-Shell für %s.\n" + +#: src/chsh.c:545 +#, c-format +msgid "Enter the new value, or press return for the default.\n" +msgstr "Geben Sie den neuen Wert ein, oder drücken Sie ENTER für den Alten.\n" + +#: src/chsh.c:546 +msgid "Login Shell" +msgstr "Login Shell" + +#: src/chsh.c:554 +#, c-format +msgid "Shell not changed.\n" +msgstr "Shell nicht geändert.\n" + +#: src/chsh.c:568 +#, c-format +msgid "Error while changing login shell.\n" +msgstr "" + +#: src/chsh.c:578 +#, c-format +msgid "Shell changed.\n" +msgstr "Shell geändert.\n" + +#: src/expiry.c:40 +#, c-format +msgid "Usage: %s [-f]\n" +msgstr "Aufruf: %s [-f]\n" + +#: src/expiry.c:48 +#, c-format +msgid "" +"%s - check password expiration and enforce password change\n" +"\n" +msgstr "" +"%s - Check Verfallsdatum des Benutzerpassworts und forciere ein neues\n" +"\n" + +#: src/expiry.c:50 +msgid " -f, --force The caller is forced to change the password\n" +msgstr "" + +#: src/expiry.c:100 +#, c-format +msgid "Age field for %s is wrong" +msgstr "" + +#: src/expiry.c:121 +#, c-format +msgid "Your password has expired. Choose a new password." +msgstr "" + +#: src/expiry.c:139 +#, c-format +msgid "Your login has expired. Contact the system administrator.\n" +msgstr "" + +#: src/expiry.c:147 +#, c-format +msgid "Password changing requested. Choose a new password.\n" +msgstr "" + +#: src/expiry.c:157 +#, c-format +msgid "Your password is inactive. Contact the system administrator.\n" +msgstr "" + +#: src/expiry.c:162 +#, c-format +msgid "Your password has expired. Choose a new password.\n" +msgstr "" + +#: src/expiry.c:171 +#, c-format +msgid "Your password will expire in %ld days.\n" +msgstr "" + +#: src/expiry.c:174 +#, c-format +msgid "Your password will expire tomorrow.\n" +msgstr "" + +#: src/expiry.c:176 +#, c-format +msgid "Your password will expire within 24 hours.\n" +msgstr "" + +#: src/gpasswd.c:63 src/passwd.c:796 +#, c-format +msgid "%s: error reading from stdin!\n" +msgstr "" + +#: src/gpasswd.c:80 +#, c-format +msgid "Usage: %s [-r|-l|-u] group\n" +msgstr "Aufruf: %s [-r|-l|-u] Gruppe\n" + +#: src/gpasswd.c:87 +#, c-format +msgid "" +"%s - change group password\n" +"\n" +msgstr "" + +#: src/gpasswd.c:88 +msgid " -r Remove the password for this group\n" +msgstr "" + +#: src/gpasswd.c:89 +msgid " -l Locks the password entry for \"group\"\n" +msgstr "" + +#: src/gpasswd.c:91 +msgid " -u Try to unlock the password entry for \"group\"\n" +msgstr "" + +#: src/gpasswd.c:96 +msgid " -P path Search group file in \"path\"\n" +msgstr "" + +#: src/gpasswd.c:98 src/passwd.c:406 src/rpasswd.c:111 src/rpasswdd.c:130 +msgid " --help Give this help list\n" +msgstr " --help Gib diese Hilfe aus\n" + +#: src/gpasswd.c:99 src/passwd.c:407 src/rpasswd.c:112 src/rpasswdd.c:131 +msgid " --usage Give a short usage message\n" +msgstr " --usage Gib eine kurze Hilfe zum Aufruf aus\n" + +#: src/gpasswd.c:100 src/passwd.c:408 src/rpasswd.c:113 src/rpasswdd.c:132 +msgid " --version Print program version\n" +msgstr " --version Gib Versionnummer des Programmes aus\n" + +#: src/gpasswd.c:101 +msgid " --stdin Receive input from stdin instead of /dev/tty\n" +msgstr "" + +#: src/gpasswd.c:102 +msgid "Valid services for -r are: files, nis, nisplus, ldap\n" +msgstr "Gültige Dienste für -r sind: files, nis, nisplus, ldap\n" + +#: src/gpasswd.c:238 +#, c-format +msgid "%s: Group argument missing.\n" +msgstr "%s: Gruppen-Argument fehlt.\n" + +#: src/gpasswd.c:277 +#, c-format +msgid "%s: Group `%s' is not known to service `%s'.\n" +msgstr "%s: Die Gruppe \"%s\" ist dem Dienst \"%s\" nicht bekannt.\n" + +#: src/gpasswd.c:280 src/groupdel.c:300 src/groupmod.c:384 src/useradd.c:220 +#: src/usermod.c:185 +#, c-format +msgid "%s: Unknown group `%s'.\n" +msgstr "%s: Unbekannte Gruppe \"%s\".\n" + +#: src/gpasswd.c:314 src/passwd.c:909 src/usermod.c:1125 +#, c-format +msgid "Cannot unlock the password for `%s'!\n" +msgstr "" + +#: src/gpasswd.c:336 src/passwd.c:936 src/usermod.c:1104 +#, c-format +msgid "Password for `%s' is already locked!\n" +msgstr "" + +#: src/gpasswd.c:348 +#, c-format +msgid "Changing the password for group %s.\n" +msgstr "" + +#: src/gpasswd.c:355 src/gpasswd.c:357 +msgid "New Password: " +msgstr "" + +#: src/gpasswd.c:366 +#, c-format +msgid "Password change aborted.\n" +msgstr "" + +#: src/gpasswd.c:379 src/gpasswd.c:381 +msgid "Re-enter new password: " +msgstr "" + +#: src/gpasswd.c:392 +#, c-format +msgid "Sorry, passwords do not match.\n" +msgstr "" + +#: src/gpasswd.c:400 +#, c-format +msgid "%s: Try again later.\n" +msgstr "" + +#: src/gpasswd.c:448 +#, c-format +msgid "No support for blowfish compiled in. Using MD5\n" +msgstr "Blowfish Support wurde nicht eincompiliert, benutze MD5.\n" + +#: src/gpasswd.c:475 +#, c-format +msgid "%s: Error changing password.\n" +msgstr "%s: Beim ändern des Passworts ist ein Fehler aufgetreten.\n" + +#: src/gpasswd.c:484 +#, c-format +msgid "Password removed.\n" +msgstr "Passwort gelöscht.\n" + +#: src/gpasswd.c:490 src/passwd.c:978 +#, c-format +msgid "Password changed.\n" +msgstr "Passwort geändert.\n" + +#: src/groupadd.c:54 +#, c-format +msgid "" +"Usage: %s [-D binddn] [-g gid [-o]] [-r] [-P path] [-p password] group\n" +msgstr "" +"Aufruf: %s [-D binddn] [-g gid [-o]] [-r] [-P Pfad] [-p Passwort] Gruppe\n" + +#: src/groupadd.c:62 +#, c-format +msgid "" +"%s - create a new group\n" +"\n" +msgstr "" + +#: src/groupadd.c:65 +msgid " -g gid Force the new groupid to be the given number\n" +msgstr "" + +#: src/groupadd.c:67 src/groupmod.c:70 src/useradd.c:80 src/usermod.c:79 +msgid " -o Allow duplicate (non-unique) UID\n" +msgstr "" + +#: src/groupadd.c:68 src/groupdel.c:67 src/groupmod.c:71 src/grpck.c:61 +#: src/pwck.c:61 src/useradd.c:81 src/userdel.c:71 src/usermod.c:84 +msgid " -P path Search passwd, shadow and group file in \"path\"\n" +msgstr "" + +#: src/groupadd.c:70 src/groupmod.c:73 src/useradd.c:83 src/usermod.c:86 +msgid " -p password Encrypted password as returned by crypt(3)\n" +msgstr "" + +#: src/groupadd.c:72 src/useradd.c:89 +msgid " -r, --system Create a system account\n" +msgstr "" + +#: src/groupadd.c:73 src/groupdel.c:69 src/useradd.c:91 src/userdel.c:73 +msgid " --service srv Add account to nameservice 'srv'\n" +msgstr " --service srv Füge den Account dem Dienst 'srv' hinzu\n" + +#: src/groupadd.c:75 src/groupmod.c:79 src/useradd.c:93 src/usermod.c:97 +msgid " --usage Give a short usage message\n" +msgstr " --usage Gib eine kurze Hilfe zum Aufruf aus\n" + +#: src/groupadd.c:77 src/groupdel.c:73 src/useradd.c:95 src/userdel.c:77 +msgid "Valid services for --service are: files, ldap\n" +msgstr "Gültige Dienste für --service sind: files, ldap\n" + +#: src/groupadd.c:257 +#, c-format +msgid "%s: Can't get unique gid in range %u - %u.\n" +msgstr "" + +#: src/groupadd.c:312 +#, c-format +msgid "%s: You are using an undocumented option (-f)!\n" +msgstr "" + +#: src/groupadd.c:320 src/groupadd.c:330 +#, c-format +msgid "%s: Invalid numeric argument `%s' for Group ID.\n" +msgstr "" + +#: src/groupadd.c:352 src/useradd.c:1328 src/usermod.c:925 +#, c-format +msgid "%s: Invalid characters in password `%s'.\n" +msgstr "" + +#: src/groupadd.c:398 +#, c-format +msgid "%s: You cannot use --gid and --preferred-gid at the same time.\n" +msgstr "" + +#: src/groupadd.c:419 src/groupdel.c:255 src/groupmod.c:339 src/useradd.c:1517 +#: src/userdel.c:485 src/usermod.c:1020 +#, c-format +msgid "%s: Too few arguments.\n" +msgstr "%s: Zu wenig Argumente.\n" + +#: src/groupadd.c:425 +#, c-format +msgid "%s: You cannot use -f with -o.\n" +msgstr "" + +#: src/groupadd.c:474 +#, c-format +msgid "%s: GID %u is not unique, using another one.\n" +msgstr "" + +#: src/groupadd.c:484 src/groupmod.c:398 +#, c-format +msgid "%s: GID %u is not unique.\n" +msgstr "" + +#: src/groupadd.c:495 src/groupmod.c:411 +#, c-format +msgid "%s: Invalid group name `%s'.\n" +msgstr "%s: Ungültiger Gruppen Name: \"%s\".\n" + +#: src/groupadd.c:513 src/groupmod.c:421 +#, c-format +msgid "%s: Group `%s' already exists.\n" +msgstr "" + +#: src/groupadd.c:555 +#, c-format +msgid "%s: Cannot add group to LDAP database without DN.\n" +msgstr "" + +#: src/groupadd.c:572 +#, c-format +msgid "%s: Group not added to LDAP database.\n" +msgstr "" + +#: src/groupadd.c:604 +#, c-format +msgid "%s: GROUPADD_CMD fails with exit code %d.\n" +msgstr "" + +#: src/groupdel.c:54 +#, c-format +msgid "Usage: %s [-D binddn] [-P path] group\n" +msgstr "" + +#: src/groupdel.c:61 +#, c-format +msgid "" +"%s - delete a group\n" +"\n" +msgstr "" + +#: src/groupdel.c:130 src/groupdel.c:147 +#, c-format +msgid "%s: GID `%u' is primary group of `%s'.\n" +msgstr "" + +#: src/groupdel.c:297 src/groupmod.c:381 src/useradd.c:214 src/usermod.c:179 +#, c-format +msgid "%s: Group `%s' not found in service `%s'.\n" +msgstr "" + +#: src/groupdel.c:310 +#, c-format +msgid "%s: Cannot remove user's primary group.\n" +msgstr "" + +#: src/groupdel.c:325 +#, c-format +msgid "%s: Cannot delete group from LDAP database without DN.\n" +msgstr "" + +#: src/groupdel.c:342 +#, c-format +msgid "%s: Group not deleted from LDAP database.\n" +msgstr "" + +#: src/groupdel.c:355 +#, c-format +msgid "%s: GROUPDEL_PRECMD fails with exit code %d.\n" +msgstr "" + +#: src/groupdel.c:373 +#, c-format +msgid "%s: Error deleting group `%s'.\n" +msgstr "" + +#: src/groupdel.c:397 +#, c-format +msgid "%s: GROUPDEL_POSTCMD fails with exit code %d.\n" +msgstr "" + +#: src/groupmod.c:54 +#, c-format +msgid "Usage: %s [-g gid [-o]] [-n new_name] group\n" +msgstr "Aufruf: %s [-g gid [-o]] [-n new_name] Gruppe\n" + +#: src/groupmod.c:61 +#, c-format +msgid "" +"%s - modify a group entry\n" +"\n" +msgstr "" + +#: src/groupmod.c:65 +msgid " -g gid Change the groupid to the given number\n" +msgstr "" + +#: src/groupmod.c:67 src/useradd.c:76 +msgid " -k skeldir Specify an alternative skel directory\n" +msgstr "" + +#: src/groupmod.c:69 +msgid " -n name Change group name.\n" +msgstr "" + +#: src/groupmod.c:75 +msgid " -A user Add the user to the group entry\n" +msgstr "" + +#: src/groupmod.c:76 +msgid " -R user Remove the user from the group entry\n" +msgstr "" + +#: src/groupmod.c:81 src/usermod.c:99 +msgid "Valid services are: files, ldap\n" +msgstr "Gültige Dienste sind: files, ldap\n" + +#: src/groupmod.c:245 +#, c-format +msgid "%s: invalid numeric argument `%s' for Group ID.\n" +msgstr "" + +#: src/groupmod.c:271 +#, c-format +msgid "%s: invalid characters in password `%s'.\n" +msgstr "" + +#: src/groupmod.c:467 +#, c-format +msgid "%s: Cannot modify group in LDAP database without DN.\n" +msgstr "" + +#: src/groupmod.c:485 +#, c-format +msgid "%s: Group not modified in LDAP database.\n" +msgstr "" + +#: src/grpck.c:51 +#, c-format +msgid "Usage: %s [-P path] [-q|-r]\n" +msgstr "" + +#: src/grpck.c:59 +#, c-format +msgid "" +"%s - check integrity of group file\n" +"\n" +msgstr "" + +#: src/grpck.c:63 src/pwck.c:63 +msgid " -q, --quiet Don't print warnings, only errors\n" +msgstr " -q, --quiet Keine Warnungen ausgeben, nur Fehler.\n" + +#: src/grpck.c:64 src/pwck.c:64 +msgid " -r, --read-only Run in read-only mode, don't make changes\n" +msgstr "" + +#: src/grpck.c:66 +msgid " -s, --sort Sort the group file, no checks are done\n" +msgstr "" + +#: src/grpck.c:78 src/pwck.c:78 +#, c-format +msgid "No\n" +msgstr "" + +#: src/grpck.c:222 src/pwck.c:229 +#, c-format +msgid "Checking `%s'\n" +msgstr "" + +#: src/grpck.c:337 src/grpck.c:384 +#, c-format +msgid "Invalid group entry.\n" +msgstr "Ungültiger Gruppen Eintrag.\n" + +#: src/grpck.c:338 src/pwck.c:346 src/pwck.c:616 +#, c-format +msgid "Delete empty line? " +msgstr "" + +#: src/grpck.c:356 +#, c-format +msgid "Invalid group entry with comment.\n" +msgstr "" + +#: src/grpck.c:357 src/grpck.c:385 src/grpck.c:402 src/grpck.c:418 +#: src/pwck.c:365 src/pwck.c:381 src/pwck.c:397 src/pwck.c:413 src/pwck.c:635 +#: src/pwck.c:650 src/pwck.c:666 src/pwck.c:682 src/pwck.c:700 +#, c-format +msgid "Delete line `%s'? " +msgstr "" + +#: src/grpck.c:401 +#, c-format +msgid "Invalid group name `%s'.\n" +msgstr "Ungültiger Gruppen Name: \"%s\".\n" + +#: src/grpck.c:417 +#, c-format +msgid "Duplicate group entry\n" +msgstr "" + +#: src/grpck.c:445 +#, c-format +msgid "Group `%s': unknown user `%s'\n" +msgstr "Gruppe \"%s\": Unbekannter Benutzer \"%s\".\n" + +#: src/grpck.c:451 +#, c-format +msgid "Group `%s': Duplicate user entry `%s', already primary group.\n" +msgstr "" + +#: src/grpck.c:812 src/pwck.c:1074 +#, c-format +msgid "%s: -s and -r are incompatibile.\n" +msgstr "" + +#: src/grpconv.c:33 src/grpunconv.c:51 src/pwconv.c:44 src/pwunconv.c:44 +#, c-format +msgid "Usage: %s\n" +msgstr "Aufruf: %s\n" + +#: src/grpconv.c:40 +#, c-format +msgid "" +"%s - convert to shadow group\n" +"\n" +msgstr "" + +#: src/grpconv.c:105 +#, c-format +msgid "%s: /etc/gshadow is not supported by this system.\n" +msgstr "" + +#: src/grpunconv.c:58 +#, c-format +msgid "" +"%s - convert from shadow groups\n" +"\n" +msgstr "" + +#: src/grpunconv.c:61 +msgid " -P path Search group and gshadow file in \"path\"\n" +msgstr "" + +#: src/grpunconv.c:219 +#, c-format +msgid "%s: No gshadow file found.\n" +msgstr "" + +#: src/grpunconv.c:243 src/pwconv.c:243 src/pwconv.c:267 src/pwunconv.c:190 +#, c-format +msgid "Cannot create backup file `%s': %m\n" +msgstr "Fehler beim Erzeugen der Sicherheitskopie \"%s\": %m\n" + +#: src/grpunconv.c:266 src/pwunconv.c:214 +#, c-format +msgid "Error while moving password for `%s'.\n" +msgstr "" + +#: src/newgrp.c:52 +#, c-format +msgid "Usage: %s [-l|-c command] [group]\n" +msgstr "" + +#: src/newgrp.c:60 +#, c-format +msgid "" +"%s - change the effective group id\n" +"\n" +msgstr "" + +#: src/newgrp.c:63 +msgid " -l, --login reinitialize environment as if logged in\n" +msgstr "" + +#: src/newgrp.c:65 +msgid " -c command Execute `command' with new group\n" +msgstr "" + +#: src/newgrp.c:161 +#, c-format +msgid "%s: -l and -c are exclusive\n" +msgstr "" + +#: src/newgrp.c:167 +#, c-format +msgid "%s: -c requires a group argument\n" +msgstr "" + +#: src/newgrp.c:174 +#, c-format +msgid "%s: Unknown user.\n" +msgstr "%s: Unbekannter Benutzer.\n" + +#: src/newgrp.c:195 +#, c-format +msgid "%s: bad group `%s'.\n" +msgstr "%s: Ungültige Gruppe: \"%s\".\n" + +#: src/newgrp.c:218 src/newgrp.c:313 +#, c-format +msgid "%s: calling getgroups failed: %s\n" +msgstr "" + +#: src/newgrp.c:271 +#, c-format +msgid "%s: failure to get group entry for %d.\n" +msgstr "" + +#: src/newgrp.c:281 +msgid "Password: " +msgstr "Passwort: " + +#: src/newgrp.c:284 +#, c-format +msgid "%s: password incorrect.\n" +msgstr "" + +#: src/newgrp.c:351 +#, c-format +msgid "%s: too many groups, not added.\n" +msgstr "" + +#: src/newgrp.c:358 +#, c-format +msgid "%s: calling setgroups failed: %s\n" +msgstr "" + +#: src/newgrp.c:365 src/newgrp.c:380 +#, c-format +msgid "%s: calling setgid failed: %s\n" +msgstr "" + +#: src/newgrp.c:374 +#, c-format +msgid "%s: calling initgroups failed: %s\n" +msgstr "" + +#: src/newgrp.c:389 +#, c-format +msgid "%s: calling setuid failed: %s\n" +msgstr "" + +#: src/newgrp.c:401 +#, c-format +msgid "Cannot change to directory %s: %s\n" +msgstr "" + +#: src/newgrp.c:439 +#, c-format +msgid "%s: execl failed: %s\n" +msgstr "" + +#: src/pam_rpasswd.c:219 src/pam_rpasswd.c:223 src/pam_rpasswd.c:330 +#: src/pam_rpasswd.c:334 src/rpasswd.c:211 src/rpasswd.c:214 src/rpasswd.c:297 +#: src/rpasswd.c:300 +#, c-format +msgid "error while reading request: %s" +msgstr "Fehler beim Lesen des Requests: %s" + +#: src/pam_rpasswd.c:220 src/rpasswd.c:212 src/rpasswd-client.c:58 +#: src/rpasswd-client.c:71 src/rpasswd-client.c:82 src/rpasswd-client.c:108 +#: src/rpasswd-client.c:121 +msgid "Peer has closed the TLS connection" +msgstr "" + +#: src/pam_rpasswd.c:235 src/pam_rpasswd.c:344 +#, c-format +msgid "error while allocating memory: %m" +msgstr "Fehler beim Allozieren von Speicher: %m" + +#: src/pam_rpasswd.c:242 src/rpasswd.c:223 src/rpasswd.c:312 +#, c-format +msgid "error while reading request data: %s" +msgstr "" + +#: src/pam_rpasswd.c:296 src/rpasswd.c:269 src/rpasswd.c:358 +#, c-format +msgid "Cannot send input back to server: %s\n" +msgstr "Kann die Eingabe nicht zum Server senden: %s\n" + +#: src/pam_rpasswd.c:331 src/rpasswd.c:298 +msgid "wrong data received" +msgstr "Falsche Daten erhalten" + +#: src/pam_rpasswd.c:352 +#, c-format +msgid "error while reading request data: %m" +msgstr "Fehler beim Lesen des Requests: %m" + +#: src/pam_rpasswd.c:403 +#, c-format +msgid "Cannot send input back to server: %m\n" +msgstr "Kann die Eingabe nicht zum Server senden: %m\n" + +#: src/pam_rpasswd.c:565 +#, c-format +msgid "SLP: Found Server on %s, port %s (%s)\n" +msgstr "SLP: Server auf %s, Port %s (%s) gefunden\n" + +#: src/pam_rpasswd.c:568 +#, c-format +msgid "SLP: Found Server on %s, port %s\n" +msgstr "SLP: Server auf %s, Port %s gefunden\n" + +#: src/pam_rpasswd.c:574 +#, c-format +msgid "SLP: Found Server on %s (%s)\n" +msgstr "SLP: Server auf %s (%s) gefunden\n" + +#: src/pam_rpasswd.c:577 +#, c-format +msgid "SLP: Found Server on %s\n" +msgstr "SLP: %s stellt den Dienst zur Verfügung\n" + +#: src/passwd.c:210 +#, c-format +msgid "Unable to initialize BioAPI framework, BioAPI error #:%x.\n" +msgstr "" + +#: src/passwd.c:220 +#, c-format +msgid "Unable to parse UUID (BioAPI error #:%x) : %s\n" +msgstr "" + +#: src/passwd.c:241 +#, c-format +msgid "Unable to load BioAPI BSP with UUID of %s, BioAPI error #%x.\n" +msgstr "" + +#: src/passwd.c:252 +#, c-format +msgid "" +"Unable to attach default device to BioAPI BSP with UUID of %s, BioAPI error #" +"%x.\n" +msgstr "" + +#: src/passwd.c:278 +#, c-format +msgid "Unable to create BIR database directory, \"%s\"\n" +msgstr "" + +#: src/passwd.c:291 +#, c-format +msgid "" +"Unable to create BSP-specific subdirectory in BIR database directory, \"%s" +"\"\n" +msgstr "" + +#: src/passwd.c:306 +#, c-format +msgid "" +"Unable to write biometric identification record, \"%s\": BioAPI error #%x\n" +msgstr "" + +#: src/passwd.c:318 +#, c-format +msgid "Unable to open BIR for writing, \"%s\"\n" +msgstr "Kann die BIR Datei nicht zum Schreiben öffnen, \"%s\"\n" + +#: src/passwd.c:349 +#, c-format +msgid "Unable to enroll user %s using BSP with UUID of %s, BioAPI error #%x.\n" +msgstr "" + +#: src/passwd.c:367 +#, c-format +msgid "Usage: %s [-f|-g|-s|-k[-q]] [account]\n" +msgstr "Aufruf: %s [-f|-g|-s|-k[-q]] [Benutzer]\n" + +#: src/passwd.c:368 +#, c-format +msgid " %s [-D binddn] [-n min] [-x max] [-w warn] [-i inact] account\n" +msgstr "" + +#: src/passwd.c:369 +#, c-format +msgid " %s {-l|-u|-d|-S[-a]|-e} account\n" +msgstr "" + +#: src/passwd.c:371 +#, c-format +msgid " %s --bioapi [account]\n" +msgstr "" + +#: src/passwd.c:373 +#, c-format +msgid " %s --stdin [account]\n" +msgstr "" + +#: src/passwd.c:380 src/rpasswd.c:93 src/rpasswdd.c:114 +#, c-format +msgid "" +"%s - change password information\n" +"\n" +msgstr "" + +#: src/passwd.c:382 +msgid " -f Change the finger (GECOS) information\n" +msgstr "" + +#: src/passwd.c:384 +msgid " -s Change the login shell\n" +msgstr "" + +#: src/passwd.c:385 +msgid " -g Change the group password\n" +msgstr "" + +#: src/passwd.c:386 +msgid " -k Change the password only if expired\n" +msgstr "" + +#: src/passwd.c:387 +msgid " -q Try to be quiet\n" +msgstr "" + +#: src/passwd.c:388 +msgid " -S Show the password attributes\n" +msgstr "" + +#: src/passwd.c:389 +msgid " -a Only with -S, show for all accounts\n" +msgstr "" + +#: src/passwd.c:390 +msgid " -d Delete the password for the named account\n" +msgstr "" + +#: src/passwd.c:391 +msgid " -l Locks the password entry for \"account\"\n" +msgstr "" + +#: src/passwd.c:392 +msgid " -u Try to unlock the password entry for \"account\"\n" +msgstr "" + +#: src/passwd.c:393 +msgid " -e Force the user to change password at next login\n" +msgstr "" + +#: src/passwd.c:394 +msgid " -n min Set minimum field for \"account\"\n" +msgstr "" + +#: src/passwd.c:395 +msgid " -x max Set maximum field for \"account\"\n" +msgstr "" + +#: src/passwd.c:396 +msgid " -w warn Set warn field for \"account\"\n" +msgstr "" + +#: src/passwd.c:398 +msgid " --bioapi Authentication token is handled via BioAPI\n" +msgstr "" + +#: src/passwd.c:405 +msgid " --stdin Read new password from stdin (root only)\n" +msgstr "" + +#: src/passwd.c:597 +#, c-format +msgid "%s: User argument missing\n" +msgstr "%s: Benutzer-Argument fehlt\n" + +#: src/passwd.c:690 +#, c-format +msgid "%s: User `%s' is not known to service `%s'\n" +msgstr "%s: Der Benutzer \"%s\" ist dem Dienst \"%s\" nicht bekannt\n" + +#: src/passwd.c:715 +#, c-format +msgid "%s: %s is not authorized to change the password of %s\n" +msgstr "%s: %s isst nicht berechtigt das Passwort für %s zu ändern\n" + +#: src/passwd.c:744 +#, c-format +msgid "%s: Permission denied\n" +msgstr "%s: Erlaubnis verweigert\n" + +#: src/passwd.c:753 +#, c-format +msgid "You cannot change the shadow data for `%s'.\n" +msgstr "" + +#: src/passwd.c:781 +#, c-format +msgid "%s: -P flag not supported in this mode!\n" +msgstr "" + +#: src/passwd.c:811 +#, c-format +msgid "Changing password for %s.\n" +msgstr "Ändere Passwort für %s.\n" + +#: src/passwd.c:960 +#, c-format +msgid "Error while changing password expiry information.\n" +msgstr "" + +#: src/passwd.c:962 +#, c-format +msgid "Error while changing password.\n" +msgstr "Beim ändern des Passworts ist ein Fehler aufgetreten.\n" + +#: src/passwd.c:974 +#, c-format +msgid "Password expiry information changed.\n" +msgstr "" + +#: src/passwd.c:976 +#, c-format +msgid "Password deleted.\n" +msgstr "Passwort gelöscht.\n" + +#: src/passwd.c:1038 +#, c-format +msgid "passwd: Cannot execute %s" +msgstr "" + +#: src/pwck.c:51 +#, c-format +msgid "Usage: %s [-P path] [-q|-r|-s]\n" +msgstr "" + +#: src/pwck.c:59 +#, c-format +msgid "" +"%s - check integrity of password files\n" +"\n" +msgstr "" + +#: src/pwck.c:66 +msgid " -s, --sort Sort the password file, no checks are done\n" +msgstr "" + +#: src/pwck.c:345 src/pwck.c:380 +#, c-format +msgid "Invalid password entry.\n" +msgstr "Ungültiger Passwort Eintrag.\n" + +#: src/pwck.c:364 +#, c-format +msgid "Invalid password entry with comment.\n" +msgstr "" + +#: src/pwck.c:396 src/pwck.c:665 +#, c-format +msgid "Invalid account name `%s'.\n" +msgstr "Ungültiger Benutzer Name: \"%s\".\n" + +#: src/pwck.c:412 +#, c-format +msgid "Duplicate password entry\n" +msgstr "" + +#: src/pwck.c:431 +#, c-format +msgid "User `%s': unknown group `%u'\n" +msgstr "Benutzer \"%s\": Unbekannte Gruppe \"%u\"\n" + +#: src/pwck.c:440 +#, c-format +msgid "User `%s': directory `%s' does not exist.\n" +msgstr "" + +#: src/pwck.c:449 +#, c-format +msgid "User `%s': shell `%s' is not executable.\n" +msgstr "" + +#: src/pwck.c:506 +#, c-format +msgid "Checking `%s'.\n" +msgstr "" + +#: src/pwck.c:615 src/pwck.c:649 +#, c-format +msgid "Invalid shadow entry.\n" +msgstr "Ungültiger Shadow Eintrag.\n" + +#: src/pwck.c:634 +#, c-format +msgid "Invalid shadow entry with comment.\n" +msgstr "" + +#: src/pwck.c:681 +#, c-format +msgid "Duplicate shadow entry\n" +msgstr "" + +#: src/pwck.c:699 +#, c-format +msgid "No matching password file entry.\n" +msgstr "" + +#: src/pwck.c:714 +#, c-format +msgid "User `%s': last password change in the future.\n" +msgstr "" + +#: src/pwconv.c:51 +#, c-format +msgid "" +"%s - convert to shadow account\n" +"\n" +msgstr "" + +#: src/pwconv.c:307 +#, c-format +msgid "Orphaned entry '%s' removed from shadow database.\n" +msgstr "" + +#: src/pwconv.c:316 +#, c-format +msgid "Error while deleting `%s' shadow account.\n" +msgstr "" + +#: src/pwconv.c:343 +#, fuzzy, c-format +msgid "%s: Error trying to get data for `%s'\n" +msgstr "%s: Kann den Kontext für \"%s\" nicht bekommen" + +#: src/pwconv.c:365 src/pwconv.c:388 src/pwconv.c:419 src/pwconv.c:435 +#, fuzzy, c-format +msgid "Error while converting `%s' to shadow account.\n" +msgstr "Fehler beim Schliessen der Datei \"%s\": %m\n" + +#: src/pwconv.c:466 +#, c-format +msgid "Error while renaming temporary shadow file: %m\n" +msgstr "Fehler beim Umbennen der temporären shadow Datei: %m\n" + +#: src/pwconv.c:491 +#, c-format +msgid "Error while renaming temporary password file: %m\n" +msgstr "Fehler beim Umbennen der temporären Passwort-Datei: %m\n" + +#: src/pwunconv.c:51 +#, fuzzy, c-format +msgid "" +"%s - convert from shadow account\n" +"\n" +msgstr "Dieses System unterstützt keine Shadow-Accounts.\n" + +#: src/pwunconv.c:166 +#, c-format +msgid "%s: No shadow file found.\n" +msgstr "" + +#: src/rpasswd.c:85 +#, c-format +msgid "Usage: %s [-4|-6][-a][-f config-file][-h hostname][-p port][-v][name]\n" +msgstr "" + +#: src/rpasswd.c:95 +msgid " -4 Use IPv4 only\n" +msgstr "" + +#: src/rpasswd.c:96 +msgid " -6 Use IPv6 only\n" +msgstr "" + +#: src/rpasswd.c:98 +msgid " -a Admin mode, special admin password is required\n" +msgstr "" + +#: src/rpasswd.c:100 +msgid " -f config-file Specify a different config file\n" +msgstr "" + +#: src/rpasswd.c:101 +msgid " -h hostname Specify the remote server\n" +msgstr "" + +#: src/rpasswd.c:102 +msgid " -p port Specify port remote server is listening on\n" +msgstr "" + +#: src/rpasswd.c:104 +msgid " -r level Specify level of SSL certificate checks\n" +msgstr "" + +#: src/rpasswd.c:107 +msgid " --no-slp Don't use SLP to find a server\n" +msgstr "" + +#: src/rpasswd.c:109 +msgid " -v, --verbose Be verbose, print SSL connection data\n" +msgstr "" + +#: src/rpasswd.c:150 +#, c-format +msgid "Warning: cannot turn echo off\n" +msgstr "" + +#: src/rpasswd.c:515 +#, c-format +msgid "SLP: Found Server on %s, port %s" +msgstr "SLP: Server auf %s, Port %s gefunden" + +#: src/rpasswd.c:518 +#, c-format +msgid "SLP: Found Server on %s" +msgstr "SLP: %s stellt den Dienst zur Verfügung" + +#: src/rpasswd.c:554 +#, c-format +msgid "Go away, you do not exist!" +msgstr "" + +#: src/rpasswd.c:568 +#, c-format +msgid "No server specified\n" +msgstr "" + +#: src/rpasswd-client.c:57 src/rpasswd-client.c:60 +#, fuzzy, c-format +msgid "error while sending start request: %s\n" +msgstr "Fehler beim Lesen des Requests: %s" + +#: src/rpasswd-client.c:70 src/rpasswd-client.c:73 +#, fuzzy, c-format +msgid "error while sending locale data: %s\n" +msgstr "Fehler beim Lesen des Requests: %s" + +#: src/rpasswd-client.c:81 src/rpasswd-client.c:84 +#, fuzzy, c-format +msgid "error while sending username: %s\n" +msgstr "Fehler beim Lesen des Requests: %s" + +#: src/rpasswd-client.c:107 src/rpasswd-client.c:110 src/rpasswd-client.c:120 +#: src/rpasswd-client.c:123 +#, fuzzy, c-format +msgid "error while sending string: %s\n" +msgstr "Fehler beim Lesen des Requests: %s" + +#: src/rpasswd-client.c:318 +msgid "Searching a server...\n" +msgstr "" + +#: src/rpasswd-client.c:323 +#, c-format +msgid "Error opening SLP handle: %i.\n" +msgstr "" + +#: src/rpasswd-client.c:334 +msgid "No service found with SLP.\n" +msgstr "" + +#: src/rpasswd-client.c:353 +#, fuzzy +msgid "Error while searching for SLP description.\n" +msgstr "Fehler beim Parsen der Optionen.\n" + +#: src/rpasswd-client.c:372 +#, c-format +msgid "" +"\n" +"Please select a server:\n" +msgstr "" + +#: src/rpasswd-client.c:378 +#, c-format +msgid " (port %s)" +msgstr "" + +#: src/rpasswd-client.c:388 +#, c-format +msgid "Enter number of choice [1-%d]: " +msgstr "" + +#: src/rpasswd-client.c:458 +msgid "parsing config file" +msgstr "" + +#: src/rpasswd-client.c:501 src/rpasswd-client.c:504 +msgid "Trying entry:" +msgstr "" + +#: src/rpasswd-client.c:543 +#, c-format +msgid "Entry \"%s\" is not valid!\n" +msgstr "" + +#: src/rpasswd-client.c:547 +#, c-format +msgid "Entry \"%s\" is not valid, ignored!\n" +msgstr "" + +#: src/rpasswd-client.c:560 +msgid "Bad entries found.\n" +msgstr "" + +#: src/rpasswd-client.c:565 +msgid "No entry found.\n" +msgstr "" + +#: src/rpasswd-client.c:575 +msgid "No entry found." +msgstr "" + +#: src/rpasswd-client.c:609 +msgid "Hostname or service not known for specified protocol\n" +msgstr "" + +#: src/rpasswd-client.c:623 +#, fuzzy, c-format +msgid "bad port: %s\n" +msgstr "Kann keinen neuen Sub-Prozess starten: %s\n" + +#: src/rpasswd-client.c:648 src/rpasswd-client.c:657 +#, c-format +msgid "Trying %s port %d...\n" +msgstr "" + +#: src/rpasswd-client.c:663 +#, c-format +msgid "Trying %s...\n" +msgstr "" + +#: src/rpasswd-client.c:677 +#, c-format +msgid "connect to address %s: %s\n" +msgstr "" + +#: src/rpasswd-client.c:732 src/rpasswd-client.c:1028 +msgid "Server certificate info:\n" +msgstr "" + +#: src/rpasswd-client.c:742 +#, c-format +msgid " Certificate is valid since: %s" +msgstr "" + +#: src/rpasswd-client.c:744 +#, c-format +msgid " Certificate expires: %s" +msgstr "" + +#: src/rpasswd-client.c:750 +#, c-format +msgid " Certificate public key: %s" +msgstr "" + +#: src/rpasswd-client.c:756 +#, c-format +msgid " Certificate version: #%d\n" +msgstr "" + +#: src/rpasswd-client.c:761 src/rpasswd-client.c:1034 +#, c-format +msgid " DN: %s\n" +msgstr "" + +#: src/rpasswd-client.c:765 src/rpasswd-client.c:1041 +#, c-format +msgid " Issuer's DN: %s\n" +msgstr "" + +#: src/rpasswd-client.c:846 +#, fuzzy, c-format +msgid "Handshake failed: %s\n" +msgstr "waitpid (%d) fehlgeschlagen: %s\n" + +#: src/rpasswd-client.c:869 +#, c-format +msgid "TLS certificate error: %s\n" +msgstr "" + +#: src/rpasswd-client.c:880 +#, c-format +msgid "" +"%s connection using %s-%s (%s)\n" +"\n" +msgstr "" + +#: src/rpasswd-client.c:898 +msgid "TLS authentication error: server certificate issuer is unknown.\n" +msgstr "" + +#: src/rpasswd-client.c:906 +msgid "TLS authentication error: server certificate is NOT trusted.\n" +msgstr "" + +#: src/rpasswd-client.c:917 +msgid "TLS authentication error: server certificate not yet activated.\n" +msgstr "" + +#: src/rpasswd-client.c:925 +msgid "TLS authentication error: server certificate expired.\n" +msgstr "" + +#: src/rpasswd-client.c:960 +#, fuzzy, c-format +msgid "error loading default verify locations: %s\n" +msgstr "Kann den default Sicherheits-Kontext nicht bekommen: %s\n" + +#: src/rpasswd-client.c:968 +#, fuzzy, c-format +msgid "error setting default verify path: %s\n" +msgstr "Kann den default Sicherheits-Kontext nicht bekommen: %s\n" + +#: src/rpasswd-client.c:1003 +msgid "Unable to get certificate from peer.\n" +msgstr "" + +#: src/rpasswd-client.c:1017 +#, c-format +msgid "" +"SSL connection using %s\n" +"\n" +msgstr "" + +#: src/rpasswd-client.c:1022 +msgid "Server does not have a certificate?\n" +msgstr "" + +#: src/rpasswdd.c:102 +#, c-format +msgid "" +"Usage: %s [-4] [-6] [-d] [-c certificate] [-k privatekey] [-p port]\n" +" [--slp [--slp-timeout timeout] [--slp-descr description]]\n" +msgstr "" + +#: src/rpasswdd.c:105 +#, fuzzy, c-format +msgid "Usage: %s [-4] [-6] [-d] [-c certificate] [-k privatekey] [-p port]\n" +msgstr "" +"Aufruf: %s [-D binddn] [-g gid [-o]] [-r] [-P Pfad] [-p Passwort] Gruppe\n" + +#: src/rpasswdd.c:116 +msgid " -4 Use IPv4\n" +msgstr "" + +#: src/rpasswdd.c:117 +msgid " -6 Use IPv6\n" +msgstr "" + +#: src/rpasswdd.c:118 +msgid " -c certificate Specify alternate certificate file\n" +msgstr "" + +#: src/rpasswdd.c:119 +msgid " -k privatekey Specify alternate file with private key\n" +msgstr "" + +#: src/rpasswdd.c:121 +msgid " -d Run in debug mode\n" +msgstr "" + +#: src/rpasswdd.c:122 +msgid " -p port Port on which the server should listen\n" +msgstr "" + +#: src/rpasswdd.c:125 +msgid " --slp Register at local SLP server\n" +msgstr "" + +#: src/rpasswdd.c:126 +msgid " --slp-timeout Set timeout for re-registration\n" +msgstr "" + +#: src/rpasswdd.c:127 +msgid " --slp-descr Set a description shown to SLP clients\n" +msgstr "" + +#: src/rpasswdd.c:710 +#, c-format +msgid "Please authenticate as %s on %s" +msgstr "" + +#: src/rpasswdd.c:749 +#, c-format +msgid "" +"\n" +"Now enter the new password for %s" +msgstr "" + +#: src/rpasswdd.c:770 +#, c-format +msgid "setresuid failed on server: %s" +msgstr "" + +#: src/rpasswdd.c:813 +msgid "Password not changed" +msgstr "Passwort wurde nicht geändert" + +#: src/rpasswdd.c:816 +msgid "Password changed" +msgstr "Passwort geändert" + +#: src/rpasswdd.c:1349 +msgid "already running" +msgstr "" + +#: src/useradd.c:54 src/usermod.c:55 +#, c-format +msgid "Usage: %s ...\n" +msgstr "Aufruf: %s ...\n" + +#: src/useradd.c:61 +#, fuzzy, c-format +msgid "" +"%s - create a new user\n" +"\n" +msgstr "" +"%s - ändere Login-Shell\n" +"\n" + +#: src/useradd.c:63 src/usermod.c:64 +msgid " -c comment Set the GECOS field for the new account\n" +msgstr "" + +#: src/useradd.c:65 +msgid " --show-defaults Print default values\n" +msgstr "" + +#: src/useradd.c:66 +msgid " --save-defaults Save modified default values\n" +msgstr "" + +#: src/useradd.c:68 src/usermod.c:69 +msgid " -d homedir Home directory for the new user\n" +msgstr "" + +#: src/useradd.c:69 src/usermod.c:70 +msgid " -e expire Date on which the new account will be disabled\n" +msgstr "" + +#: src/useradd.c:71 src/usermod.c:72 +msgid "" +" -f inactive Days after a password expires until account is disabled\n" +msgstr "" + +#: src/useradd.c:73 src/usermod.c:74 +msgid " -G group,... List of supplementary groups\n" +msgstr "" + +#: src/useradd.c:74 src/usermod.c:75 +msgid " -g gid Name/number of the users primary group\n" +msgstr "" + +#: src/useradd.c:78 +msgid " -m Create home directory for the new user\n" +msgstr "" + +#: src/useradd.c:85 +msgid " -u uid Force the new userid to be the given number\n" +msgstr "" + +#: src/useradd.c:87 +msgid " -U umask Umask value used for creating home directory\n" +msgstr "" + +#: src/useradd.c:90 src/usermod.c:88 +msgid " -s shell Name of the user's login shell\n" +msgstr " -s shell Benutze 'shell' als neue Login-Shell\n" + +#: src/useradd.c:186 +#, fuzzy, c-format +msgid "%s: Invalid numeric argument `%s' for group ID.\n" +msgstr "%s: Ungültiger Gruppen Name: \"%s\".\n" + +#: src/useradd.c:196 src/usermod.c:160 +#, c-format +msgid "%s: Group `%u' not found in service `%s'.\n" +msgstr "%s: Die Gruppe \"%u\" ist dem Dienst \"%s\" nicht bekannt.\n" + +#: src/useradd.c:202 src/usermod.c:166 +#, c-format +msgid "%s: Unknown group `%u'.\n" +msgstr "%s: Unbekannte Gruppe \"%u\".\n" + +#: src/useradd.c:301 +#, fuzzy, c-format +msgid "%s: Unknown group `%s' in %s.\n" +msgstr "%s: Unbekannte Gruppe \"%s\".\n" + +#: src/useradd.c:316 +#, fuzzy, c-format +msgid "%s: Invalid home directory `%s' in %s.\n" +msgstr "%s: Ungültige private Telefon Nummer: \"%s\".\n" + +#: src/useradd.c:335 +#, c-format +msgid "%s: Invalid numeric argument `%s' for `INACTIVE' in %s.\n" +msgstr "" + +#: src/useradd.c:358 +#, fuzzy, c-format +msgid "%s: Expiredate `%s' is no date and no integer value >= -1 in %s.\n" +msgstr "Die Eingabe ist kein Datum und kein Integer-Wert >= -1\n" + +#: src/useradd.c:374 +#, fuzzy, c-format +msgid "%s: Invalid shell `%s' in %s.\n" +msgstr "%s: Ungültiger Name: \"%s\"\n" + +#: src/useradd.c:388 +#, c-format +msgid "%s: Skel directory \"%s\" in %s does not exist.\n" +msgstr "" + +#: src/useradd.c:449 +#, c-format +msgid "%s: Invalid value `%s' for option CREATE_MAIL_SPOOL in %s.\n" +msgstr "" + +#: src/useradd.c:465 +#, fuzzy, c-format +msgid "%s: Invalid numeric argument `%s' for `UMASK' in %s.\n" +msgstr "%s: Ungültiger Gruppen Name: \"%s\".\n" + +#: src/useradd.c:913 +#, c-format +msgid "%s: Can't get unique uid in range %u - %u.\n" +msgstr "" + +#: src/useradd.c:987 +#, fuzzy, c-format +msgid "%s: Can't stat `%s': %m\n" +msgstr "%s: stat()-Aufruf für \"%s\" fehlgeschlagen: %m\n" + +#: src/useradd.c:1018 +#, c-format +msgid "" +"%s: No group named \"mail\" exists, creating mail spool with mode 0600.\n" +msgstr "" + +#: src/useradd.c:1026 +#, fuzzy, c-format +msgid "%s: Can't create mail spool for user %s.\n" +msgstr "%s: Kann Ihr Benutzer-Login nicht feststellen.\n" + +#: src/useradd.c:1095 src/usermod.c:520 +#, fuzzy, c-format +msgid "%s: Cannot create directory `%s'.\n" +msgstr "Das Verzeichnis \"%s\" kann nicht angelegt werden: %s\n" + +#: src/useradd.c:1100 src/usermod.c:525 src/usermod.c:549 +#, c-format +msgid "%s: Warning: chown on `%s' failed: %m\n" +msgstr "" + +#: src/useradd.c:1103 src/usermod.c:528 +#, c-format +msgid "%s: Warning: chmod on `%s' failed: %m\n" +msgstr "" + +#: src/useradd.c:1126 +#, c-format +msgid "%s: Copying of skel directory failed.\n" +msgstr "" + +#: src/useradd.c:1136 +#, c-format +msgid "%s: Warning: home directory already exists, not modifying it.\n" +msgstr "" + +#: src/useradd.c:1197 +#, c-format +msgid "%s: Reading of `%s' was not successful.\n" +msgstr "" + +#: src/useradd.c:1226 src/usermod.c:798 +#, fuzzy, c-format +msgid "%s: Invalid comment `%s'.\n" +msgstr "%s: Ungültiger Name: \"%s\"\n" + +#: src/useradd.c:1243 src/usermod.c:812 +#, fuzzy, c-format +msgid "%s: Invalid home directory `%s'.\n" +msgstr "%s: Ungültige private Telefon Nummer: \"%s\".\n" + +#: src/useradd.c:1264 src/usermod.c:836 +#, fuzzy, c-format +msgid "%s: Expiredate `%s' is no date and no integer value >= -1.\n" +msgstr "Die Eingabe ist kein Datum und kein Integer-Wert >= -1\n" + +#: src/useradd.c:1280 +#, fuzzy, c-format +msgid "%s: Invalid numeric argument `%s' for `-f'.\n" +msgstr "%s: Ungültiger Gruppen Name: \"%s\".\n" + +#: src/useradd.c:1299 +#, c-format +msgid "%s: Skel directory `%s' does not exist.\n" +msgstr "" + +#: src/useradd.c:1341 src/usermod.c:935 +#, fuzzy, c-format +msgid "%s: Invalid shell `%s'.\n" +msgstr "%s: Ungültiger Name: \"%s\"\n" + +#: src/useradd.c:1350 src/useradd.c:1374 +#, fuzzy, c-format +msgid "%s: Invalid numeric argument `%s' for User ID.\n" +msgstr "%s: Ungültiger Gruppen Name: \"%s\".\n" + +#: src/useradd.c:1364 +#, fuzzy, c-format +msgid "%s: Invalid numeric argument `%s' for `-U'.\n" +msgstr "%s: Ungültiger Gruppen Name: \"%s\".\n" + +#: src/useradd.c:1425 +#, c-format +msgid "%s: You cannot use --uid and --preferred-uid at the same time.\n" +msgstr "" + +#: src/useradd.c:1576 +#, c-format +msgid "%s: Writing of `%s' was not successful.\n" +msgstr "" + +#: src/useradd.c:1604 src/usermod.c:1335 +#, fuzzy, c-format +msgid "%s: UID %u is not unique.\n" +msgstr "%s: '%c' ist kein erlaubtes Zeichen.\n" + +#: src/useradd.c:1616 src/usermod.c:1349 +#, fuzzy, c-format +msgid "%s: Invalid account name `%s'.\n" +msgstr "%s: Ungültiger Gruppen Name: \"%s\".\n" + +#: src/useradd.c:1637 src/usermod.c:1360 +#, c-format +msgid "%s: Account `%s' already exists.\n" +msgstr "" + +#: src/useradd.c:1721 +#, c-format +msgid "%s: Error: Cannot clear old faillog entry: %s\n" +msgstr "" + +#: src/useradd.c:1734 +#, c-format +msgid "%s: Error: Cannot clear old lastlog entry: %s\n" +msgstr "" + +#: src/useradd.c:1748 +#, c-format +msgid "%s: Cannot add user to LDAP database without DN.\n" +msgstr "" + +#: src/useradd.c:1765 +#, c-format +msgid "%s: User not added to LDAP database.\n" +msgstr "" + +#: src/useradd.c:1793 src/usermod.c:397 src/usermod.c:635 src/usermod.c:1563 +#, c-format +msgid "%s: ERROR: Cannot find group `%s' anymore!\n" +msgstr "" + +#: src/useradd.c:1797 src/usermod.c:1567 src/usermod.c:1667 +#, fuzzy, c-format +msgid "%s: Cannot find group `%s' in service `%s', ignored.\n" +msgstr "%s: Die Gruppe \"%s\" ist dem Dienst \"%s\" nicht bekannt.\n" + +#: src/useradd.c:1813 src/usermod.c:1583 +#, c-format +msgid "%s: Cannot add user to groups stored in LDAP database without DN.\n" +msgstr "" + +#: src/useradd.c:1821 src/useradd.c:1839 src/useradd.c:1856 src/usermod.c:1591 +#: src/usermod.c:1610 src/usermod.c:1628 +#, fuzzy, c-format +msgid "%s: User not added to LDAP group `%s'.\n" +msgstr "%s: Ungültige Gruppe: \"%s\".\n" + +#: src/useradd.c:1908 +#, c-format +msgid "%s: USERADD_CMD fails with exit code %d.\n" +msgstr "" + +#: src/userdel.c:54 +#, fuzzy, c-format +msgid "Usage: %s [-D binddn] [-P path] [-r [-f]] user\n" +msgstr "" +"Aufruf: %s [-D binddn] [-g gid [-o]] [-r] [-P Pfad] [-p Passwort] Gruppe\n" + +#: src/userdel.c:61 +#, c-format +msgid "" +"%s - delete a user and related files\n" +"\n" +msgstr "" + +#: src/userdel.c:63 +msgid " -r Remove home directory and mail spool\n" +msgstr "" + +#: src/userdel.c:65 +msgid " -f Force removal of files, even if not owned by user\n" +msgstr "" + +#: src/userdel.c:175 src/userdel.c:194 +#, fuzzy, c-format +msgid "%s: directory `%s' is in use by `%s'.\n" +msgstr "%s: Der Benutzer \"%s\" ist dem Dienst \"%s\" nicht bekannt.\n" + +#: src/userdel.c:262 src/usermod.c:1663 +#, c-format +msgid "%s: ERROR: cannot find group `%s' anymore!\n" +msgstr "" + +#: src/userdel.c:279 src/usermod.c:652 src/usermod.c:1683 +#, c-format +msgid "" +"%s: Cannot remove user from groups stored in LDAP database without DN.\n" +msgstr "" + +#: src/userdel.c:287 src/userdel.c:306 src/usermod.c:664 src/usermod.c:687 +#: src/usermod.c:1691 src/usermod.c:1710 src/usermod.c:1728 +#, c-format +msgid "%s: User not removed from LDAP group `%s'.\n" +msgstr "" + +#: src/userdel.c:327 src/usermod.c:709 +#, fuzzy, c-format +msgid "%s: User not removed from group `%s'.\n" +msgstr "%s: Unbekannte Gruppe \"%s\".\n" + +#: src/userdel.c:537 +#, c-format +msgid "%s: account `%s' is currently in use.\n" +msgstr "" + +#: src/userdel.c:559 +#, c-format +msgid "%s: USERDEL_PRECMD fails with exit code %d.\n" +msgstr "" + +#: src/userdel.c:587 src/userdel.c:605 +#, fuzzy, c-format +msgid "%s: `%s' is not owned by `%s', not removed.\n" +msgstr "%s: Der Benutzer \"%s\" ist dem Dienst \"%s\" nicht bekannt.\n" + +#: src/userdel.c:593 src/userdel.c:615 +#, fuzzy, c-format +msgid "%s: warning: can't remove `%s': %s" +msgstr "Die Datei \"%s\" kann nicht entfernt werden: %s\n" + +#: src/userdel.c:625 +#, c-format +msgid "%s: directory `%s' not removed.\n" +msgstr "" + +#: src/userdel.c:637 +#, fuzzy, c-format +msgid "%s: error deleting user `%s'.\n" +msgstr "%s: Unbekannter Benutzer \"%s\".\n" + +#: src/userdel.c:659 +#, c-format +msgid "%s: USERDEL_POSTCMD fails with exit code %d.\n" +msgstr "" + +#: src/usermod.c:62 +#, c-format +msgid "" +"%s - modify a user account\n" +"\n" +msgstr "" + +#: src/usermod.c:77 +msgid " -l login Change login name.\n" +msgstr "" + +#: src/usermod.c:78 +msgid " -m Move home directory to the new path\n" +msgstr "" + +#: src/usermod.c:80 +msgid " -A group,... List of groups the user should be added to\n" +msgstr "" + +#: src/usermod.c:82 +msgid " -R group,... List of groups the user should be removed from\n" +msgstr "" + +#: src/usermod.c:89 +msgid " -u uid Change the userid to the given number\n" +msgstr "" + +#: src/usermod.c:92 +msgid " -L Locks the password entry for \"user\"\n" +msgstr "" + +#: src/usermod.c:94 +msgid " -U Try to unlock the password entry for \"user\"\n" +msgstr "" + +#: src/usermod.c:149 src/usermod.c:853 src/usermod.c:948 +#, fuzzy, c-format +msgid "%s: Invalid numeric argument `%s'.\n" +msgstr "%s: Ungültiger Name: \"%s\"\n" + +#: src/usermod.c:416 +#, fuzzy, c-format +msgid "%s: User not renamed in LDAP group `%s'.\n" +msgstr "%s: Unbekannte Gruppe \"%s\".\n" + +#: src/usermod.c:433 +#, fuzzy, c-format +msgid "%s: User not renamed from LDAP group `%s'.\n" +msgstr "%s: Unbekannte Gruppe \"%s\".\n" + +#: src/usermod.c:455 +#, fuzzy, c-format +msgid "%s: User not renamed in group `%s'.\n" +msgstr "%s: Unbekannte Gruppe \"%s\".\n" + +#: src/usermod.c:558 +#, fuzzy, c-format +msgid "%s: Cannot copy directory %s to %s.\n" +msgstr "Kann das Verzeichnis \"%s\" nicht löschen: %s\n" + +#: src/usermod.c:565 +#, fuzzy, c-format +msgid "%s: Cannot rename directory %s to %s.\n" +msgstr "Kann das Verzeichnis \"%s\" nicht löschen: %s\n" + +#: src/usermod.c:1067 +#, fuzzy, c-format +msgid "%s: Account `%s' does not exist.\n" +msgstr "Dieser Account hat keine Shadow-Informationen.\n" + +#: src/usermod.c:1175 src/usermod.c:1240 +#, c-format +msgid "%s: `%s' is primary group name.\n" +msgstr "" + +#: src/usermod.c:1323 +#, c-format +msgid "%s: Account `%s' is currently in use.\n" +msgstr "" + +#: src/usermod.c:1418 +#, c-format +msgid "%s: Shadow passwords required for -e and -f.\n" +msgstr "" + +#: src/usermod.c:1443 +#, c-format +msgid "%s: Cannot modify user in LDAP database without DN.\n" +msgstr "" + +#: src/usermod.c:1461 +#, c-format +msgid "%s: User not modified in LDAP database.\n" +msgstr "" + +#: src/usermod.c:1780 src/usermod.c:1791 src/usermod.c:1817 +#, c-format +msgid "%s: Error: Cannot copy faillog entry: %s\n" +msgstr "" + +#: src/usermod.c:1806 +#, c-format +msgid "%s: Error: Cannot copy lastlog entry: %s\n" +msgstr "" + +#: src/vipw.c:58 +#, fuzzy, c-format +msgid "Usage: %s [-g|-p|-s]\n" +msgstr "Aufruf: %s [-f]\n" + +#: src/vipw.c:66 +#, c-format +msgid "" +"%s - edit the password, group or shadow file\n" +"\n" +msgstr "" + +#: src/vipw.c:69 +msgid " -g, --group Edit the /etc/group file\n" +msgstr "" + +#: src/vipw.c:70 +msgid " -p, --passwd Edit the /etc/passwd file\n" +msgstr "" + +#: src/vipw.c:71 +msgid " -s, --shadow Edit the /etc/shadow file\n" +msgstr "" + +#: src/vipw.c:164 +#, fuzzy, c-format +msgid "Cannot lock `%s': already locked.\n" +msgstr "" +"Bekomme keinen exklusiven Zugriff auf die Gruppen-Datei: Bereits gesperrt.\n" + +#: src/vipw.c:278 +#, fuzzy, c-format +msgid "%s: no changes made\n" +msgstr "Shell nicht geändert.\n" + +#: src/vipw.c:318 +#, fuzzy, c-format +msgid "Warning: cannot create backup file: %m\n" +msgstr "" +"Warning: Es konnte keine Sicherheitskopie der Datei \"%s\" angelegt werden: %" +"m\n" + +#, fuzzy +#~ msgid "cannot open socket: %s" +#~ msgstr "Die Datei \"%s\" kann nicht kopiert werden: %s\n" + +#~ msgid "User %s: %s" +#~ msgstr "Benutzer %s: %s" + +#, fuzzy +#~ msgid "error while reading request locale: %s" +#~ msgstr "Fehler beim Lesen des Requests: %s" + +#, fuzzy +#~ msgid "error while reading request username: %s" +#~ msgstr "Fehler beim Lesen des Requests: %s" diff --git a/po/en@boldquot.header b/po/en@boldquot.header new file mode 100644 index 0000000..fedb6a0 --- /dev/null +++ b/po/en@boldquot.header @@ -0,0 +1,25 @@ +# All this catalog "translates" are quotation characters. +# The msgids must be ASCII and therefore cannot contain real quotation +# characters, only substitutes like grave accent (0x60), apostrophe (0x27) +# and double quote (0x22). These substitutes look strange; see +# http://www.cl.cam.ac.uk/~mgk25/ucs/quotes.html +# +# This catalog translates grave accent (0x60) and apostrophe (0x27) to +# left single quotation mark (U+2018) and right single quotation mark (U+2019). +# It also translates pairs of apostrophe (0x27) to +# left single quotation mark (U+2018) and right single quotation mark (U+2019) +# and pairs of quotation mark (0x22) to +# left double quotation mark (U+201C) and right double quotation mark (U+201D). +# +# When output to an UTF-8 terminal, the quotation characters appear perfectly. +# When output to an ISO-8859-1 terminal, the single quotation marks are +# transliterated to apostrophes (by iconv in glibc 2.2 or newer) or to +# grave/acute accent (by libiconv), and the double quotation marks are +# transliterated to 0x22. +# When output to an ASCII terminal, the single quotation marks are +# transliterated to apostrophes, and the double quotation marks are +# transliterated to 0x22. +# +# This catalog furthermore displays the text between the quotation marks in +# bold face, assuming the VT100/XTerm escape sequences. +# diff --git a/po/en@quot.header b/po/en@quot.header new file mode 100644 index 0000000..a9647fc --- /dev/null +++ b/po/en@quot.header @@ -0,0 +1,22 @@ +# All this catalog "translates" are quotation characters. +# The msgids must be ASCII and therefore cannot contain real quotation +# characters, only substitutes like grave accent (0x60), apostrophe (0x27) +# and double quote (0x22). These substitutes look strange; see +# http://www.cl.cam.ac.uk/~mgk25/ucs/quotes.html +# +# This catalog translates grave accent (0x60) and apostrophe (0x27) to +# left single quotation mark (U+2018) and right single quotation mark (U+2019). +# It also translates pairs of apostrophe (0x27) to +# left single quotation mark (U+2018) and right single quotation mark (U+2019) +# and pairs of quotation mark (0x22) to +# left double quotation mark (U+201C) and right double quotation mark (U+201D). +# +# When output to an UTF-8 terminal, the quotation characters appear perfectly. +# When output to an ISO-8859-1 terminal, the single quotation marks are +# transliterated to apostrophes (by iconv in glibc 2.2 or newer) or to +# grave/acute accent (by libiconv), and the double quotation marks are +# transliterated to 0x22. +# When output to an ASCII terminal, the single quotation marks are +# transliterated to apostrophes, and the double quotation marks are +# transliterated to 0x22. +# diff --git a/po/fr.gmo b/po/fr.gmo new file mode 100644 index 0000000000000000000000000000000000000000..08e2891caba8965f5633f399caac6d4adce152f2 GIT binary patch literal 65709 zcmb`Q2Yg)BmH#Ip15Wa<6r3eMvT0;D)hU}^H@y;)C1umIB)cj9@9&&@Uzr)nGW(y8o__D%cl$l} z+;h)u-+9!-UQ*(B;X_NMCxBNys#JRPex=f@Pmpb?bpMJ{=@9V8;Gy6jzyrYrD@&!r zz{5e=F9LhOGr=RltH7hd9iYN}F-Xv*w}AuTN5Eci!O5l4Lhxj8DR?<}Hu$Vy|6!0Q zOZS6vf8-NOrDb3rcm_BP5>#n7xC;CxcrJMODIVSyQ2uTPj{@HU9t(ann12||rBglL z1XOregXe)S02SZoK>kX9=HHp%DW{c6WpE0V`PJb0;8y}3aeAr5Yw2=O{$Bu|1HK51vIP6z)wRSuDLBBuS+of(rL2{#^)e2G0U-1CIy44l1300{g(_Wd3~cdQkDc z9VCjG2qic z`MV2LKE4T(q|#w{R{R%(O3yPuh5O!M{tYM+JBdOjiKUI8zCRaKID5bgz(0UW_u1#W z`zcW6^deAn@i9>D9so&VX%&Sb_d7v_w;PoGy`a*0ERK%@F9v(SNf44L{XM93egstc z|1YR~tf24|&vl@}c@?-A{2I6jd}zOaUlQ;tQ1RRf%Ktr}{QU+zA6x07ah(YEgU5i|L51^N@JR5@U=R2q@C5KauopZ4;!!v&LD^pmE&`tg zD!+Gv^7m6v<$dr)p3W7Z;<*G=_|xFyz~_RG1^)?DdhP)g{`WxT=a7p%T}wd4e<7HF z)4}`?AXQen2UI=&G2jyiJ)Y}8rSF-b((_hO`TSfk{|r=l9K7DY_XQjQm7ZsTi@`fU zrT;7767Y8ckK5q(>p|sb0#ta<0#$GC0hPX=fGV%@MlYXXP;}4&7lLmEMgLz4c)*a; z<9Q%eR+<5okADM|t{(>TUtQwnQ$c;d3RFIy1uC6y4)`VTXv}{Bj|Gn&c7Nx9%P@}y zd=aSpemLOIz&^}}Z*o3#IjH)5F<1uQ4ITyl5LEq?Haovq1S;H3pxoUID&D(;`SajO znExDb@fNR_&7kskJ*e+52bG>Zp#1+=FduZO$9p=cd<}z&e;QQ&Umon=3m$>_Yv2m- zm*8^nxXZlVT@vuGLGg`$22Ta=1Lgjx%bo9D466R?0sjts9Ok!zu+q}UK&9iMSCmR? zzyuWij)N+nXMpnmkKp0p`@kc>FN3PLpMff;$3DsFWHqSr+Xm|U%RrUK2SNG!DX94O zyVBdw6TqV|pA4$J)`JRfC%6=RBdGYl2+H5D0xr19!#f^)6!vFMTl_V2v`H-P72-vX7-cYvy&Z-eK7 z2VLX19#pz+1r`2V!6U&hgHHf|4l11oUhDkf3{dW_03QQB9TZ)>1Qh+g8$1U51}OVK z1oPu7?r#;CU|#{{?&g561C_oHf{z7%391|(vDNdr3>4j54yrtE0gngY2`ZeggG$fu zLDj=SBOcF*U=QZCpvvhw@G$TNpz`@T@bTckg2#ei1?B$%@X_F*qaMx)pwcq{s-7l6 z(c6na`F~5W{}`zB{0vlj4y-yRp!}a2@M=)$dKRes-VPoQz8^deycbNshmCoB3j$`L%|2a_x;EHdl^)Gmw=*&8BpbT8@Les1gLO-0V@7Owt09f zL4Ds4a3-*o*m??asf~fG1;q3aI+J6IA>CIH-F2E~s|*8&LK1hzYOnqd~bl9Xt`- z2#W4@fXe5aK-Jr)LD9$eL6yt@f~SCwpY;B42-NrIfGXG5fvWe9fXeR=z(wHxQ%=7t zLAkpURJ#8fRJd;gReoOpaPuCfs%41u=7lBIm`$4(;A*guwoA!RO2V9PM zGq?nNCa8Sf4a)sjg88@LO3X)H@AW(gCYWpB0pN2%)!&Q3bHTen#q)De@gLN1x;+J4 zfcYX&{Cx{}F!(%B{$B~IeY_Jq2>b%5a`-MNx_@ZX%kgob(s?qd`n()exm*vb{$3Ky zcYq52^PuSCyWleLAu~RXS^=v5&IT3VCBb}6FwcN0mz%)^yc1juehxeh`~&z1a7D}G zIUU>&^BPd}cM*69*Z>a&Zw3zoUj!;WZv-C$ejHT3zXgg8eh;nykK5t(GYqO+ZwAZY zhrpA;Uw{t>dv?12Mc|___k)V(GVsx04HW%76;wK22Fl&-;3?q02JtI4%a2 zzKx*VkAkYdouKOFW>9qbM(_ymqu_zyw?Wb2k3p5+V|KZme?BO8GvMRE=YyiNH-ZVc z2UNM-2a0YUaigcZ3?7boZ7@F>6#d@-ijUm}s+`{oD!-oum9FoAr-6S4&jC+;ijM=D z0p9^0h5he9rSs66oIcJ5BOfprUAErYrxlm@_#?L z3Ox3&J^m+w%HPXDmGgT+`TrhxA$Z8syu2?DI0>qLZU$BE?*>KB9|rruFM!Vi4}ZGH z`)cq4%s&A6R66l*oPOQ}!m3MO0adQ&-t6*h6{Lxl-U>beJoXu0ZfApIn6Cm=u6scF z`x3Ym{2x%|()&!OgLA;gW4;ztz25|iue=#ld-*DO4EPWdt9&P*%xk~|tb!_sX9s*I zcq-=mK$ZJZ&-Qp11>6FveccQyoVS1~pHF}a=gZ)U;C|0>x;qI}x}OZ506q^?z1$71 z1b+&i3?BWrUQa_{FXq1k<^Elu=;NE9%Hxr@c)E@NML!EceLo*myc6JY;EO={e`mmN zfX8C~OE4e%TzB6O%6>a2f6oI&$8QCX1V0q)zX>WIe*(_{PkNr`e*{!}x*3$eSAmy5 z1U?Lk5A1)d*UwSlftXJN)ebKJ74MTkmG_OH=-}>vp8-{`KLM4FNBo`BR{|=ZBcSs4 zT<~=8uJHXogZ)V_@bcUUs(fz+z~21(m-eUgr9rtH84`zZN_h{1&Ko zddSOZW8g420Nw@a`|m(~U-Syn1a1fQ{Zrtn;9;+%j|bO+GT#l#-;cm^z$0Jf?k@wC zp4-4O`0ZeS;H#ZqTms7eB0m~RVs zAE&+ozW z!QMA|`nCnU3+%`Kzd^-w)|*0q0?PajQ04bCQ1o-=n?1kVLDBgeL6yg^z$bv^+r9l> z1omLA1@rU412F$H_&D&L-~#ZopwjzwP~jZ8+vC{+_F{fcz`MZnF@F_Qxj*hL&UgF4 zRhX{>&j#NJo&w$*%t!n)x>wAbL6zIvLD9z#z!Sj3?r=N}JO=ZXpwfLKcm#MGsQP^; zsC51Ul)vR~b=(ZD#=I+--v=(md@rc_Ipj`H*C@CJ^Xow6{{c|xJoGNl&j7d(^Y!3y z;LE_%zC25f~xO_zr9o% z0xtre2)+tbIG+O*&YwZmf8W129q$5_&kuvj*CXD64hFmu>;vxtPXT`gs=Q8or-yef zxE%8fK;`cP;1j_g20Zdz{(U{T68oour-FBZm&+Zfc5v>yosYg8RJ!j62f;Jn_ekLP0(sCb_j%pU+x!~6iK@?G{`PyZ$0xtN~~o(z5zRDJv&Tm&BV zuU@~a!6lfd!Q;VKgDS5Ng62NhAN6k@&bgr6Uk{!H-UdDn{CDsi@cW?3@!0oyIx3*j z`%+N$p9DpJfAxN+r$KNr=3BrM!G8f&zTW_k21_6CaybT6y^es_fG-4<-d}^t_u(IO z_h*7fVZIDJ5^R9V$MZqe%bnmF@Oz-jt@lG7?vp{4)2-m+!4HCmgWm!b-fzHT!Gk~S z?v{b_UjbFmF9(kUKMN|}Uj|&T$J^rxpzK$Js^6FMrbWcS*ooz_YOb5V!{X6R7g+|CFb{0ji!}0X_k|2kZgA0xDmB0F}PQ zpZ5A42A5#2flB{Ng86-*=4?)%EQQvZZPXbq9em1D`e>bS|{BbZJ^6gL`;Az-5K!vj#JQ4g3sCXa#9gpWE z@NCR=P~~_BsPg?DsCISmcbz^@29>@if%^UuQ1R~p4+MV)J|29?_q@E11{L2VsPcF* zcr^Ha@Uh^xK*jrO@E~yc_r3nk0guHz2_6jI8th*U9)tPQ;rma6{eky-e$E2bUatie z&n=+x{btbO1C_sDgC~P0{=n_80F}-?;=~GIsFto1l;fEUVe`Tw_;ulDxc2> zw}Br6H-XE4;oqMDuEqSLfXjaA@$3MXV1FAZy7~loHTaNUdA(f&ir#0yb>NG@1>m>A zgTebjQ@93K07r;|SLbj&w^@_#q@Xz&-{6T$ud;Q2lsJO}erz~$gQ;E~{uLFIqH|MBtu z#o!?3SAcT=BT)H1;eUNxTn823r@=G8hyBszhI2rrZx`4DzA2bL0X_lqe}jjCkN%VM ztA(KA9RM!?Zv{oyp9e)xzXn%=3;*opbs4C1-vpit-T@}yy`aixzrQ$rp8_hJ%R!av zjiAzh7q|udA5iUOsPqu;$H1d7zYu%~cpU%U0_rFCFTp&c5B#p@c{-2kS-;0(|15vC z|G&U|7jG{L?mr*>f&Ym85^xe+4BiSphv#(OpAYJH7SCGDzvodMzaP}^)Q7@rc((Jt z2t1RA;<4XL`2QZBe{iGyzZHKJOX(HC?nKOI@tlUg-Pn!rygGb)7x)w&(QN#EIK12g z_J%ZE20jx1{|+92{kM5u$@{_K``0l4AiS@}-TA!#S1@1Ax3BU3DexZfn>?b4`1=_z zi+B#f{?$B}@&0FUMD7S{Kg=)YS;4z#Oh3`!N9+w<2zVfFAIo?Bp6ZbPKOTGW{GZ}R zzb}Dr0AB^JVAMrRRrlzXsI~^i%tczlHdzV)z)(V|agJaIf#r(?5O-u$$t!gZE|N86h5h zdn=Fl+s}f(Q$e+tGlH4d^mkFP`$VugHkf~k`TODh7rfVazR9x!yK{I>;rSBgrNsLP zo`2!}W!PQ8^JJbnPyBtH_jlyXU*y9TJcs1c{5Za!g!usQ3w%3*=es<21%H1BzK&-< zo*!TjtFpckDBYlc{LbWgl)b@=f9Ixd4kvuo^=r_poSA2UB_|o8S zE$&{(`=h`MdDio767#=;@%Kl}*YVtr#mB(sf^XzGk7s~qm`A?{`1VyE{oVuK0xku= z4=yI``1^Knb2Io%o*(m}489@Q*TBPY|3mD*!aMBPejE6|2J^dvS+E9oUj=^|{C*^$ z_~j+xeSsYEJ3pkM73^iVh4+(r4&v#@{7G;J_|M>BJX5@vc^=PmAkS{>KEjuSQ84SwK>gkc z{@h>f|LZY_;H|HeiVphNQJ5aw5@SMc^|C)*L@cUZK zAK>{f>^=h?h~2Y!Z}NUP*c04dg;{;QesAGjzyAQA!1L~4etAIuS}Of5FXKGV!u~Je z+hgNL@Sm`|ljk0oKhFC<=$-Wc4tNCb zr}M7g67XA?PjX`^0hjT-ljl6_@8D_juHOrJKF#w*>`vghhW8JF`dtW~OIR)5PviaB z!QMXd?}7LN_VMf=;_m^k#C$i;S-ihD_W2u@plt1PvRNI{zt)b zocA6c{f;J#{|)c^gP-Qvh5daz2lG4$a~(XCC;pDX?zI@kg2f-f<=E}u(Qh%&8+kv0 zupa|Hhv)6sT?xJ!+y?IA(eGrQSMfX^^IGsB;N{>?c)re~-_bk`>=%MZ1b-KUKM(J} z0`KKHfcW%#1@E`ck&#L-`9cH1~-2I z*J1t^&x?8Q4f*&6=D)%GesC4fZ+RY$`NZ(OFW}p-JD%q;d_Newd%^oKU&C`FPle~N zg4=Rb9M1+b7r(QHOt3|q(z8%_g9wtldZL>(b1`^lPk+p$z;u5Zb&98H^^pZ zva`}Kt6EZ+ zQUIS2*P=|PW@;mqnOc1+ znW=BDP9=(X$+ze?>lK%QsuM$#CHVqCD zLo!CWrFG=Ns=jI?RA6IAl5D~06yy^vd$H{e?$S_+f4DkM2|yN=nPj3qQkk#_yy{cu z<W<|zGrQb-TJef`Z&hYK0=~*2HMCwVG5$Mzlu8??3;9yLf;b47ayJsq8W|lHzX+27IkNFyc+0AT=UN==Mjgf63 zCp6Jyyt%D13V$4{O^9Za9=YDD&-uExq|sK1XdmNopG%`RORDO&TSAAsmgDTz-l$I2 zcTn+a99Bldg{mL6&sptT8|qg7n_{UNZh{$@r?fsQGc%3a*49kbnZlNW^UYK)q|us! z^K38r>spUnlGbFUxjlrj#ol*RCR#?K-jR(osxXwP@noAi%p$E-3X%7X(%&SL_0cLN zJY5~B!TTy^mnI$_-l$&Rf?!9jjEVtlg!?2rYYlPXCR1ZS(zaffco^E{FyBlXEi zRUf~B8>%A|M{;ej>-8YiBU^1*L?g*awJ}p0Q?`zQ`RyMd!|VG` zO$cx6M1AL2t+~yTU^z@nxgSY_#45(LNYf7yH*s@|Z!aJ)7ZLa5#_4GDN4 z{VINV|ITeSct~4eQaV&VOm(!@tZb$0_W)G7SqW~=6-P6v5HR`7K2t#6Aji^F>t(g4 zQxVejkHf+jST4iTQU6E%+EiVl7ML$Wptj-cnCb#Ig_WOp;UY%&)()iy{~^ z`6H_XFYhLNVWyV0B?(l8VjWYll65MSpGpVca3Uosy0JUSi7+bPufvy)TgXRsWesWxEm*v zfiX@Niea@n-fCO7+npyDJ+4O%Y4;Wyln+y9ylX40d{sMKhrbesqL=ra5Xbr)< z8QVv$@3YL>5Hn4+dPqco+GJ}o*FW|Yik{}|9L;=%GV~^tm0>*%QZIcXg=DlfJ>k9g zqN(~+xiwY0zExeEY+2WDDXEi0dUs=8X=be11$)LflX+HxhyQEtr&A87WDcZVdfK|E z-X!nUgJ;pR=ZtqoIqG@`9An*=n4cR2z+Y!zIE<#2$Z;wTl9)jTa^>^ncCidVRu(rmHux z(zFKY_vjcX7bDT&X@b5!vXEGsZbvt=Y13dqnjG0yWlR-(8WDOTyH$BRjW$$Tuz}IC zWjKg%nT5;Rqo&H3tZb*lHlZfOCeO`XP=VM(;3jBb+$Jw5HbaUWa@~ZpG2^(Ffu^(L z;CzD`a<1d-g?c39xuY%~wlJ9Owa|JKnueHBhX+fvj~?5pEjQTnz|C!J5}Wj*y36|G zr3hmbiOS!^LJG=B3<{!XI(%lejz~AF=T@P#<~QOhu)qfsK&}^RC9UqllZ2N!WT&FP zqU@A;olSIVsmM~L&R!HcJLEXD=_I)zZQn~JS6P+LgtGg_IcSdB)1t_&KQ zRT1QR%vcZVcElQH?Q?LB_O_dd75at_R%;s57{2M~(4fxMudU9FE`zi!RdR`jm-_-A zVRTI$HEUBNrgv_0Fx}cpCntHTi|?QcTa_HY&;+&q4X&+Dl6B2ytJ*N5YR^PEt3bXI%hgFo2T=uz7sl#Y z3|?^^ArFXOYn+EtXlDbdh)(9(h0R`a!2nIl@W8)96OPSsLGfdrWfZ?e4}}q2(TNyD zl_3{|M=3a~sExM8pw{4Gic}2w;b1W^bC*VH)xN8{b65}`W~$?4dzW}-#-y^iI~=7! ztAlM89j4zbS{tld4_DRT6)`CN?p;FaxjqFMMHQ~|+1M4t%yn^M$<0y_TtE(iC(jZ@ z=D-3-6XB9=B^$PN{i5QHA4XmCQSpN7u(g^{Wi_f32+b&F@+F3T!@Gu9C`&{6Lyq}Q zB@}?Q4U|K{ktxn%jOjOzF=$(Y$JR8QELZgMS*s%GPbFI`Gb7tP5C-~@@wMOs>Nx(pcD3y+Oc!;fc;Ye?qWFO##FXf?RY@#x5S(dJvzL~s`YZJaC=N#uT zmq(~$(;(8PhZ?Fh##n!0`al+;60#Jb)3Fq}6cxPmIT=_^8R|+tLpr?y0X!CS!Nq7Dno!-ElWt)U?MSO3 zwGd)1g#fVyXR9lkwlbY8Ogxoltx}C7)0%acA7El4VsHRuI`|A4#DsvGQ)1 z_HJPdX1uUfh*UuZw-P`|*6ePZb4S~pK`W@FMApA5Aw4P*CQm}8!aIC+1L0t+rctGF z(9Bo=hAdgpi)H;m`Ebt0Bv>7tv@$inNJr|^yD}w4LQ5p}eAz2yp_(#6eBf)L zJCKrNe({f@2W~Ldt|m5QwETzhv&cM@rp;-3*os=&i+#7uOOx98l=59nQ{Zv#Z{8&m zd|687?a9=rL3eB_o(EYSxp0tz5Hd6UT`_O8DUDjPDrv7d+DfB7Awi_U{J6A%ViZPa z1%|a60WNT5MLzPTtf1E%59wQn(UV*euRY)jijy#6bcK0&gVZ}oE81f=6s^koY}i`waxhj zESIx|X>%0Tp?ljA&sNr$;iU)R-2^%$MV~M`_nf4>QY|dy0s{{wgix$&jEGdAqm4TH z8x*oo)p*r-u5Qu{(9nyp*m&6;Xlcq}pS^8v^X+I``??g)Qru3r(l3_g*`^ zam!F&fB!YB*Y{ibHl3E~#?;9`-U}lqF{k|lgVzjg+_ZULoDUDo!?jJ>TBUUDY}aPr zL;tO2WlJjZ+%M)nbFG#-#v&Z+2j*}}QO(b36im>HHdQZ$C>2CpD^TS69nQR$ptW># z5FJj94QpW6&Vz%?byGe94HCN#b5xdX-*XI*kRnsa3v)3fO}iqgbo=Do!Z>c1DBARM zR-yU!6C>#2t}U_I%*rZDhBuJtU-5UfM`&y?+D>c9QXnbGDQI1PTQtnt%;I4S)ROFj z`)kWv+6#R4z^^Tj?StcW8~RpnUU%t$_4X+*O3Px_EL^)~ecz^w_tlrz@ceS#R+>3w zXSdq%@x!b{k$r9p*12(7m33cKwR(7-*LXUbAUvkU#~K8*MtL$-d3@X{c{~qTZm@ zKqXn(%D{-ovYv8CVj#>#YP9MU4c}?M!#YGX%-BSU4dXKOWnX9aJb2J z1F_*}>o%-oFMB6g9!p&_OP5TxSQ~``kEp3UA$}Bo6O#FpWuKLTQ>xgJm(Ye)V zSBIO?>Ezf|FQaGl%Uz|m&2<*~X{|;WF~;$k>{(C3puhbC3u-Fk71)yW3XPBxCY?IE z-uP+L!0`O~$St^>e;1j$o=*?CWy*UzC)-ETl1tal*{Rsrswdycw5!{Ez_I>fkDCi;ul=pX*6AuM#C$|@ zx3|7F4bX=t`Tl$MKnrf?a^~D96AAY2Hi`uEa@pbNGM{~0MO!1|ntHUFk)T~2%?9#0 zXA-*h>a4AIFG_TpgbC$r1B}{CsDsOb{&=r^?23BJctMnlQDKbMM@(G=FAr3@s64hf zjGW{?44WWol;_fmn98U;-KerwhvBl@xk|CA;iT5#hJt|Cr0zWOe9?_NvH~`GaY0Tg0slr-#<&Os1mUjZ;Q4A$=YX@XpC6- zjxJ3WGO*4%Zbj#s=^z`Z)+ajhqP!tv#4)^Ah&0%YrAb^mw5x>yL`HHFrDAmXY)6-~ zOSWrGtV*RvDx5Lo1k5D1z%B}PRvJk|khu+GE1OJ+$!K@e3LTr3Y*b=1geMa${cFkun5y45t8-$JDLM?^W36^+tv|htj9+K8dQ3Y&T0iUnwmoj0| z75vKU*O&YI7Z)8d*gv4u$6Cs4ttqk+t#c=fh{pLMYRGH$JvSPIcYYHUq!% zDhcvMN`k6{f}=uRX2osm@4bklL?bKH3x~+fiMJ=sR<25Cj=DNb`O@5OO(fm5T+=9O z1s;58&{@G5k)ua74l+H_0$1hBCGf5}h$XmCVmd3YSv3`!whDcu3QCEBciW07BSacg^P`?3X_wNQ<} zu?9n~W_@giE~$E!4Zsv_lf~n#3{Yk?eWi#HB$*r63QzVnF^<-pXfxTcaREM=-J98U zmI>gtwq5?#4-Buquy4cWz6;h3uG@Ttwkxbzw|T?BrcKG3jl)S_GSoM`dEM$QgMGuv z(3WAezXO(VEl4!}@b;w0Fv9+!4%baKV92otQ1U=GBps#{cHPdW8 zO{k^lLLHGD#6>FfCM{c=5hhCmS5UH|({?A33Pr2Y9Ua*mfvO<{(#?CCzZbTNkYZz` zQuu^!n>^`5*zu72fW0r9s7_9^>_j5dc}cW00ZOTnRl2q|V;IO;nRQCBCJ^So1hrML z5A#m2*sypi^=P$k(iT!^a2B-+CcrL53#6jf5Z|Z3wpFI-tEJHj?$f|h*=%Vd`P39N zxU${2Hh(%4cHFEAmeyRg!Xj;Z@r$p-7oQ*5R@eIBD_52mj$XYg2|h(;>U&JB$imYG zb1_IO$-suq1H(pCauLWVreQWuz8JXO7cGROlaKtm57W|9v$K3jr*7rMMi1iYYSP-y zN;$Jn78cdq%6pp?&wO^?TnxX{z}Gi!=jqN6=BS$rnL zXeHlXeB>0}oiQ|RE2&bT^oy2rTcg_&+uSuZB9|sGvx%{L?R2g*%%?AY?Gi>ddrOzd zSaB~?zY9uhNKBjHkd3&ye9W;#a+aP?P+D70DmyE?mTGASOwoH_ttL9Iv^JfrT$N

$a^mgiB)v*vy$brpo^rp@=jU%4o4SzuXrKWR3gjG^ZJkr z)AJNc7lxi&+){#{*s6kY?X4=dX`6~PP02p*nfi#<=86`h@(HCag z^=bAw%=k^UmATAyYpzcVla`c8^pJDXVJn?hY)sL8O88#zHs#Y9YSC3L;C#P1Taxl_ z@M=9Esd;_CIrZ~l+al&@gk!@mjmU}y7L_;t0=`MVP zm9;GM7F(aUXQNSgYVhF8EJNXDNsVhrkSRMIW@CQW;;4|L2NVYL^RSG=G?W)SEGXHg z?+RN4wNo4>$MF>u733Iq0K%HR@;b|x=*+tf0g7In!yp^Nc(f8mlaaV?Od}h?cD%@$ zD(sD_*q~SS-Wcv-iw+fmyq98Sv)i1l%dWl)GaYT;Oly}qk4!Cd6m8J$rLJQBG`njm zg0?TC?M|iRE4op6YGG`Z0paK}SU{cqRLsOmcAX9kAnz$GDal)P%3C>&VH#VME4+%N zL1ScLstv@*)RowMXmXilru2^PXgfnyYG)g*Z3H2Unvtxwd2o}4reT?MDV(FDMb6Zl zZvw=F)H71$m4>VA2G^G7d}axHI6K9sv}s_lHr2X8sg}Ar=;C}Q1QY8T_VJxkTrhv9 z6kZHg`DJOLwx~zZyt~>$eg=nDC2MS*(I!(*hHT7YKdT2{GCo^y?6uJbCyHm5a8n1f zMv%IQF==aCS}kFz8GM-lQn4+ba>QvVvX=I>upLf3nG=x0mvn||n>M9X@-EMFN0J?` zRWnryr|Ym4w)&t*W2reucd|o+j~q1}=wAyBEF9yed>5VNs7gcUszytzf<7Ui9_gud zZpFTOgWxu7+{`$Y#Sst2w|4f3YJ^@n+stTznq*2<$2IjzICP`!D(kg=NK07r-L`uZZ^NV0^Qci4 zfw^toWK4ZkX^XW(4GT~lRyb55DtS1dNaVx^KRhbAVAGJxUR$)H10BFZb_RxTRw!(> zx`8xgA%-R07pxn$aiVFcQ#I*Q8^L#TzG}P(dG<-sP z-*YgIN`($gtxcMISfA94zKq;7OVGZl3RGuV#x=_twy}o-8sm7Ts#Z+37ul+|GMlI~ zsq~;ryuMXa-PU1i^2267MX6cROq;DzRM!*+be&b9fp0ajie6N#V$!=farrR|RN*j> zTVqtiY}iOrGx^lcj}e<-Vh|zBV_6k5my(Q97i73F{8^}W7cFhP78H%qGUHNe?Brxb zePJg06i-pvqJz^ylH+S)O(Fflac`&S%(v6@Z&d#ZXW+;pf6#->zE7MJ=>C5M5)^<} zvN@3B(Hzp#%fi8BiquXu^W)HRL;b7UQ*jd+(P4B~mJ3IzVAcT|t|`V4vT$X2$JJMA z)YcYEJX}i=51CA;x2pb)NYilB*L$jkNm*V4Zo{1c_jEB*!^#;(3viw_u{yVlH z&9?6ueK6~cSgO3{wcrsUhyYCRXC0!wApfZw)wp4-#bFy-%an7UEff}GH90-M>M7?kYQ$UF3ZYx4YA^DoK?|8}V2^Yw7lo zPE;v{C3uXg*gdH7JYZs z7N}(Q&4(3c&I=7La$8gq`{gd$-A4WGlXc=ch2cZdN2Y!`4l9F zmMs>E3iC#5N|R_MElJdH!$qtx=Cu*U=%`Kq#dSF@@=3zga3l^i=qPo(AZiiQ6ooZB z?lw-uwYimk%42h9KD8trn8G0JNly1_=vau!Qr?9WF!~&HKQ=0vucPK%At^D1?^>^+ zn3N(^k0RgB1V=}#`a$^+5;d1I&iDws8S=S`!L;D}>WDmqICn*TaFm`gxsnkyD+a@& z8eh@MD#B)|F+H+Oj8hcv(-@(4UEP9yK`wSpyMqoFaPYW@%vxU2aW1I12G@qC3=P^n zQsIzHwtQ64lPze(ig;(GHZzSFv}obz;=+WAt@5*C)@Vb=@1h25)URVnVtL(Y`BFbK zcU3aIbF{^=e$Da|mz}(9<%$KvRi&i7zKL*EzMwVUEN`x_N?0J$+J64bHp6ACb{yKc zxx8A8nc+;i9|34pa`K9mE6XcREw5aWtUPViDW@%2aq@~4I4ln{aMl97%-xFeiZjY9 zRwgUXTy^RxOIEDJon{isn^`r|WUGX9C>v_b>%gQ)^bRES(&os`Chqf#RBmZM*Zc@ zyQWFMcDXN~o?y6mmIMRFdo$;3*}SHFM&?e*V-a_m!@4*DMWlDe)*1%~9I%0{*CdBS zazmp(VDp~c6MJ_1(J<%>n^JsDI3XUu0oCeeH4Z&sLu+!+?gsON3>T3;Dy?8&@ZYG9 z`5MPGj0NjSCy8g34FhqCx7n=TnAns?YX_mQyFklRjAQd(tQewRu<6nv@>Y-TIn>i= zsWscN;>r`kt&Z2RpDAF%sp8$fpl2Ox>#Xa-FFMPeE8eG}6W!Se>Ik$I48UVpxr2zJBg$bb%k$%z;>l=l%m!p@XA8xH*1Z@8 z=_V&sz`arbmk#ae`jc^LbkASFrZjv3!z6&T7CK>=N?*Co5m zspbZ1y;y-Bg=$kuDnE1Fs)Fq^n1ekOF;$;zCOtUtQweQ+ou+D2FM1+B2OLil7Thnj z>6}|h2vKpIxDUMXJw$#-YG_C%il>q9c`by<>J*Y%L46+1BQFLLk0H+mf|iXX0w`R2 ztpoQ76C+~MLsTg2V=DdR4m;mGe_Htq+B+uEkEhH z`$6V=-dwkk5uV7_p50Xv>A?}(*aUg>V2P8n*O`E?&ULbRB!YR+AGPi0TB)w0KT12= zkG3=!u0zkm$*!lQm8zF5P77=^o#o8){P(O7tg72iKhL@BdIWm@ds|51F!ZXQhCYaJ zt;J8_csvjqVGfD|J1f_5RtH2gkv7D@Ps$vLZV?!Vp(M;<(H+6~nBST_jK_~Z_wq;! zg8IrIjc(M1#+MT}k*Tm}`OV4=4Lw1L;ngU#p0H80hwh(U zK0WTaGpH=2)N7iPy?9NA89Qa^2r;WIC_{!4j5xBw<)facyegE08AyANk7@RnUfn^^ zHP#pj3e^~rt)mRJ(j_n9c=lNd5u$WLED)gBD0*+Im?J{=?6$h)oc26D4p(PHFGX*( zP16cEJr<8>4^3H|7P1egv&Vu|d0IJIRK>&E2e|%Xm(kwnp51VPKvTxD=R;ImB%hK= zs{~fWi23!{dG0+SOK>;uZAQfCEMT>XWt#tVdB&1eJcWI|_ATdlDjn$3B9S+z)mN}q zgWfY6WGZ?)n#r3?G0;tsDYMR?I%4O$TYHUt%S^q+>5&wmivu1+cFw!Y(=? z-01N4YLAvQYi2C%C32ON*LLT+Hyp=SMmDoqF!l9JEw|wLCiVnvR^S3eKg1G1$;xa| zqNO5UPELoT;A6KIyQ)m0X*&mgeW78|)W^oC4v0oYk{toxn(GMoO-{R=oCgy1h$SCH z+RhHy7Llx}PuYQsQ+5#q{U6mzAwYdw>*Gk^MhrSbZTcD`5WEcMSZGQ#PE(YE<+wv) zWOI1_x5mz+E4C-33fHyJT{9diP&?n~73m6bp$%bS^d03m9qH9}dc65iYbQxDRrDaC zIIPK&$EK-$L!)QPKYxV$Ae2{RdnAh$3_8IdpH?u%W8hb_j)bjQ6TNxW4|PC9Itqoh zuqdpG^;6}$1Q7}*@FO1{SZA6tv(KSWtU9pXhnulWqN#A)mHMn~&;$KB(Tl&>(5{>LLVZC4nVuXK+)!hQi#z?wRf_C)Y=aErroL6gz^%sCw8zH*00E-A)B# zTEmhP4~fD|>b5?Dk! zDL1R`XrK#DBtU5B+{Jg+o#W4fRYz>jRcmQTIlefp2INCHlF+>a@Xr=s@dSUJsZPhQ zxkoWuMiIAbRXtT(JfuIki-gOXXZT?^hZ}k;L90icMncHG#KAyQJvUR98H*NyF(^vA zvf^R=c{#Xy3R{IH~~FGoi>sAHIlX~0Xju`?E&-FA&|gAm;PXbiG72WN%2a7v~Q;~ zXs<~PHhY)@b9tiZFW+_b%5U0h<`pv%uCoAC87;d-6q<_4R7iF&lK}C80bMpin|1c4 zzBaHdwoV29f#bWN#?OH@(>gi_SJ+vx%@${-y)J&tu~ z4FPaBLOjn)5*O5+t*Ei7m{dwR&uit+JPIp_UJznaSP=nLaSwA4o9*4y3sV%PyI!d25 z0HM{e9D=kcdTggF`L?2IFXTHEDKM?Unkm)&;WMhWKDUoqV8mVsnL4QrrDG9}qdfDhgV z(=JSc(0Ec{O&n`t0=cD5I ztXK24^iuk!b9A-YM{ObvNb0_nnDSxuvOk1_FGQ3yG=jK+P|UM3XT{Xjx%dgIuEK>D zR-u80=%5L!cmu|4K}hfMV1lsjoz8upiOy!Vl__K$*29Vb3du@m+#|6CRoGTto?&~( zZD1mfQQ32+6i~#TUZ&ACs5Z_D3qZPU3vXWo(JB(>jwB2!DwJZ8`X^=Hb1NZDM4G*jmk7?ryDw%0LiHAV7&{9&3a9erR|0g ztKbNwfi1&DmLYM%SD|HPXEeu7?!2E`fp_o4j}K%fIGN1Gc&X?rQ(njlbEzV4|L?iI~)J1&!I>Lyk<4$&Yy@)kns&r?fM? zy`(S;aFD55R&g=#$c=D}fLs`vs?j;}S#IoI#Ve-bccmCF$=cWdDX>Tzv8fqb$W5th zZmu@5=k~%4Do}m67NsEYNin?CggBd~k!a(xd&+M!kD1ivVn9eoaA3Ep*fFx)Im=l( z>G&r%XPX`@qbfo!2)v?j*@`g$yI}dQ#G+-rY<0;5T<$W`M>h9L`+4r(?4FhqR)7?S$HQdxqn9Bd@&*)wPel^FtO3 zfvx594kC9i%s%)Ti*0EBezIF)@?3bIk{a%d$@}k~)3maj7Q)Ex!IgBVla4(X-77v$ zO0|(z8#&J6DnxauFRW}2BIF{d20E{oDHcnCit|&%-P7II8qxUFSz5SnCXT_G&O<^m z<)CT&GzUc^XDMbFLfbtw#=?Un8Wf4St7z7AtTR^j0?Q2fPTj->xt&ge>^9W5UN_UA zP$rN}I_UG20-n++Ik_-4lpckR(!@oo5Nlpmjx(7>ZU;9r;hWAutCM5ueC4S(V-_Gv za}qD7p-a`$Yw=Ka_h^YOt1+0GaSg-XmE$346fy;$4m*R;?i*rb4?yuqYxK3*_f^fv@;~RZ)pWS*ophDurL~pp=ChN8f zqD>~EY{^}9GpEQ<^ztAC6vbrT<{_ViK3hyj!iJS|u|~SM2zl@Ll3jq4TOythI(XdD z`ML1L1{r}@p#3w_vvC@V1?^ByRde~?!_zMDGsf5^IeCQ*cKXSxZZ3%{?Jc6zL*vaW zsf`@+ITHskEz_)W&}^=17lg z2T}7lgSlb-Dz2<1x^nZr;WNgWKS@9 z|9Lo)@HLOXAcickw&szRiE~w$fyS@04O!016XsZz-(DTQ1`ht_O9R?8WKqL8;X8Ko zp+}E632VZ_)UR!D3_3n{#M&esuTYe&tP!)#GR#nVZ_~9JL4{`!Ni&Fydx&HT(QvM+DXIvzu3)30olS_YO{c#9$psG4Fu{;i95SRcuKo1i%S$iat8r(Dn;g7!70xq^2%7>vRxKVSA=} zqOKKfN;*rN80TOI99(%>XI~ZV9~MTTVGw5s--AF zu>e;N<012os?%mX`ZokxiUsSPtdbutIqKpv6jQ#ct+nTTtt+V5<$*z+G}9C~Dt}uQ z1-IbFB-a>wV{7vzsXnbTrU;9lEjtQR+Z9-fr3;j_o>xR7ikro?tIjn4>IYlwv8lt( z_lGcl4+w@-@x15fsqlbSxpZZx)T;@zIqIzgn(nV^) zUt9U){k8WV-4ZdrXE#ksyZ4Exr&(n-X_1b7T&&o9DZKBQ;wz0kNv1(I=ogWSjec2*}8=|>coXRI9* zM6I;ZLqSGK{UUs>&dm%OaP@%xYf%^mL&(v7Ob0K49R);N#B;$TQ&?NEQMyGtET(GG*9GPjWyzqA2hC> zAX1kQR&QLd%fHt7&0l+NSwN%eA4pbj+`z?O>(_1Gb4#-4>4^f~vYETVHuY^@w{b&y z9oV`(e>*(T*1oc?EC?j(k+O@yAdw=Yfwp{0oHH69nQq(j4$`+bw{c@sqr!zTc0c5j zc0U=v45>+1ss|!ziz9PysrGeestX24x=Aby_DHlXE$?h&^9W!zJ^*9Mwn19YPPy$Z z1+ek%;kjPMmxIkC9Ids=0!qbdGHRRWI7UE68K`*EZ+SU`Z+x*ey-GO~lo~m)ES^ct zX2M-$={IRcH8xXZ*bn9hV4;~6v`!03>+>gOksx(l<^)1dW&CW)0HMM*FtSlCu8u*9 z3!5_vt(#GSxRu6T(WQ@@qh^-%0<@Og0>`inhgNxgOIwXu>FH`3=)=k;EXQe&#;=@R zs=gyA=sCqce>zyfgDD|b&EdeCR9IVLr}!s!@mT}y8r&+~OCC4(>twMT3Rj?+ORkZS z_@s4_sHW&>xCl*qTSy`SaTVI|z(8O>?0)eHGpRZP_2;u74l`F^J)v(7Lqoc`&hTI) z88z6YX_=DCRcBD&UR|@h-7YalDJY{D7yG2@5pk!`mjSE2yxl2t#gV25Uuq5-5t{P+IF#|uY^`@=^J42d@ z#T|R1xT;JpG^`CH`8eyCg_|YayD;-OKMy7Xh9Q2cG0C`;qRzz=q;Yu^yHWz82xE9|VM1JQ0_jh`a8#N@MkIu~)tn~#AUf#K(bnHcq+QKz- zzCtIc;F3j5!6+NH8EDV$xJojWFrWq4!#MkVta4r2DlEE)2VQZRmS!|uZln{7OUa_{ zH3-qtCfU7o5KcHlN4>va-ZT~t#ioiw=VS+XlH}OS+tgL~Mu%oPJ6*^{)M71RF;|@E zv3x_UrelqYYnV}3;E9(|mSL8?+p;audWU-znRkeM4zY)zvQIJgocBB{S8}yX3~I}1 zM~l%F+-EA(oTJ#1^Py!)=;pBaH7<*!qS4mbDId0Lin1wope_<6QpfdceJz6plif_q zr7Q8w)>hpXJG5d4mK1c_woH8&`zsCag~#3@YYtc7H=*#-@Jjq#>|!^T`Qg`J3tDKM60Grk7=iBr8TBY_;Rf* zU22aAe^G^nPt^JbSM(Lc5xb&q%C0A)?dMWgl()phS*L58lrq(TEyl`LhR3WfE6w&{ zfq$X3%)0FsAz`Wo)%!xP*nM^sbhdQZ*QC1hIGW8frtFLMBTIM<=_Hbc#@K!MVY7?2 zIc%v7(+I1QU){XP_l}7|QOQhoteBSS4!^wr!S0??z9?bGqF+|< z$q0c10&UH8@j$`pYPv65!~SC3so~_>6Ir!TXi!8`ZRC3x3nvyBA)!^a%@i;PEe^|= zXPp}Yt9CbbxE#<{ml#dLdrYkyd70H88!}3L8Z^W+OdzS^Bw3z0mWs1u`A^J|t`Ij;^X-##n`XrsMUZbv{9P_ppb-AQ3>?I#LWZ znd_Qhj8watD^uujO>T@^R?->V@$9zhjb#&^te2$Qf%NR4Ztf)9>#5#iOYJ8ir8f#n zUqJCvWoY)o92H03sVF#2&y;eK;ZZ1>$OGq#cM;Cwv#T!(J9^86mvB%bi#l^N4d`O( zG`7O{0zMP2$|KWJRtp6%$2a1f-DA9KaCR3e1a{djY|a%->S)f$Qdc3?tfF0!QsJ?Pg87WN5{OhmdsS+i`0H6`OO~dEcQg1#xb< zpcDm)*oLXOXr&%FXH8m~bq-+Sx)_828d9EOIYNOHTl4EBPSL?>&H7^Om&- zE+o*sglZOAQyf!NC=@FvNu8^ed>8P;78W{$AerZS4xFV5BQhQOMVdN`d0mIEFm$Ad zolw+6yaQpyE{u>xZ90pdOB8K|D@HpEr`KDjpVyV|D^~nPfRf z+?r~K3)`TFs?V1X$@ZHZX~QJ0c!Z+YM|(P_K76;|>6i}(GUtkounmD|A$ItKMZEpcx#Zxx1yS}GL| z2u$|8g*r~zeb|qtRRo=!RGIxe!?vs4=D2Bct}wz}i(djs z*mf6WyiLNDi9ubbP#(lhkzr(I$02jU-!?>5KT;M$$cSGR$&GyZLega?e&>K9){QF~ zCFp&wyCRwA>T+G9Uz(B+gUbN@2EcegrUIUhCwvvI0!+{2CBc(EWRc^xivY9T2OYWS zj6J<7GV?XRtiwEY#-HMUPu-(TpuYFPkMi3G;r~l>yl(aO~gwi$9Ny0`k#VyS6i&DySzDak+6r7T9-s3M5eE$u{<8R1`%ByMdA( zx6?auTJy0alT-7eYHn+@|}^P$r$hB8NV?k^ma zG-tGZc}-2wl=fxYY1-zJwKFT$ZSkC})DO9=6(;^Ou{EdF>$QZnq&<&GYK|E_K8HvN-LX{FGgf4}y4VDTHI)c?H#J2e@>ucRZx`-lM_&}r(Nwz4c zq!HUrc829U2j&H|I1qNBB9c51I=Z%-O4$*RUeu$ZUr;G0Xb1<3o^qF$cJ&nE(Bh8C zaONAcZ^TZ6nKh_f, 2010. +# +msgid "" +msgstr "" +"Project-Id-Version: pwdutils-3.2.10\n" +"Report-Msgid-Bugs-To: kukuk@thkukuk.de\n" +"POT-Creation-Date: 2011-05-10 16:46+0200\n" +"PO-Revision-Date: 2010-08-01 09:54+0100\n" +"Last-Translator: Nicolas Provost \n" +"Language-Team: French \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: lib/authentication.c:46 src/passwd.c:840 +#, c-format +msgid "%s: PAM Failure, aborting: %s\n" +msgstr "%s: Erreur PAM, abandon : %s\n" + +#: lib/authentication.c:100 +#, c-format +msgid "Enter login(%s) password:" +msgstr "Saisissez le mot de passe de connection (%s) :" + +#: lib/call_script.c:68 src/vipw.c:89 +#, c-format +msgid "Cannot fork: %s\n" +msgstr "Impossible de créer le processus fils \"fork\" : %s\n" + +#: lib/call_script.c:76 +#, c-format +msgid "waitpid (%d) failed: %s\n" +msgstr "Echec de waitpid (%d) : %s\n" + +#: lib/check_name.c:70 +#, c-format +msgid "Can't compile regular expression: %s\n" +msgstr "Impossible de compiler l'expression régulière : %s\n" + +#: lib/chown_dir_rec.c:54 lib/copy_dir_rec.c:147 lib/group.c:389 +#: lib/user.c:495 lib/user.c:759 src/grpck.c:277 src/grpck.c:654 +#: src/pwck.c:284 src/pwck.c:554 src/pwck.c:916 src/pwconv.c:206 +#: src/useradd.c:564 src/useradd.c:1036 src/useradd.c:1111 src/vipw.c:295 +#, c-format +msgid "Cannot change owner/group for `%s': %s\n" +msgstr "Impossible de changer le groupe ou le propriétaire pour `%s': %s\n" + +#: lib/copy_dir_rec.c:77 lib/group.c:369 lib/user.c:475 lib/user.c:739 +#: src/grpck.c:259 src/grpck.c:634 src/pwck.c:266 src/pwck.c:536 +#: src/pwck.c:896 src/pwconv.c:198 src/useradd.c:547 src/usermod.c:543 +#: src/vipw.c:189 +#, c-format +msgid "Can't create `%s': %m\n" +msgstr "Impossible de créer `%s': %m\n" + +#: lib/copy_dir_rec.c:99 +#, c-format +msgid "Cannot create directory `%s': %s\n" +msgstr "Impossible de créer le répertoire `%s': %s\n" + +#: lib/copy_dir_rec.c:113 lib/copy_dir_rec.c:199 lib/group.c:378 +#: lib/user.c:484 lib/user.c:748 src/grpck.c:267 src/grpck.c:643 +#: src/pwck.c:274 src/pwck.c:544 src/pwck.c:905 src/pwconv.c:215 +#: src/useradd.c:554 src/useradd.c:1046 src/useradd.c:1117 src/vipw.c:287 +#, c-format +msgid "Cannot change permissions for `%s': %s\n" +msgstr "Impossible de changer les permissions pour `%s': %s\n" + +#: lib/copy_dir_rec.c:138 +#, c-format +msgid "Cannot create symlink `%s': %s\n" +msgstr "Impossible de créer un lien symbolique `%s': %s\n" + +#: lib/copy_dir_rec.c:185 src/vipw.c:230 src/vipw.c:238 +#, c-format +msgid "Cannot copy `%s': %s\n" +msgstr "Impossible de copier `%s': %s\n" + +#: lib/copy_dir_rec.c:215 +#, c-format +msgid "Warning: ignoring `%s', not a regular file\n" +msgstr "" + +#: lib/copy_xattr.c:51 lib/copy_xattr.c:69 +#, c-format +msgid "Cannot get attributes for `%s': %m\n" +msgstr "Impossible d'obtenir les attributs pour `%s': %m\n" + +#: lib/copy_xattr.c:93 lib/copy_xattr.c:113 +#, c-format +msgid "Cannot get attribute %s of `%s': %m\n" +msgstr "Impossible d'obtenir l'attribut %s de `%s': %m\n" + +#: lib/copy_xattr.c:127 +#, c-format +msgid "SELinux not enabled, ignore attribute %s for `%s'.\n" +msgstr "SELinux n'est pas activé, attribut %s ignoré pour `%s'.\n" + +#: lib/copy_xattr.c:133 +#, c-format +msgid "Cannot set attribute %s for `%s': %m\n" +msgstr "Impossible de positionner l'attribut %s pour `%s': %m\n" + +#: lib/copy_xattr.c:154 +#, c-format +msgid "%s: Can't get context for `%s'" +msgstr "%s: Impossible d'obtenir le contexte pour `%s'" + +#: lib/copy_xattr.c:161 +#, c-format +msgid "%s: Can't set context for `%s'" +msgstr "%s: Impossible d'écrire le contexte pour `%s'" + +#: lib/get_ldap_password.c:39 src/chpasswd.c:224 src/chsh.c:516 +#: src/passwd.c:881 +#, c-format +msgid "Enter LDAP Password:" +msgstr "Saisissez le mot de passe LDAP :" + +#: lib/group.c:305 src/groupadd.c:506 src/groupdel.c:365 src/grpck.c:820 +#, c-format +msgid "Cannot lock group file: already locked.\n" +msgstr "Impossible de verrouiller le fichier de groupe : déjà verrouillé.\n" + +#: lib/group.c:334 lib/group.c:409 lib/user.c:440 lib/user.c:514 +#: lib/user.c:704 lib/user.c:778 src/grpck.c:227 src/grpck.c:294 +#: src/grpck.c:599 src/grpck.c:674 src/pwck.c:234 src/pwck.c:301 +#: src/pwck.c:571 src/pwck.c:861 src/pwck.c:936 src/useradd.c:582 +#, c-format +msgid "Can't open `%s': %m\n" +msgstr "Impossible d'ouvrir `%s': %m\n" + +#: lib/group.c:340 lib/user.c:446 lib/user.c:710 src/grpck.c:233 +#: src/grpck.c:605 src/grpunconv.c:225 src/pwck.c:240 src/pwck.c:510 +#: src/pwck.c:867 src/pwconv.c:224 src/pwunconv.c:172 src/useradd.c:538 +#: src/vipw.c:249 src/vipw.c:258 src/vipw.c:272 +#, c-format +msgid "Can't stat `%s': %m\n" +msgstr "Impossible d'atteindre `%s': %m\n" + +#: lib/group.c:435 lib/group.c:478 lib/group.c:492 lib/user.c:540 +#: lib/user.c:591 lib/user.c:605 lib/user.c:803 lib/user.c:873 src/grpck.c:703 +#: src/pwck.c:965 +#, c-format +msgid "Error while writing `%s': %m\n" +msgstr "Erreur durant l'écriture `%s': %m\n" + +#: lib/group.c:503 +#, c-format +msgid "Group not found (and not deleted): %s\n" +msgstr "Groupe non trouvé (et non effacé) : %s\n" + +#: lib/group.c:511 lib/group.c:540 lib/user.c:623 lib/user.c:653 +#: lib/user.c:883 lib/user.c:912 src/grpck.c:715 src/grpck.c:723 +#: src/pwck.c:977 src/pwck.c:985 +#, c-format +msgid "Error while closing `%s': %m\n" +msgstr "Erreur lors de la fermeture `%s': %m\n" + +#: lib/group.c:520 lib/user.c:632 lib/user.c:893 +#, c-format +msgid "Error while writing to disk `%s': %m\n" +msgstr "Erreur d'écriture sur disque `%s': %m\n" + +#: lib/group.c:530 lib/user.c:642 lib/user.c:903 +#, c-format +msgid "Error while syncing to disk `%s': %m\n" +msgstr "Erreur de synchronisation du disque `%s': %m\n" + +#: lib/group.c:547 lib/user.c:661 lib/user.c:919 src/grpck.c:472 +#: src/grpck.c:730 src/pwck.c:468 src/pwck.c:734 src/pwck.c:992 +#, c-format +msgid "Warning: cannot create backup file `%s': %m\n" +msgstr "Attention : impossible de créer le fichier de sauvegarde `%s': %m\n" + +#: lib/group.c:552 lib/user.c:666 lib/user.c:923 +#, c-format +msgid "Error while renaming `%s': %m\n" +msgstr "Erreur durant le renommage `%s': %m\n" + +#: lib/group.c:693 lib/user.c:1094 +#, c-format +msgid "LDAP information update failed: %s\n" +msgstr "Echec de la mise à jour de l'information LDAP : %s\n" + +#: lib/group.c:702 +#, c-format +msgid "Cannot modify/add NIS group entries.\n" +msgstr "Impossible de modifier ou d'ajouter des entrées de groupe NIS.\n" + +#: lib/group.c:707 lib/user.c:1103 +#, c-format +msgid "Unknown service %d.\n" +msgstr "Service inconnu %d.\n" + +#: lib/libldap.c:1364 lib/libldap.c:1429 lib/libldap.c:1484 lib/libldap.c:1610 +#: lib/libldap.c:1752 lib/libldap.c:1992 +#, c-format +msgid "Authentication failure.\n" +msgstr "Echec de l'authentification.\n" + +#: lib/libldap.c:1760 +#, c-format +msgid "Cannot find base ou for new users.\n" +msgstr "Impossible de trouver la base UO pour les nouveaux utilisateurs.\n" + +#: lib/libldap.c:1763 +#, c-format +msgid "Base DN for user account `%s' is \"%s\".\n" +msgstr "La base DN pour le compte utilisateur `%s' est \"%s\".\n" + +#: lib/libldap.c:2000 +#, c-format +msgid "Cannot find base ou for new groups.\n" +msgstr "Impossible de trouver la base UO pour les nouveaux groupes.\n" + +#: lib/libldap.c:2003 +#, c-format +msgid "Base DN for group `%s' is \"%s\".\n" +msgstr "La base DN pour le groupe `%s' est \"%s\".\n" + +#: lib/logging.c:65 +#, c-format +msgid "" +"Cannot open logging plugin:\n" +"%s\n" +msgstr "" +"Impossible d'ouvrir le module de connection :\n" +"%s\n" + +#: lib/logging.c:81 lib/logging.c:99 +#, c-format +msgid "" +"Cannot find symbol `%s':\n" +"%s\n" +msgstr "" +"Impossible de trouver le symbole `%s':\n" +"%s\n" + +#: lib/logging.c:140 +#, c-format +msgid "Error setting up logging subsystem!\n" +msgstr "Erreur de configuration du sous-système de connection !\n" + +#: lib/parse_crypt_arg.c:87 +#, c-format +msgid "Can't open %s for reading: %s\n" +msgstr "Impossible d'ouvrir %s en lecture : %s\n" + +#: lib/parse_crypt_arg.c:95 +#, c-format +msgid "Unable to obtain entropy from %s\n" +msgstr "Impossible d'obtenir l'entropie de %s\n" + +#: lib/parse_crypt_arg.c:110 +#, c-format +msgid "Unable to generate a salt, check your crypt settings.\n" +msgstr "" +"Impossible de générer le \"sel\" du cryptage (\"salt\"), contrôlez les " +"paramètres de chiffrement.\n" + +#: lib/parse_crypt_arg.c:144 +#, c-format +msgid "No support for blowfish compiled in, using MD5.\n" +msgstr "Support de l'algorithme Blowfish non disponible, MD5 utilisé.\n" + +#: lib/parse_crypt_arg.c:149 +#, c-format +msgid "No support for %s available, using DES.\n" +msgstr "%s n'est pas supporté, DES sera utilisé.\n" + +#: lib/passwd_nisplus.c:306 +#, c-format +msgid "Could not determine hostname!\n" +msgstr "Impossible de déterminer le nom d'hôte !\n" + +#: lib/passwd_nisplus.c:322 +#, c-format +msgid "Can't find %s's secret key\n" +msgstr "Impossible de trouver la clef secrète de %s\n" + +#: lib/passwd_nisplus.c:338 lib/passwd_nisplus.c:359 +#, c-format +msgid "Could not get public key for %s!\n" +msgstr "Impossible d'obtenir la clef publique pour %s!\n" + +#: lib/passwd_nisplus.c:348 +#, c-format +msgid "Could not determine the NIS+ root server!\n" +msgstr "Impossible de déterminer le serveur racine NIS+ !\n" + +#: lib/passwd_nisplus.c:366 +#, c-format +msgid "Could not create conversion key!\n" +msgstr "Impossible de créer la clef de conversion !\n" + +#: lib/passwd_nisplus.c:378 +#, c-format +msgid "DES encryption failure\n" +msgstr "Echec de chiffrement DES\n" + +#: lib/passwd_nisplus.c:390 +#, c-format +msgid "rpc.nispasswd not running on %s?\n" +msgstr "le service rpc.nispasswd ne fonctionne pas sur %s ?\n" + +#: lib/passwd_nisplus.c:411 +#, c-format +msgid "ERROR: password incorrect, try again\n" +msgstr "ERREUR: mot de passe incorrect, réessayez\n" + +#: lib/passwd_nisplus.c:413 lib/passwd_nisplus.c:481 +#, c-format +msgid "" +"ERROR: %s\n" +" password not changed\n" +msgstr "" +"ERREUR: %s\n" +" mot de passe inchangé\n" + +#: lib/passwd_nisplus.c:429 lib/passwd_nisplus.c:456 +#, c-format +msgid "DES decryption failure!\n" +msgstr "Echec de décryptage DES !\n" + +#: lib/passwd_nisplus.c:514 +#, c-format +msgid "ERROR: Unknown error, don't know what happened\n" +msgstr "ERREUR: erreur inconnue, impossible de savoir ce qu'il s'est passé !\n" + +#: lib/passwd_nisplus.c:519 +#, c-format +msgid "NIS+ password information changed for %s\n" +msgstr "informations du mot de passe NIS+ modifiées sur %s\n" + +#: lib/passwd_nisplus.c:521 +#, c-format +msgid "NIS+ credential information changed for %s\n" +msgstr "Les informations de certification NIS+ ont été modifiées pour %s\n" + +#: lib/passwd_nisplus.c:590 +#, c-format +msgid "NIS+ passwd table not found: %s\n" +msgstr "table de mots de passe NIS+ (passwd) non trouvée : %s\n" + +#: lib/passwd_nisplus.c:606 +#, c-format +msgid "User not found in NIS+ table.\n" +msgstr "Utilisateur non trouvé dans la table NIS+.\n" + +#: lib/print_error.c:30 src/rpasswd.c:120 src/rpasswdd.c:139 +#, c-format +msgid "Try `%s --help' or `%s --usage' for more information.\n" +msgstr "Essayez `%s --help' ou `%s --usage' pour plus d'informations.\n" + +#: lib/print_version.c:31 src/rpasswd.c:73 src/rpasswdd.c:90 +#, c-format +msgid "" +"Copyright (C) %s Thorsten Kukuk.\n" +"This is free software; see the source for copying conditions. There is NO\n" +"warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n" +msgstr "" +"Copyright (C) %s Thorsten Kukuk.\n" +"Logiciel libre; voir le code source pour les conditions de copie.\n" +"Il n'y a AUCUNE garantie; sans même une garantie implicite de " +"COMMERCIABILITÉ\n" +"ou DE CONFORMITÉ À UNE UTILISATION PARTICULIÈRE.\n" + +#: lib/remove_dir_rec.c:74 +#, c-format +msgid "Cannot remove file `%s': %s\n" +msgstr "Impossible de supprimer le fichier `%s': %s\n" + +#: lib/remove_dir_rec.c:83 +#, c-format +msgid "Cannot remove directory `%s': %s\n" +msgstr "Impossible de supprimer le répertoire `%s': %s\n" + +#: lib/selinux_utils.c:80 +#, c-format +msgid "Couldn't get security context `%s': %s\n" +msgstr "Impossible d'obtenir le contexte de sécurité `%s': %s\n" + +#: lib/selinux_utils.c:88 +#, c-format +msgid "Couldn't get default security context: %s\n" +msgstr "Impossible d'obtenir le contexte de sécurité par défaut : %s\n" + +#: lib/selinux_utils.c:97 +#, c-format +msgid "Couldn't set default security context to `%s': %s\n" +msgstr "Impossible d'écrire le contexte de sécurité par défaut sur `%s': %s\n" + +#: lib/selinux_utils.c:117 +#, c-format +msgid "Couldn't reset default security context to `%s': %s\n" +msgstr "" +"Impossible de réinitialiser le contexte de sécurité par défaut à `%s': %s\n" + +#: lib/user.c:81 +#, c-format +msgid "Can't find the NIS master server: %s\n" +msgstr "Impossible de trouver le serveur NIS maître : %s\n" + +#: lib/user.c:88 +#, c-format +msgid "rpc.yppasswdd not running on NIS master %s.\n" +msgstr "" +"Le service rpc.yppasswdd ne fonctionne pas sur le serveur maître NIS %s.\n" + +#: lib/user.c:94 +#, c-format +msgid "rpc.yppasswdd running on illegal port on NIS master %s.\n" +msgstr "" +"Le service rpc.yppasswdd fonctionne sur un port incorrect du serveur maître " +"NIS %s.\n" + +#: lib/user.c:411 src/groupmod.c:434 src/pwck.c:1082 src/useradd.c:1630 +#: src/userdel.c:569 src/usermod.c:1373 +#, c-format +msgid "Cannot lock password file: already locked.\n" +msgstr "" +"Impossible de verrouiller le fichier de mots de passe : il est déjà " +"verrouillé.\n" + +#: lib/user.c:615 +#, c-format +msgid "User not found (and not deleted): %s\n" +msgstr "Utilisateur non trouvé (et non supprimé) : %s\n" + +#: lib/user.c:858 +#, c-format +msgid " Error while writing `%s': %m\n" +msgstr " Erreur durant l'écriture de `%s': %m\n" + +#: lib/user.c:982 +#, c-format +msgid "Error while changing the NIS data.\n" +msgstr "Erreur durant la modification des données NIS.\n" + +#: lib/user.c:991 +#, c-format +msgid "Error while changing the NIS+ data.\n" +msgstr "Erreur durant la modification des données NIS+.\n" + +#: src/chage.c:56 +#, c-format +msgid "" +"Usage: %s [-D binddn][-P path][-m mindays][-M maxdays][-d lastday][-I " +"inactive][-E expiredate][-W warndays] user\n" +msgstr "" +"Usage: %s [-D binddn][-P chemin][-m minjours][-M maxjours][-d dernierjour][-" +"I inactif][-E dateexpiration][-W avert.jours] utilisateur\n" + +#: src/chage.c:58 +#, c-format +msgid " %s -l user\n" +msgstr " %s -l utilisateur\n" + +#: src/chage.c:66 +#, c-format +msgid "" +"%s - change user password expiry information\n" +"\n" +msgstr "" +"%s - modifie l'expiration du mot de passe de l'utilisateur\n" +"\n" + +#: src/chage.c:70 src/chfn.c:112 src/chpasswd.c:70 src/chsh.c:65 +#: src/gpasswd.c:94 src/groupadd.c:64 src/groupdel.c:64 src/groupmod.c:63 +#: src/passwd.c:401 src/useradd.c:67 src/userdel.c:68 src/usermod.c:67 +msgid " -D binddn Use dn \"binddn\" to bind to the LDAP directory\n" +msgstr "" +" -D binddn Utiliser le dn \"binddn\" pour atteindre le répertoire " +"LDAP\n" + +#: src/chage.c:73 src/chfn.c:115 src/chpasswd.c:73 src/chsh.c:68 +#: src/passwd.c:403 src/pwconv.c:54 src/pwunconv.c:54 +msgid " -P path Search passwd and shadow file in \"path\"\n" +msgstr "" +" -P chemin Recherche les fichiers de mots de passe \"passwd\"\n" +" et \"shadow\" dans \"chemin\"\n" + +#: src/chage.c:76 src/chfn.c:88 src/chfn.c:123 src/chpasswd.c:79 src/chsh.c:74 +#: src/gpasswd.c:93 src/groupmod.c:77 src/passwd.c:400 src/usermod.c:91 +msgid " --service srv Use nameservice 'srv'\n" +msgstr " --service srv Utilise le service de noms \"srv\"\n" + +#: src/chage.c:77 src/chfn.c:86 src/chfn.c:124 src/chsh.c:75 +msgid " -q, --quiet Don't be verbose\n" +msgstr " -q, --quiet Sortie non détaillée\n" + +#: src/chage.c:78 src/chfn.c:89 src/chfn.c:125 src/chpasswd.c:80 src/chsh.c:76 +#: src/expiry.c:52 src/groupadd.c:74 src/groupdel.c:70 src/groupmod.c:78 +#: src/grpck.c:68 src/grpconv.c:43 src/grpunconv.c:63 src/newgrp.c:66 +#: src/pwck.c:68 src/pwconv.c:56 src/pwunconv.c:56 src/useradd.c:92 +#: src/userdel.c:74 src/usermod.c:96 src/vipw.c:72 +msgid " --help Give this help list\n" +msgstr " --help Affiche cette aide\n" + +#: src/chage.c:79 src/chfn.c:90 src/chfn.c:126 src/chpasswd.c:81 src/chsh.c:77 +#: src/expiry.c:53 src/groupdel.c:71 src/grpck.c:69 src/grpconv.c:44 +#: src/grpunconv.c:64 src/newgrp.c:67 src/pwck.c:69 src/pwconv.c:57 +#: src/pwunconv.c:57 src/userdel.c:75 src/vipw.c:73 +msgid " -u, --usage Give a short usage message\n" +msgstr " -u, --usage Affiche un bref message d'utilisation\n" + +#: src/chage.c:80 src/chfn.c:91 src/chfn.c:127 src/chpasswd.c:82 src/chsh.c:78 +#: src/expiry.c:54 src/groupadd.c:76 src/groupdel.c:72 src/groupmod.c:80 +#: src/grpck.c:70 src/grpconv.c:45 src/grpunconv.c:65 src/newgrp.c:68 +#: src/pwck.c:70 src/pwconv.c:58 src/pwunconv.c:58 src/useradd.c:94 +#: src/userdel.c:76 src/usermod.c:98 src/vipw.c:74 +msgid " -v, --version Print program version\n" +msgstr " -v, --version Affiche la version du programme\n" + +#: src/chage.c:81 src/chfn.c:94 src/chfn.c:130 src/chpasswd.c:83 src/chsh.c:81 +#: src/passwd.c:409 +msgid "Valid services are: files, nis, nisplus, ldap\n" +msgstr "Les services valides sont : files, nis, nisplus, ldap\n" + +#: src/chage.c:109 +#, c-format +msgid "Minimum:\t%ld\n" +msgstr "Minimum:\t%ld\n" + +#: src/chage.c:110 +#, c-format +msgid "Maximum:\t%ld\n" +msgstr "Maximum:\t%ld\n" + +#: src/chage.c:111 +#, c-format +msgid "Warning:\t%ld\n" +msgstr "Avertissement:\t%ld\n" + +#: src/chage.c:112 +#, c-format +msgid "Inactive:\t%ld\n" +msgstr "Inactif:\t%ld\n" + +#: src/chage.c:113 +#, c-format +msgid "Last Change:\t\t" +msgstr "Dernier changement:\t\t" + +#: src/chage.c:115 +#, c-format +msgid "Unknown, password is forced to change at next login\n" +msgstr "" +"Inconnu, le mot de passe devra être modifié à la prochaine connection\n" + +#: src/chage.c:117 src/chage.c:123 src/chage.c:129 src/chage.c:135 +#, c-format +msgid "Never\n" +msgstr "Jamais\n" + +#: src/chage.c:120 +#, c-format +msgid "Password Expires:\t" +msgstr "Expiration du mot de passe:\t" + +#: src/chage.c:126 +#, c-format +msgid "Password Inactive:\t" +msgstr "Mot de passe inactif:\t" + +#: src/chage.c:133 +#, c-format +msgid "Account Expires:\t" +msgstr "Expiration du compte:\t" + +#: src/chage.c:147 +msgid "Minimum Password Age" +msgstr "Durée de vie minimale du mot de passe" + +#: src/chage.c:154 src/chage.c:170 src/chage.c:186 +#, c-format +msgid "Input is no integer value\n" +msgstr "La valeur saisie n'est pas une valeur entière\n" + +#: src/chage.c:156 src/chage.c:172 src/chage.c:188 +#, c-format +msgid "Negative numbers are not allowed as input (except -1)\n" +msgstr "La saisie de nombres négatifs (sauf -1) n'est pas autorisée\n" + +#: src/chage.c:163 +msgid "Maximum Password Age" +msgstr "Durée de vie maximale du mot de passe" + +#: src/chage.c:179 +msgid "Password Expiration Warning" +msgstr "Avertissement d'expiration du mot de passe" + +#: src/chage.c:195 +msgid "Password Inactive" +msgstr "Mot de passe inactif" + +#: src/chage.c:203 +msgid "Last Password Change (YYYY-MM-DD)" +msgstr "Dernière modification du mot de passe (YYYY-MM-DD)" + +#: src/chage.c:217 src/chage.c:237 +#, c-format +msgid "Invalid date\n" +msgstr "Date invalide\n" + +#: src/chage.c:223 +msgid "Account Expiration Date (YYYY-MM-DD)" +msgstr "Date d'expiration du compte (YYYY-MM-DD)" + +#: src/chage.c:340 src/chfn.c:478 src/chsh.c:337 +#, c-format +msgid "Only root is allowed to specify another path\n" +msgstr "Seul le superutilisateur peut spécifier un autre chemin\n" + +#: src/chage.c:370 src/chfn.c:439 src/chpasswd.c:171 src/chsh.c:320 +#: src/gpasswd.c:197 src/groupadd.c:376 src/groupdel.c:224 src/groupmod.c:300 +#: src/passwd.c:523 src/useradd.c:1403 src/userdel.c:454 src/usermod.c:978 +#, c-format +msgid "Service `%s' not supported.\n" +msgstr "Service `%s' non supporté.\n" + +#: src/chage.c:395 src/chfn.c:510 src/chpasswd.c:208 src/chsh.c:363 +#: src/chsh.c:370 src/expiry.c:247 src/gpasswd.c:230 src/groupadd.c:413 +#: src/groupdel.c:249 src/groupmod.c:333 src/grpck.c:806 src/grpconv.c:100 +#: src/grpunconv.c:197 src/newgrp.c:155 src/passwd.c:589 src/pwck.c:1068 +#: src/pwconv.c:170 src/pwunconv.c:144 src/rpasswd.c:491 src/rpasswdd.c:1339 +#: src/useradd.c:1511 src/userdel.c:479 src/usermod.c:1014 src/vipw.c:410 +#, c-format +msgid "%s: Too many arguments.\n" +msgstr "%s: Trop d'arguments.\n" + +#: src/chage.c:402 +#, c-format +msgid "%s: Do not include \"l\" with other flags\n" +msgstr "%s: Ne pas mettre \"l\" avec les autres drapeaux\n" + +#: src/chage.c:427 src/chfn.c:531 src/chsh.c:397 src/expiry.c:267 +#: src/gpasswd.c:265 src/groupadd.c:450 src/groupdel.c:278 src/groupmod.c:362 +#: src/passwd.c:656 src/useradd.c:1545 src/userdel.c:507 src/usermod.c:1048 +#, c-format +msgid "%s: Cannot determine your user name.\n" +msgstr "%s: Impossible de déterminer votre nom d'utilisateur.\n" + +#: src/chage.c:446 src/chfn.c:566 src/chsh.c:431 src/userdel.c:527 +#, c-format +msgid "%s: User `%s' is not known to service `%s'.\n" +msgstr "%s: L'utilisateur `%s' n'est pas connu du service `%s'.\n" + +#: src/chage.c:449 src/chfn.c:555 src/chfn.c:569 src/chsh.c:421 src/chsh.c:434 +#: src/passwd.c:675 src/passwd.c:696 src/userdel.c:530 +#, c-format +msgid "%s: Unknown user `%s'.\n" +msgstr "%s: Utilisateur inconnu `%s'.\n" + +#: src/chage.c:467 +#, c-format +msgid "Only an administrator is allowed to change aging information.\n" +msgstr "Seul un administrateur peut modifier l'information de durée de vie.\n" + +#: src/chage.c:483 +#, c-format +msgid "This system does not support shadow accounts.\n" +msgstr "Ce système ne supporte pas les comptes \"shadow\".\n" + +#: src/chage.c:489 +#, c-format +msgid "This account does not have a shadow entry.\n" +msgstr "Ce compte n'a pas d'entrée \"shadow\".\n" + +#: src/chage.c:535 +#, c-format +msgid "You can only list your own aging information.\n" +msgstr "" +"Vous pouvez seulement afficher vos propres informations d'ancienneté.\n" + +#: src/chage.c:542 src/expiry.c:306 src/passwd.c:1019 +#, c-format +msgid "%s: Failed to drop privileges: %s\n" +msgstr "%s: Echec de suppression des privilèges: %s\n" + +#: src/chage.c:554 +#, c-format +msgid "No aging information available for %s.\n" +msgstr "Pas d'information d'ancienneté disponible pour %s.\n" + +#: src/chage.c:574 +#, c-format +msgid "Changing aging information for %s.\n" +msgstr "Changement de l'ancienneté pour %s.\n" + +#: src/chage.c:580 src/chage.c:667 +#, c-format +msgid "Aging information not changed.\n" +msgstr "Informations d'ancienneté non modifiées.\n" + +#: src/chage.c:623 +#, c-format +msgid "Lastday is no date and no integer value >= -1\n" +msgstr "dernier_jour n'est ni une date ni un entier >= -1\n" + +#: src/chage.c:643 +#, c-format +msgid "Expiredate is no date and no integer value >= -1\n" +msgstr "La date d'expiration n'est ni une date ni un entier >= -1\n" + +#: src/chage.c:652 +#, c-format +msgid "Error while parsing options.\n" +msgstr "Erreur lors de l'analyse des options.\n" + +#: src/chage.c:698 +#, c-format +msgid "Error while converting to shadow account.\n" +msgstr "Erreur durant la convertion en compte \"shadow\".\n" + +#: src/chage.c:716 +#, c-format +msgid "Error while changing aging information.\n" +msgstr "Erreur lors du changement de l'information d'ancienneté.\n" + +#: src/chage.c:726 +#, c-format +msgid "Aging information changed.\n" +msgstr "Informations d'ancienneté modifiées.\n" + +#: src/chfn.c:71 +#, c-format +msgid "" +"Usage: %s [-f name] [-r room] [-w work_phone]\n" +" [-h home_phone] [-o other] [-q] [-u] [-v] [user]\n" +msgstr "" +"Usage: %s [-f nom_complet] [-r bureau] [-w tel_pro]\n" +" [-h tel_perso] [-o autre] [-q] [-u] [-v] [utilisateur]\n" + +#: src/chfn.c:79 src/chfn.c:109 +#, c-format +msgid "" +"%s - change user name and information\n" +"\n" +msgstr "" +"%s - modifie le nom et les informations d'un utilisateur\n" +"\n" + +#: src/chfn.c:81 src/chfn.c:117 +msgid " -f full-name Change your real name\n" +msgstr " -f nom_complet Modifie votre nom (d'état civil)\n" + +#: src/chfn.c:82 +msgid " -r room Change your office room number\n" +msgstr " -r bureau Modifie votre numéro de bureau\n" + +#: src/chfn.c:83 +msgid " -w work_phone Change your office phone number\n" +msgstr "" +" -w tel_pro Modifie votre numéro de téléphone professionnel\n" + +#: src/chfn.c:84 +msgid " -h home_phone Change your home phone number\n" +msgstr " -h tel_perso Modifie votre numéro de téléphone personnel\n" + +#: src/chfn.c:85 +msgid " -o other Change the undefined portions of the GECOS field\n" +msgstr " -o autre Modifie des zones non déterminées des champs GECOS\n" + +#: src/chfn.c:101 +#, c-format +msgid "" +"Usage: %s [-D binddn] [-P path] [-f name] [-o office] [-p office-phone]\n" +" [-h home-phone][-m other] [-q] [-u] [-v] [user]\n" +msgstr "" +"Usage: %s [-D dn] [-P chemin] [-f nom] [-o bureau] [-p tel_pro]\n" +" [-h tel_perso][-m autre] [-q] [-u] [-v] [utilisateur]\n" + +#: src/chfn.c:118 +msgid " -o office Change your office room number\n" +msgstr " -o bureau Modifie votre numéro de bureau\n" + +#: src/chfn.c:119 +msgid " -p phone Change your office phone number\n" +msgstr " -p tel_pro Modifie votre numéro de téléphone professionnel\n" + +#: src/chfn.c:120 +msgid " -h home-phone Change your home phone number\n" +msgstr " -h tel_perso Modifie votre numéro de téléphone personnel\n" + +#: src/chfn.c:121 +msgid " -m other Change the undefined portions of the GECOS field\n" +msgstr " -m autre Modifie des zones non déterminées des champs GECOS\n" + +#: src/chfn.c:165 +#, c-format +msgid "Enter the new value, or press ENTER for the default\n" +msgstr "" +"Entrez la nouvelle valeur, ou pressez ENTREE pour la valeur par défaut\n" + +#: src/chfn.c:171 +msgid "Full Name" +msgstr "Nom complet" + +#: src/chfn.c:173 +#, c-format +msgid "\tFull Name: %s\n" +msgstr "\tNom complet: %s\n" + +#: src/chfn.c:176 +msgid "Room Number" +msgstr "Numéro de bureau" + +#: src/chfn.c:178 +#, c-format +msgid "\tRoom Number: %s\n" +msgstr "\tNuméro de bureau: %s\n" + +#: src/chfn.c:181 +msgid "Work Phone" +msgstr "Téléphone professionnel" + +#: src/chfn.c:183 +#, c-format +msgid "\tWork Phone: %s\n" +msgstr "\tTéléphone professionnel: %s\n" + +#: src/chfn.c:186 +msgid "Home Phone" +msgstr "Téléphone personnel" + +#: src/chfn.c:188 +#, c-format +msgid "\tHome Phone: %s\n" +msgstr "\tTéléphone personnel: %s\n" + +#: src/chfn.c:191 +msgid "Other" +msgstr "Autre" + +#: src/chfn.c:193 +#, c-format +msgid "\tOther: %s\n" +msgstr "\tAutre: %s\n" + +#: src/chfn.c:255 +#, c-format +msgid "%s: The characters '%s\"' are not allowed.\n" +msgstr "%s: Les caractères '%s\"' ne sont pas autorisés.\n" + +#: src/chfn.c:261 src/chsh.c:204 +#, c-format +msgid "%s: Control characters are not allowed.\n" +msgstr "%s: Les caractères de contrôle ne sont pas autorisés.\n" + +#: src/chfn.c:331 src/chsh.c:257 +#, c-format +msgid "%s: Don't know what I should do.\n" +msgstr "%s: Impossible de savoir quoi faire.\n" + +#: src/chfn.c:377 src/chfn.c:395 src/chfn.c:407 src/chfn.c:451 src/chfn.c:460 +#: src/gpasswd.c:296 src/passwd.c:614 src/passwd.c:628 +#, c-format +msgid "%s: Permission denied.\n" +msgstr "%s: Permission rejetée.\n" + +#: src/chfn.c:586 src/chsh.c:451 src/passwd.c:712 +msgid "Unknown user context" +msgstr "Contexte d'utilisateur inconnu" + +#: src/chfn.c:588 +#, c-format +msgid "%s: %s is not authorized to change the finger information for %s.\n" +msgstr "" +"%s: %s n'est pas autorisé à changer les informations du service \"finger\" " +"pour %s.\n" + +#: src/chfn.c:601 +#, c-format +msgid "SELinux is in permissive mode, continuing.\n" +msgstr "SELinux est en mode permissif, suite des opérations.\n" + +#: src/chfn.c:619 +#, c-format +msgid "You cannot change the finger information for `%s'.\n" +msgstr "" +"Vous ne pouvez pas modifier les informations du service \"finger\" pour `%" +"s'.\n" + +#: src/chfn.c:626 +#, c-format +msgid "Changing finger information for %s.\n" +msgstr "Changement des informations du service \"finger\" pour %s.\n" + +#: src/chfn.c:658 +#, c-format +msgid "%s: Invalid name: `%s'\n" +msgstr "%s: Nom incorrect: `%s'\n" + +#: src/chfn.c:666 +#, c-format +msgid "%s: Invalid room number: `%s'\n" +msgstr "%s: Numéro de bureau incorrect: `%s'\n" + +#: src/chfn.c:674 +#, c-format +msgid "%s: Invalid work phone: `%s'\n" +msgstr "%s: Téléphone professionnel incorrect: `%s'\n" + +#: src/chfn.c:682 +#, c-format +msgid "%s: Invalid home phone: `%s'\n" +msgstr "%s: Téléphone personnel incorrect: `%s'\n" + +#: src/chfn.c:690 +#, c-format +msgid "%s: `%s' contains illegal characters.\n" +msgstr "%s: `%s' contient des caractères non valides.\n" + +#: src/chfn.c:716 +#, c-format +msgid "Finger information not changed.\n" +msgstr "Informations du service \"finger\" non modifiées.\n" + +#: src/chfn.c:724 +#, c-format +msgid "Error while changing finger information.\n" +msgstr "" +"Erreur durant la modification des informations du service \"finger\".\n" + +#: src/chfn.c:734 +#, c-format +msgid "Finger information changed.\n" +msgstr "Informations du service \"finger\" modifiées.\n" + +#: src/chpasswd.c:59 +#, c-format +msgid "Usage: %s [-D binddn] [-P path] [-e] [-c des|md5|blowfish] [file]\n" +msgstr "" +"Usage: %s [-D binddn] [-P chemin] [-e] [-c des|md5|blowfish] [fichier]\n" + +#: src/chpasswd.c:67 +#, c-format +msgid "" +"%s - update password entries in batch\n" +"\n" +msgstr "" +"%s - met à jour les entrées de mots de passe dans le traitement\n" +"\n" + +#: src/chpasswd.c:75 +msgid "" +" -c, --crypt Password should be encrypted with DES, MD5 or blowfish\n" +msgstr " -c, --crypt Mots de passe chiffrés avec DES, MD5 ou blowfish\n" + +#: src/chpasswd.c:77 +msgid " -e, --encrypted The passwords are in encrypted form\n" +msgstr " -e, --encrypted Les mots de passe sont cryptés\n" + +#: src/chpasswd.c:278 +#, c-format +msgid "%s: line %ld: missing new password\n" +msgstr "%s: ligne %ld: nouveau mot de passe manquant\n" + +#: src/chpasswd.c:287 +#, c-format +msgid "%s: line %ld: unknown user %s\n" +msgstr "%s: ligne %ld: utilisateur inconnu %s\n" + +#: src/chpasswd.c:318 src/gpasswd.c:425 +#, c-format +msgid "Cannot create salt for standard crypt" +msgstr "Impossible de générer le \"sel\" (salt) de chiffrement standard" + +#: src/chpasswd.c:334 src/gpasswd.c:460 +#, c-format +msgid "Cannot create salt for MD5 crypt" +msgstr "Impossible de générer le \"sel\" (salt) de chiffrement MD5" + +#: src/chpasswd.c:350 src/gpasswd.c:441 +#, c-format +msgid "Cannot create salt for blowfish crypt" +msgstr "Impossible de générer le \"sel\" (salt) de chiffrement Blowfish" + +#: src/chpasswd.c:380 +#, c-format +msgid "%s: line %ld: cannot update password entry\n" +msgstr "%s: ligne %ld: impossible de mettre à jour l'entrée de mot de passe\n" + +#: src/chpasswd.c:395 +#, c-format +msgid "%s: errors occurred, %ld passwords not updated\n" +msgstr "%s: erreurs, %ld mots de passe non mis à jour\n" + +#: src/chsh.c:54 +#, c-format +msgid "" +"Usage: %s [-D binddn] [-P path] [-s shell] [-l] [-q]\n" +" [--help] [--usage] [--version] [user]\n" +msgstr "" +"Usage: %s [-D binddn] [-P chemin] [-s shell] [-l] [-q]\n" +" [--help] [--usage] [--version] [utilisateur]\n" + +#: src/chsh.c:62 +#, c-format +msgid "" +"%s - change login shell\n" +"\n" +msgstr "" +"%s - change l'interpréteur de commandes (shell) de connection\n" +"\n" + +#: src/chsh.c:70 +msgid " -l List allowed shells from /etc/shells\n" +msgstr "" +" -l Liste les interpréteurs de commande (shell) autorisés " +"depuis /etc/shells\n" + +#: src/chsh.c:72 +msgid " -s shell Use 'shell' as new login shell\n" +msgstr "" +" -s shell Utilise \"shell\" comme nouvel interpréteur de commandes de " +"connection\n" + +#: src/chsh.c:109 +#, c-format +msgid "No known shells.\n" +msgstr "Aucun interpréteur de commandes connu.\n" + +#: src/chsh.c:177 +#, c-format +msgid "%s: Shell must be a full path name.\n" +msgstr "%s: chemin complet attendu pour l'interpréteur de commandes (shell).\n" + +#: src/chsh.c:183 +#, c-format +msgid "%s: `%s' does not exist.\n" +msgstr "%s: `%s' n'existe pas.\n" + +#: src/chsh.c:189 +#, c-format +msgid "%s: `%s' is not executable.\n" +msgstr "%s: `%s' n'est pas exécutable.\n" + +#: src/chsh.c:199 +#, c-format +msgid "%s: '%c' is not allowed.\n" +msgstr "%s: '%c' non autorisé.\n" + +#: src/chsh.c:212 +#, c-format +msgid "Warning: \"%s\" is not listed in /etc/shells.\n" +msgstr "Attention: \"%s\" n'est pas listé dans /etc/shells.\n" + +#: src/chsh.c:215 +#, c-format +msgid "%s: \"%s\" is not listed in /etc/shells.\n" +msgstr "%s: \"%s\" n'est pas listé dans /etc/shells.\n" + +#: src/chsh.c:217 +#, c-format +msgid "%s: Use -l option to see list.\n" +msgstr "%s: Utiliser l'option -l pour voir la liste.\n" + +#: src/chsh.c:453 +#, c-format +msgid "%s: %s is not authorized to change the shell of `%s'.\n" +msgstr "" +"%s: %s n'est pas autorisé à modifier l'interpréteur de commandes (shell) de `" +"%s'.\n" + +#: src/chsh.c:466 src/passwd.c:728 +#, c-format +msgid "SELinux is in permissive mode, continuing\n" +msgstr "SELinux est en mode permissif, poursuite des opérations\n" + +#: src/chsh.c:484 +#, c-format +msgid "You cannot change the shell for %s.\n" +msgstr "" +"Vous ne pouvez pas modifier l'interpréteur de commandes (shell) pour %s.\n" + +#: src/chsh.c:495 +#, c-format +msgid "You cannot change a restricted shell.\n" +msgstr "" +"Vous ne pouvez pas modifier un interpréteur de commandes (shell) restreint.\n" + +#: src/chsh.c:501 +#, c-format +msgid "Changing login shell for %s.\n" +msgstr "Changement du \"shell\" de connection pour %s.\n" + +#: src/chsh.c:545 +#, c-format +msgid "Enter the new value, or press return for the default.\n" +msgstr "" +"Saisissez une nouvelle valeur, ou pressez \"entrée\" pour la valeur par " +"défaut.\n" + +#: src/chsh.c:546 +msgid "Login Shell" +msgstr "\"shell\" de connection" + +#: src/chsh.c:554 +#, c-format +msgid "Shell not changed.\n" +msgstr "\"shell\" non modifié.\n" + +#: src/chsh.c:568 +#, c-format +msgid "Error while changing login shell.\n" +msgstr "Erreur lors du changement du \"shell\" de connection.\n" + +#: src/chsh.c:578 +#, c-format +msgid "Shell changed.\n" +msgstr "\"shell\" modifié.\n" + +#: src/expiry.c:40 +#, c-format +msgid "Usage: %s [-f]\n" +msgstr "Usage: %s [-f]\n" + +#: src/expiry.c:48 +#, c-format +msgid "" +"%s - check password expiration and enforce password change\n" +"\n" +msgstr "" +"%s - contrôle l'expiration du mot de passe et fait respecter les obligations " +"de changement\n" +"\n" + +#: src/expiry.c:50 +msgid " -f, --force The caller is forced to change the password\n" +msgstr " -f, --force Force le changement du mot de passe\n" + +#: src/expiry.c:100 +#, c-format +msgid "Age field for %s is wrong" +msgstr "Le champ \"ancienneté\" pour %s est erroné." + +#: src/expiry.c:121 +#, c-format +msgid "Your password has expired. Choose a new password." +msgstr "Votre mot de passe a expiré. Choisissez-en un nouveau." + +#: src/expiry.c:139 +#, c-format +msgid "Your login has expired. Contact the system administrator.\n" +msgstr "" +"Votre identifiant de connection (login) a expiré. Contactez votre " +"administrateur système.\n" + +#: src/expiry.c:147 +#, c-format +msgid "Password changing requested. Choose a new password.\n" +msgstr "Changement de mot de passe demandé. Choisissez-en un nouveau.\n" + +#: src/expiry.c:157 +#, c-format +msgid "Your password is inactive. Contact the system administrator.\n" +msgstr "Mot de passe inactif. Contactez l'administrateur système.\n" + +#: src/expiry.c:162 +#, c-format +msgid "Your password has expired. Choose a new password.\n" +msgstr "Votre mot de passe a expiré. Choisissez-en un nouveau.\n" + +#: src/expiry.c:171 +#, c-format +msgid "Your password will expire in %ld days.\n" +msgstr "Votre mot de passe expirera dans %ld jours.\n" + +#: src/expiry.c:174 +#, c-format +msgid "Your password will expire tomorrow.\n" +msgstr "Votre mot de passe expire demain.\n" + +#: src/expiry.c:176 +#, c-format +msgid "Your password will expire within 24 hours.\n" +msgstr "Votre mot de passe expirera dans 24 heures.\n" + +#: src/gpasswd.c:63 src/passwd.c:796 +#, c-format +msgid "%s: error reading from stdin!\n" +msgstr "%s: erreur de lecture depuis stdin!\n" + +#: src/gpasswd.c:80 +#, c-format +msgid "Usage: %s [-r|-l|-u] group\n" +msgstr "Usage: %s [-r|-l|-u] groupe\n" + +#: src/gpasswd.c:87 +#, c-format +msgid "" +"%s - change group password\n" +"\n" +msgstr "" +"%s - change le mot de passe du groupe\n" +"\n" + +#: src/gpasswd.c:88 +msgid " -r Remove the password for this group\n" +msgstr " -r Supprime le mot de passe de ce groupe\n" + +#: src/gpasswd.c:89 +msgid " -l Locks the password entry for \"group\"\n" +msgstr " -l Verrouille le mot de passe pour ce groupe\n" + +#: src/gpasswd.c:91 +msgid " -u Try to unlock the password entry for \"group\"\n" +msgstr " -u Essaye de déverrouiller le mot de passe du groupe\n" + +#: src/gpasswd.c:96 +msgid " -P path Search group file in \"path\"\n" +msgstr " -P chemin Cherche le fichier de groupe dans \"chemin\"\n" + +#: src/gpasswd.c:98 src/passwd.c:406 src/rpasswd.c:111 src/rpasswdd.c:130 +msgid " --help Give this help list\n" +msgstr " --help Affiche cette aide\n" + +#: src/gpasswd.c:99 src/passwd.c:407 src/rpasswd.c:112 src/rpasswdd.c:131 +msgid " --usage Give a short usage message\n" +msgstr " --usage Affiche un bref message d'utilisation\n" + +#: src/gpasswd.c:100 src/passwd.c:408 src/rpasswd.c:113 src/rpasswdd.c:132 +msgid " --version Print program version\n" +msgstr " --version Affiche la version du programme\n" + +#: src/gpasswd.c:101 +msgid " --stdin Receive input from stdin instead of /dev/tty\n" +msgstr "" +" --stdin Reçoit les entrées depuis le flux stdin au lieu de /dev/" +"tty\n" + +#: src/gpasswd.c:102 +msgid "Valid services for -r are: files, nis, nisplus, ldap\n" +msgstr "Les services valides pour -r sont : files, nis, nisplus, ldap\n" + +#: src/gpasswd.c:238 +#, c-format +msgid "%s: Group argument missing.\n" +msgstr "%s: Argument de groupe manquant.\n" + +#: src/gpasswd.c:277 +#, c-format +msgid "%s: Group `%s' is not known to service `%s'.\n" +msgstr "%s: Le groupe `%s' n'est pas connu du service `%s'.\n" + +#: src/gpasswd.c:280 src/groupdel.c:300 src/groupmod.c:384 src/useradd.c:220 +#: src/usermod.c:185 +#, c-format +msgid "%s: Unknown group `%s'.\n" +msgstr "%s: Groupe inconnu `%s'.\n" + +#: src/gpasswd.c:314 src/passwd.c:909 src/usermod.c:1125 +#, c-format +msgid "Cannot unlock the password for `%s'!\n" +msgstr "Impossible de déverrouiller le mot de passe pour `%s'!\n" + +#: src/gpasswd.c:336 src/passwd.c:936 src/usermod.c:1104 +#, c-format +msgid "Password for `%s' is already locked!\n" +msgstr "Le mot de passe pour `%s' est déjà verrouillé!\n" + +#: src/gpasswd.c:348 +#, c-format +msgid "Changing the password for group %s.\n" +msgstr "Changement du mot de passe pour le groupe %s.\n" + +#: src/gpasswd.c:355 src/gpasswd.c:357 +msgid "New Password: " +msgstr "Nouveau mot de passe: " + +#: src/gpasswd.c:366 +#, c-format +msgid "Password change aborted.\n" +msgstr "Abandon du changement de mot de passe.\n" + +#: src/gpasswd.c:379 src/gpasswd.c:381 +msgid "Re-enter new password: " +msgstr "Re-saisissez le nouveau mot de passe: " + +#: src/gpasswd.c:392 +#, c-format +msgid "Sorry, passwords do not match.\n" +msgstr "Désolé, les mots de passe ne correspondent pas.\n" + +#: src/gpasswd.c:400 +#, c-format +msgid "%s: Try again later.\n" +msgstr "%s: réessayez plus tard.\n" + +#: src/gpasswd.c:448 +#, c-format +msgid "No support for blowfish compiled in. Using MD5\n" +msgstr "L'algorithme Blowfish n'est pas supporté. MD5 utilisé\n" + +#: src/gpasswd.c:475 +#, c-format +msgid "%s: Error changing password.\n" +msgstr "%s: Erreur lors du changement du mot de passe.\n" + +#: src/gpasswd.c:484 +#, c-format +msgid "Password removed.\n" +msgstr "Mot de passe supprimé.\n" + +#: src/gpasswd.c:490 src/passwd.c:978 +#, c-format +msgid "Password changed.\n" +msgstr "Mot de passe modifié.\n" + +#: src/groupadd.c:54 +#, c-format +msgid "" +"Usage: %s [-D binddn] [-g gid [-o]] [-r] [-P path] [-p password] group\n" +msgstr "" +"Usage: %s [-D dn] [-g gid [-o]] [-r] [-P chemin] [-p mot_de_passe] groupe\n" + +#: src/groupadd.c:62 +#, c-format +msgid "" +"%s - create a new group\n" +"\n" +msgstr "" +"%s - crée un nouveau groupe\n" +"\n" + +#: src/groupadd.c:65 +msgid " -g gid Force the new groupid to be the given number\n" +msgstr "" +" -g gid Positionne le nouvel identifiant de groupe à \"gid\"\n" + +#: src/groupadd.c:67 src/groupmod.c:70 src/useradd.c:80 src/usermod.c:79 +msgid " -o Allow duplicate (non-unique) UID\n" +msgstr " -o Autorise les doublons UID (non uniques)\n" + +#: src/groupadd.c:68 src/groupdel.c:67 src/groupmod.c:71 src/grpck.c:61 +#: src/pwck.c:61 src/useradd.c:81 src/userdel.c:71 src/usermod.c:84 +msgid " -P path Search passwd, shadow and group file in \"path\"\n" +msgstr "" +" -P chemin Recherche les fichiers \"passwd\", \"shadow\" et de groupe " +"dans \"chemin\"\n" + +#: src/groupadd.c:70 src/groupmod.c:73 src/useradd.c:83 src/usermod.c:86 +msgid " -p password Encrypted password as returned by crypt(3)\n" +msgstr "" +" -p mot_de_passe Mot de passe chiffré tel que produit par crypt(3)\n" + +#: src/groupadd.c:72 src/useradd.c:89 +msgid " -r, --system Create a system account\n" +msgstr " -r, --system Crée un compte système\n" + +#: src/groupadd.c:73 src/groupdel.c:69 src/useradd.c:91 src/userdel.c:73 +msgid " --service srv Add account to nameservice 'srv'\n" +msgstr " --service srv Ajoute le compte au service de noms \"srv\"\n" + +#: src/groupadd.c:75 src/groupmod.c:79 src/useradd.c:93 src/usermod.c:97 +msgid " --usage Give a short usage message\n" +msgstr " --usage Affiche un bref message d'utilisation\n" + +#: src/groupadd.c:77 src/groupdel.c:73 src/useradd.c:95 src/userdel.c:77 +msgid "Valid services for --service are: files, ldap\n" +msgstr "Les services valides pour --service sont : files, ldap\n" + +#: src/groupadd.c:257 +#, c-format +msgid "%s: Can't get unique gid in range %u - %u.\n" +msgstr "%s: Impossible d'obtenir un gid unique dans l'intervalle %u - %u.\n" + +#: src/groupadd.c:312 +#, c-format +msgid "%s: You are using an undocumented option (-f)!\n" +msgstr "%s: Vous utilisez une option non documentée (-f)!\n" + +#: src/groupadd.c:320 src/groupadd.c:330 +#, c-format +msgid "%s: Invalid numeric argument `%s' for Group ID.\n" +msgstr "%s: Argument numérique non valide `%s' pour l'ID de groupe.\n" + +#: src/groupadd.c:352 src/useradd.c:1328 src/usermod.c:925 +#, c-format +msgid "%s: Invalid characters in password `%s'.\n" +msgstr "%s: Caractères non valides dans le mot de passe `%s'.\n" + +#: src/groupadd.c:398 +#, c-format +msgid "%s: You cannot use --gid and --preferred-gid at the same time.\n" +msgstr "%s : impossible d'utiliser --gid et --preferred-gid simultanément.\n" + +#: src/groupadd.c:419 src/groupdel.c:255 src/groupmod.c:339 src/useradd.c:1517 +#: src/userdel.c:485 src/usermod.c:1020 +#, c-format +msgid "%s: Too few arguments.\n" +msgstr "%s: Pas assez d'arguments.\n" + +#: src/groupadd.c:425 +#, c-format +msgid "%s: You cannot use -f with -o.\n" +msgstr "%s: Impossible d'utiliser -f avec -o.\n" + +#: src/groupadd.c:474 +#, c-format +msgid "%s: GID %u is not unique, using another one.\n" +msgstr "%s: le GID %u n'est pas unique, un autre est utilisé.\n" + +#: src/groupadd.c:484 src/groupmod.c:398 +#, c-format +msgid "%s: GID %u is not unique.\n" +msgstr "%s: le GID %u n'est pas unique.\n" + +#: src/groupadd.c:495 src/groupmod.c:411 +#, c-format +msgid "%s: Invalid group name `%s'.\n" +msgstr "%s: Nom de groupe non valide `%s'.\n" + +#: src/groupadd.c:513 src/groupmod.c:421 +#, c-format +msgid "%s: Group `%s' already exists.\n" +msgstr "%s: Le groupe `%s' existe déjà.\n" + +#: src/groupadd.c:555 +#, c-format +msgid "%s: Cannot add group to LDAP database without DN.\n" +msgstr "" +"%s: Impossible d'ajouter le groupe à la base LDAP sans connaître le DN.\n" + +#: src/groupadd.c:572 +#, c-format +msgid "%s: Group not added to LDAP database.\n" +msgstr "%s: Groupe non ajouté à la base LDAP.\n" + +#: src/groupadd.c:604 +#, c-format +msgid "%s: GROUPADD_CMD fails with exit code %d.\n" +msgstr "%s: échec de GROUPADD_CMD avec code de sortie %d.\n" + +#: src/groupdel.c:54 +#, c-format +msgid "Usage: %s [-D binddn] [-P path] group\n" +msgstr "Usage: %s [-D dn] [-P chemin] groupe\n" + +#: src/groupdel.c:61 +#, c-format +msgid "" +"%s - delete a group\n" +"\n" +msgstr "" +"%s - efface un groupe\n" +"\n" + +#: src/groupdel.c:130 src/groupdel.c:147 +#, c-format +msgid "%s: GID `%u' is primary group of `%s'.\n" +msgstr "%s: le GID `%u' correspond au groupe primaire de `%s'.\n" + +#: src/groupdel.c:297 src/groupmod.c:381 src/useradd.c:214 src/usermod.c:179 +#, c-format +msgid "%s: Group `%s' not found in service `%s'.\n" +msgstr "%s: Le groupe `%s' n'a pas été trouvé par le service `%s'.\n" + +#: src/groupdel.c:310 +#, c-format +msgid "%s: Cannot remove user's primary group.\n" +msgstr "%s: Impossible de supprimer le groupe primaire de l'utilisateur.\n" + +#: src/groupdel.c:325 +#, c-format +msgid "%s: Cannot delete group from LDAP database without DN.\n" +msgstr "%s: Impossible de supprimer un groupe de la base LDAP sans le DN.\n" + +#: src/groupdel.c:342 +#, c-format +msgid "%s: Group not deleted from LDAP database.\n" +msgstr "%s: Groupe non supprimé dans la base LDAP.\n" + +#: src/groupdel.c:355 +#, c-format +msgid "%s: GROUPDEL_PRECMD fails with exit code %d.\n" +msgstr "%s: échec de GROUPDEL_PRECMD avec code de sortie %d.\n" + +#: src/groupdel.c:373 +#, c-format +msgid "%s: Error deleting group `%s'.\n" +msgstr "%s: Erreur durant la suppression du groupe `%s'.\n" + +#: src/groupdel.c:397 +#, c-format +msgid "%s: GROUPDEL_POSTCMD fails with exit code %d.\n" +msgstr "%s: échec de GROUPDEL_POSTCMD avec code de sortie %d.\n" + +#: src/groupmod.c:54 +#, c-format +msgid "Usage: %s [-g gid [-o]] [-n new_name] group\n" +msgstr "Usage: %s [-g gid [-o]] [-n nouveau_nom] groupe\n" + +#: src/groupmod.c:61 +#, c-format +msgid "" +"%s - modify a group entry\n" +"\n" +msgstr "" +"%s - modifie une entrée de groupe\n" +"\n" + +#: src/groupmod.c:65 +msgid " -g gid Change the groupid to the given number\n" +msgstr " -g gid Positionne l'identifiant de groupe à \"gid\"\n" + +#: src/groupmod.c:67 src/useradd.c:76 +msgid " -k skeldir Specify an alternative skel directory\n" +msgstr " -k skeldir Specify an alternative skel directory\n" + +#: src/groupmod.c:69 +msgid " -n name Change group name.\n" +msgstr " -n nom Modifie le nom du groupe.\n" + +#: src/groupmod.c:75 +msgid " -A user Add the user to the group entry\n" +msgstr " -A utilisateur Ajoute l'utilisateur au groupe\n" + +#: src/groupmod.c:76 +msgid " -R user Remove the user from the group entry\n" +msgstr " -R utilisateur Retire l'utilisateur du groupe\n" + +#: src/groupmod.c:81 src/usermod.c:99 +msgid "Valid services are: files, ldap\n" +msgstr "Les services autorisés sont : files, ldap\n" + +#: src/groupmod.c:245 +#, c-format +msgid "%s: invalid numeric argument `%s' for Group ID.\n" +msgstr "%s: argument numérique invalide `%s' pour l'ID de groupe.\n" + +#: src/groupmod.c:271 +#, c-format +msgid "%s: invalid characters in password `%s'.\n" +msgstr "%s: caractères non valides dans le mot de passe `%s'.\n" + +#: src/groupmod.c:467 +#, c-format +msgid "%s: Cannot modify group in LDAP database without DN.\n" +msgstr "%s: Impossible de modifier le groupe dans la base LDAP sans le DN.\n" + +#: src/groupmod.c:485 +#, c-format +msgid "%s: Group not modified in LDAP database.\n" +msgstr "%s: Groupe non modifié dans la base LDAP.\n" + +#: src/grpck.c:51 +#, c-format +msgid "Usage: %s [-P path] [-q|-r]\n" +msgstr "Usage: %s [-P chemin] [-q|-r]\n" + +#: src/grpck.c:59 +#, c-format +msgid "" +"%s - check integrity of group file\n" +"\n" +msgstr "" +"%s - contrôle l'intégrité du fichier de groupes\n" +"\n" + +#: src/grpck.c:63 src/pwck.c:63 +msgid " -q, --quiet Don't print warnings, only errors\n" +msgstr "" +" -q, --quiet N'affiche pas les avertissements, seulement les erreurs\n" + +#: src/grpck.c:64 src/pwck.c:64 +msgid " -r, --read-only Run in read-only mode, don't make changes\n" +msgstr "" +" -r, --read-only Fonctionnement en lecture seulement, changements non " +"enregistrés\n" + +#: src/grpck.c:66 +msgid " -s, --sort Sort the group file, no checks are done\n" +msgstr " -s, --sort Trie le fichier de groupes, sans vérification\n" + +#: src/grpck.c:78 src/pwck.c:78 +#, c-format +msgid "No\n" +msgstr "Non\n" + +#: src/grpck.c:222 src/pwck.c:229 +#, c-format +msgid "Checking `%s'\n" +msgstr "Contrôle de `%s'\n" + +#: src/grpck.c:337 src/grpck.c:384 +#, c-format +msgid "Invalid group entry.\n" +msgstr "Entrée de groupe non valide.\n" + +#: src/grpck.c:338 src/pwck.c:346 src/pwck.c:616 +#, c-format +msgid "Delete empty line? " +msgstr "Effacer les lignes vides ? " + +#: src/grpck.c:356 +#, c-format +msgid "Invalid group entry with comment.\n" +msgstr "Entrée de groupe avec commentaire non valide.\n" + +#: src/grpck.c:357 src/grpck.c:385 src/grpck.c:402 src/grpck.c:418 +#: src/pwck.c:365 src/pwck.c:381 src/pwck.c:397 src/pwck.c:413 src/pwck.c:635 +#: src/pwck.c:650 src/pwck.c:666 src/pwck.c:682 src/pwck.c:700 +#, c-format +msgid "Delete line `%s'? " +msgstr "Effacer la ligne `%s'? " + +#: src/grpck.c:401 +#, c-format +msgid "Invalid group name `%s'.\n" +msgstr "Nom de groupe non valide `%s'.\n" + +#: src/grpck.c:417 +#, c-format +msgid "Duplicate group entry\n" +msgstr "L'entrée de groupe existe déjà\n" + +#: src/grpck.c:445 +#, c-format +msgid "Group `%s': unknown user `%s'\n" +msgstr "Groupe `%s': utilisateur inconnu `%s'\n" + +#: src/grpck.c:451 +#, c-format +msgid "Group `%s': Duplicate user entry `%s', already primary group.\n" +msgstr "" +"Groupe `%s': l'utilisateur `%s' existe déjà, déjà dans le groupe primaire.\n" + +#: src/grpck.c:812 src/pwck.c:1074 +#, c-format +msgid "%s: -s and -r are incompatibile.\n" +msgstr "%s: -s et -r sont incompatibles.\n" + +#: src/grpconv.c:33 src/grpunconv.c:51 src/pwconv.c:44 src/pwunconv.c:44 +#, c-format +msgid "Usage: %s\n" +msgstr "Usage: %s\n" + +#: src/grpconv.c:40 +#, c-format +msgid "" +"%s - convert to shadow group\n" +"\n" +msgstr "" +"%s - convertion en groupe \"shadow\"\n" +"\n" + +#: src/grpconv.c:105 +#, c-format +msgid "%s: /etc/gshadow is not supported by this system.\n" +msgstr "%s: /etc/gshadow n'est pas supporté sur ce système.\n" + +#: src/grpunconv.c:58 +#, c-format +msgid "" +"%s - convert from shadow groups\n" +"\n" +msgstr "" +"%s - convertion depuis les groupes \"shadow\"\n" +"\n" + +#: src/grpunconv.c:61 +msgid " -P path Search group and gshadow file in \"path\"\n" +msgstr "" +" -P chemin Cherche les groupes et le fichier \"gshadow\" dans \"chemin" +"\"\n" + +#: src/grpunconv.c:219 +#, c-format +msgid "%s: No gshadow file found.\n" +msgstr "%s: Fichier \"gshadow\" non trouvé.\n" + +#: src/grpunconv.c:243 src/pwconv.c:243 src/pwconv.c:267 src/pwunconv.c:190 +#, c-format +msgid "Cannot create backup file `%s': %m\n" +msgstr "Impossible de créer le fichier de sauvegarde `%s': %m\n" + +#: src/grpunconv.c:266 src/pwunconv.c:214 +#, c-format +msgid "Error while moving password for `%s'.\n" +msgstr "Erreur de transformation du mot de passe pour `%s'.\n" + +#: src/newgrp.c:52 +#, c-format +msgid "Usage: %s [-l|-c command] [group]\n" +msgstr "Usage: %s [-l|-c commande] [groupe]\n" + +#: src/newgrp.c:60 +#, c-format +msgid "" +"%s - change the effective group id\n" +"\n" +msgstr "" +"%s - change l'ID de groupe effectif\n" +"\n" + +#: src/newgrp.c:63 +msgid " -l, --login reinitialize environment as if logged in\n" +msgstr " -l, --login réinitialise l'environnement comme à la connection\n" + +#: src/newgrp.c:65 +msgid " -c command Execute `command' with new group\n" +msgstr " -c commande Exécute \"commande\" sous un nouveau groupe\n" + +#: src/newgrp.c:161 +#, c-format +msgid "%s: -l and -c are exclusive\n" +msgstr "%s: -l et -c s'excluent mutuellement\n" + +#: src/newgrp.c:167 +#, c-format +msgid "%s: -c requires a group argument\n" +msgstr "%s: -c requiert un argument de type groupe\n" + +#: src/newgrp.c:174 +#, c-format +msgid "%s: Unknown user.\n" +msgstr "%s: Utilisateur inconnu.\n" + +#: src/newgrp.c:195 +#, c-format +msgid "%s: bad group `%s'.\n" +msgstr "%s: groupe incorrect `%s'.\n" + +#: src/newgrp.c:218 src/newgrp.c:313 +#, c-format +msgid "%s: calling getgroups failed: %s\n" +msgstr "%s: échec de l'appel de getgroups: %s\n" + +#: src/newgrp.c:271 +#, c-format +msgid "%s: failure to get group entry for %d.\n" +msgstr "%s: impossible de trouver l'entrée de groupe pour %d.\n" + +#: src/newgrp.c:281 +msgid "Password: " +msgstr "Mot de passe: " + +#: src/newgrp.c:284 +#, c-format +msgid "%s: password incorrect.\n" +msgstr "%s: mot de passe incorrect.\n" + +#: src/newgrp.c:351 +#, c-format +msgid "%s: too many groups, not added.\n" +msgstr "%s: trop de groupes, non ajouté.\n" + +#: src/newgrp.c:358 +#, c-format +msgid "%s: calling setgroups failed: %s\n" +msgstr "%s: échec de l'appel de setgroups: %s\n" + +#: src/newgrp.c:365 src/newgrp.c:380 +#, c-format +msgid "%s: calling setgid failed: %s\n" +msgstr "%s: échec de l'appel de setgid: %s\n" + +#: src/newgrp.c:374 +#, c-format +msgid "%s: calling initgroups failed: %s\n" +msgstr "%s: échec de l'appel de initgroups: %s\n" + +#: src/newgrp.c:389 +#, c-format +msgid "%s: calling setuid failed: %s\n" +msgstr "%s: échec de l'appel de setuid: %s\n" + +#: src/newgrp.c:401 +#, c-format +msgid "Cannot change to directory %s: %s\n" +msgstr "Impossible d'entrer dans le répertoire %s: %s\n" + +#: src/newgrp.c:439 +#, c-format +msgid "%s: execl failed: %s\n" +msgstr "%s: échec de l'appel de execl: %s\n" + +#: src/pam_rpasswd.c:219 src/pam_rpasswd.c:223 src/pam_rpasswd.c:330 +#: src/pam_rpasswd.c:334 src/rpasswd.c:211 src/rpasswd.c:214 src/rpasswd.c:297 +#: src/rpasswd.c:300 +#, c-format +msgid "error while reading request: %s" +msgstr "erreur de lecture de la requête: %s" + +#: src/pam_rpasswd.c:220 src/rpasswd.c:212 src/rpasswd-client.c:58 +#: src/rpasswd-client.c:71 src/rpasswd-client.c:82 src/rpasswd-client.c:108 +#: src/rpasswd-client.c:121 +msgid "Peer has closed the TLS connection" +msgstr "L'hôte distant a terminé la connectionTLS." + +#: src/pam_rpasswd.c:235 src/pam_rpasswd.c:344 +#, c-format +msgid "error while allocating memory: %m" +msgstr "erreur d'allocation mémoire : %m" + +#: src/pam_rpasswd.c:242 src/rpasswd.c:223 src/rpasswd.c:312 +#, c-format +msgid "error while reading request data: %s" +msgstr "erreur de lecture des données de la requête: %s" + +#: src/pam_rpasswd.c:296 src/rpasswd.c:269 src/rpasswd.c:358 +#, c-format +msgid "Cannot send input back to server: %s\n" +msgstr "Impossible de transmettre la demande au serveur: %s\n" + +#: src/pam_rpasswd.c:331 src/rpasswd.c:298 +msgid "wrong data received" +msgstr "données erronées reçues" + +#: src/pam_rpasswd.c:352 +#, c-format +msgid "error while reading request data: %m" +msgstr "erreur de lecture des données de la requête : %m" + +#: src/pam_rpasswd.c:403 +#, c-format +msgid "Cannot send input back to server: %m\n" +msgstr "Impossible de transmettre la demande au serveur : %m\n" + +#: src/pam_rpasswd.c:565 +#, c-format +msgid "SLP: Found Server on %s, port %s (%s)\n" +msgstr "SLP: serveur trouvé sur %s, port %s (%s)\n" + +#: src/pam_rpasswd.c:568 +#, c-format +msgid "SLP: Found Server on %s, port %s\n" +msgstr "SLP: serveur trouvé sur %s, port %s\n" + +#: src/pam_rpasswd.c:574 +#, c-format +msgid "SLP: Found Server on %s (%s)\n" +msgstr "SLP: serveur trouvé sur %s (%s)\n" + +#: src/pam_rpasswd.c:577 +#, c-format +msgid "SLP: Found Server on %s\n" +msgstr "SLP: serveur trouvé sur %s\n" + +#: src/passwd.c:210 +#, c-format +msgid "Unable to initialize BioAPI framework, BioAPI error #:%x.\n" +msgstr "" +"Impossible d'initialiser l'environnement BioAPI, erreur BioAPI n°:%x.\n" + +#: src/passwd.c:220 +#, c-format +msgid "Unable to parse UUID (BioAPI error #:%x) : %s\n" +msgstr "Impossible d'analyser l'UUID (erreur BioAPI #:%x) : %s\n" + +#: src/passwd.c:241 +#, c-format +msgid "Unable to load BioAPI BSP with UUID of %s, BioAPI error #%x.\n" +msgstr "" +"Impossible de charger le BSP BioAPI avec l'UUID %s, erreur BioAPI #%x.\n" + +#: src/passwd.c:252 +#, c-format +msgid "" +"Unable to attach default device to BioAPI BSP with UUID of %s, BioAPI error #" +"%x.\n" +msgstr "" +"Impossible de lier le périphérique par défaut à BioAPI BSP avec l'UUID %s, " +"erreur BioAPI #%x.\n" + +#: src/passwd.c:278 +#, c-format +msgid "Unable to create BIR database directory, \"%s\"\n" +msgstr "Impossible de créer le répertoire de la base BIR, \"%s\"\n" + +#: src/passwd.c:291 +#, c-format +msgid "" +"Unable to create BSP-specific subdirectory in BIR database directory, \"%s" +"\"\n" +msgstr "" +"Impossible de créer les sous-répertoires spécifiques à BSP dans le " +"répertoire de la base BIR, \"%s\"\n" + +#: src/passwd.c:306 +#, c-format +msgid "" +"Unable to write biometric identification record, \"%s\": BioAPI error #%x\n" +msgstr "" +"Impossible d'écrire l'enregistrement d'identification biométrique, \"%s\": " +"erreur BioAPI #%x\n" + +#: src/passwd.c:318 +#, c-format +msgid "Unable to open BIR for writing, \"%s\"\n" +msgstr "Impossible d'ouvrir BIR en écriture, \"%s\"\n" + +#: src/passwd.c:349 +#, c-format +msgid "Unable to enroll user %s using BSP with UUID of %s, BioAPI error #%x.\n" +msgstr "" +"Impossible d'inscrire l'utilisateur %s avec BSP et l'UUID : %s, erreur " +"BioAPI #%x.\n" + +#: src/passwd.c:367 +#, c-format +msgid "Usage: %s [-f|-g|-s|-k[-q]] [account]\n" +msgstr "Usage: %s [-f|-g|-s|-k[-q]] [compte]\n" + +#: src/passwd.c:368 +#, c-format +msgid " %s [-D binddn] [-n min] [-x max] [-w warn] [-i inact] account\n" +msgstr " %s [-D dn] [-n min] [-x max] [-w alerte] [-i inact] compte\n" + +#: src/passwd.c:369 +#, c-format +msgid " %s {-l|-u|-d|-S[-a]|-e} account\n" +msgstr " %s {-l|-u|-d|-S[-a]|-e} compte\n" + +#: src/passwd.c:371 +#, c-format +msgid " %s --bioapi [account]\n" +msgstr " %s --bioapi [compte]\n" + +#: src/passwd.c:373 +#, c-format +msgid " %s --stdin [account]\n" +msgstr " %s --stdin [compte]\n" + +#: src/passwd.c:380 src/rpasswd.c:93 src/rpasswdd.c:114 +#, c-format +msgid "" +"%s - change password information\n" +"\n" +msgstr "" +"%s - change l'information de mot de passe\n" +"\n" + +#: src/passwd.c:382 +msgid " -f Change the finger (GECOS) information\n" +msgstr " -f Change l'information du décodeur (finger GECOS)\n" + +#: src/passwd.c:384 +msgid " -s Change the login shell\n" +msgstr " -s Change le \"shell\" de connection\n" + +#: src/passwd.c:385 +msgid " -g Change the group password\n" +msgstr " -g Change le mot de passe de groupe\n" + +#: src/passwd.c:386 +msgid " -k Change the password only if expired\n" +msgstr " -k Change le mot de passe seulement s'il a expiré\n" + +#: src/passwd.c:387 +msgid " -q Try to be quiet\n" +msgstr " -q Sortie plus discrète\n" + +#: src/passwd.c:388 +msgid " -S Show the password attributes\n" +msgstr " -S Afficher les attributs de mot de passe\n" + +#: src/passwd.c:389 +msgid " -a Only with -S, show for all accounts\n" +msgstr " -a Seulement avec -S, pour montrer tous les comptes\n" + +#: src/passwd.c:390 +msgid " -d Delete the password for the named account\n" +msgstr " -d Supprime le mot de passe du compte nommé\n" + +#: src/passwd.c:391 +msgid " -l Locks the password entry for \"account\"\n" +msgstr " -l Verrouille le mot de passe de \"compte\"\n" + +#: src/passwd.c:392 +msgid " -u Try to unlock the password entry for \"account\"\n" +msgstr "" +" -u Essaye de déverrouiller le mot de passe de \"compte\"\n" + +#: src/passwd.c:393 +msgid " -e Force the user to change password at next login\n" +msgstr "" +" -e Force l'utilisateur à changer son mot de passe à la " +"prochaine connection\n" + +#: src/passwd.c:394 +msgid " -n min Set minimum field for \"account\"\n" +msgstr " -n min Positionne le champ \"minimum\" du \"compte\"\n" + +#: src/passwd.c:395 +msgid " -x max Set maximum field for \"account\"\n" +msgstr " -x max Positionne le champ \"maximum\" du \"compte\"\n" + +#: src/passwd.c:396 +msgid " -w warn Set warn field for \"account\"\n" +msgstr " -w warn Positionne le champ \"warn\" for \"compte\"\n" + +#: src/passwd.c:398 +msgid " --bioapi Authentication token is handled via BioAPI\n" +msgstr " --bioapi Le slot d'authentification est géré par BioAPI\n" + +#: src/passwd.c:405 +msgid " --stdin Read new password from stdin (root only)\n" +msgstr "" +" --stdin Lit le nouveau mot de passe depuis stdin (administrateur " +"seulement)\n" + +#: src/passwd.c:597 +#, c-format +msgid "%s: User argument missing\n" +msgstr "%s: Argument manquant : utilisateur\n" + +#: src/passwd.c:690 +#, c-format +msgid "%s: User `%s' is not known to service `%s'\n" +msgstr "%s: L'utilisateur `%s' est inconnu du service `%s'\n" + +#: src/passwd.c:715 +#, c-format +msgid "%s: %s is not authorized to change the password of %s\n" +msgstr "%s: %s n'est pas autorisé à changer le mot de passe de %s\n" + +#: src/passwd.c:744 +#, c-format +msgid "%s: Permission denied\n" +msgstr "%s: Autorisation rejetée\n" + +#: src/passwd.c:753 +#, c-format +msgid "You cannot change the shadow data for `%s'.\n" +msgstr "Vous ne pouvez pas modifier les données \"shadow\" pour `%s'.\n" + +#: src/passwd.c:781 +#, c-format +msgid "%s: -P flag not supported in this mode!\n" +msgstr "%s: -P n'est pas une option acceptée dans ce mode!\n" + +#: src/passwd.c:811 +#, c-format +msgid "Changing password for %s.\n" +msgstr "Changement du mot de passe pour %s.\n" + +#: src/passwd.c:960 +#, c-format +msgid "Error while changing password expiry information.\n" +msgstr "Erreur durant la modification de l'expiration du mot de passe.\n" + +#: src/passwd.c:962 +#, c-format +msgid "Error while changing password.\n" +msgstr "Erreur lors du changement de mot de passe.\n" + +#: src/passwd.c:974 +#, c-format +msgid "Password expiry information changed.\n" +msgstr "Date d'expiration du mot de passe modifiée.\n" + +#: src/passwd.c:976 +#, c-format +msgid "Password deleted.\n" +msgstr "Mot de passe supprimé.\n" + +#: src/passwd.c:1038 +#, c-format +msgid "passwd: Cannot execute %s" +msgstr "passwd: impossible d'exécuter %s" + +#: src/pwck.c:51 +#, c-format +msgid "Usage: %s [-P path] [-q|-r|-s]\n" +msgstr "Usage: %s [-P chemin] [-q|-r|-s]\n" + +#: src/pwck.c:59 +#, c-format +msgid "" +"%s - check integrity of password files\n" +"\n" +msgstr "" +"%s - contrôle l'intégrité des fichiers de mots de passe\n" +"\n" + +#: src/pwck.c:66 +msgid " -s, --sort Sort the password file, no checks are done\n" +msgstr " -s, --sort Trie le fichier de mots de passe, sans vérification\n" + +#: src/pwck.c:345 src/pwck.c:380 +#, c-format +msgid "Invalid password entry.\n" +msgstr "Entrée de mot de passe incorrecte.\n" + +#: src/pwck.c:364 +#, c-format +msgid "Invalid password entry with comment.\n" +msgstr "Entrée de mot de passe commentée incorrecte.\n" + +#: src/pwck.c:396 src/pwck.c:665 +#, c-format +msgid "Invalid account name `%s'.\n" +msgstr "Nom de compte non valide `%s'.\n" + +#: src/pwck.c:412 +#, c-format +msgid "Duplicate password entry\n" +msgstr "Mot de passe déjà existant\n" + +#: src/pwck.c:431 +#, c-format +msgid "User `%s': unknown group `%u'\n" +msgstr "Utilisateur `%s': groupe inconnu `%u'\n" + +#: src/pwck.c:440 +#, c-format +msgid "User `%s': directory `%s' does not exist.\n" +msgstr "Utilisateur `%s': le répertoire `%s' n'existe pas.\n" + +#: src/pwck.c:449 +#, c-format +msgid "User `%s': shell `%s' is not executable.\n" +msgstr "Utilisateur `%s': le shell `%s' n'est pas exécutable.\n" + +#: src/pwck.c:506 +#, c-format +msgid "Checking `%s'.\n" +msgstr "Vérification de `%s'.\n" + +#: src/pwck.c:615 src/pwck.c:649 +#, c-format +msgid "Invalid shadow entry.\n" +msgstr "Entrée \"shadow\" non valide.\n" + +#: src/pwck.c:634 +#, c-format +msgid "Invalid shadow entry with comment.\n" +msgstr "Entrée \"shadow\" commentée non valide.\n" + +#: src/pwck.c:681 +#, c-format +msgid "Duplicate shadow entry\n" +msgstr "Entrée \"shadow\" en double\n" + +#: src/pwck.c:699 +#, c-format +msgid "No matching password file entry.\n" +msgstr "Aucun fichier de mots de passe correspondant.\n" + +#: src/pwck.c:714 +#, c-format +msgid "User `%s': last password change in the future.\n" +msgstr "Utilisateur `%s': dernier mot de passe changé dans le futur.\n" + +#: src/pwconv.c:51 +#, c-format +msgid "" +"%s - convert to shadow account\n" +"\n" +msgstr "" +"%s - convertion en compte \"shadow\"\n" +"\n" + +#: src/pwconv.c:307 +#, c-format +msgid "Orphaned entry '%s' removed from shadow database.\n" +msgstr "Entrée orpheline '%s' retirée de la base \"shadow\".\n" + +#: src/pwconv.c:316 +#, c-format +msgid "Error while deleting `%s' shadow account.\n" +msgstr "Erreur durant la suppression du compte \"shadow\" `%s'.\n" + +#: src/pwconv.c:343 +#, c-format +msgid "%s: Error trying to get data for `%s'\n" +msgstr "%s: Erreur lors de l'obtention de données pour `%s'\n" + +#: src/pwconv.c:365 src/pwconv.c:388 src/pwconv.c:419 src/pwconv.c:435 +#, c-format +msgid "Error while converting `%s' to shadow account.\n" +msgstr "Erreur de convertion de `%s' en compte \"shadow\".\n" + +#: src/pwconv.c:466 +#, c-format +msgid "Error while renaming temporary shadow file: %m\n" +msgstr "Erreur lors du renommage du fichier temporaire \"shadow\": %m\n" + +#: src/pwconv.c:491 +#, c-format +msgid "Error while renaming temporary password file: %m\n" +msgstr "Erreur lors du renommage du fichier temporaire de mots de passe: %m\n" + +#: src/pwunconv.c:51 +#, c-format +msgid "" +"%s - convert from shadow account\n" +"\n" +msgstr "" +"%s - convertion à partir d'un compte \"shadow\"\n" +"\n" + +#: src/pwunconv.c:166 +#, c-format +msgid "%s: No shadow file found.\n" +msgstr "%s: Fichier \"shadow\" non trouvé.\n" + +#: src/rpasswd.c:85 +#, c-format +msgid "Usage: %s [-4|-6][-a][-f config-file][-h hostname][-p port][-v][name]\n" +msgstr "" +"Usage: %s [-4|-6][-a][-f fichier_conf][-h nom_hote][-p port][-v][nom]\n" + +#: src/rpasswd.c:95 +msgid " -4 Use IPv4 only\n" +msgstr " -4 Utiliser IPv4 seulement\n" + +#: src/rpasswd.c:96 +msgid " -6 Use IPv6 only\n" +msgstr " -6 Utiliser IPv6 seulement\n" + +#: src/rpasswd.c:98 +msgid " -a Admin mode, special admin password is required\n" +msgstr "" +" -a Mode administration, mot de passe spécial d'administrateur " +"requis\n" + +#: src/rpasswd.c:100 +msgid " -f config-file Specify a different config file\n" +msgstr " -f fichier_conf Spécifie un fichier de configuration différent\n" + +#: src/rpasswd.c:101 +msgid " -h hostname Specify the remote server\n" +msgstr " -h nom_hote Spécifie le serveur distant\n" + +#: src/rpasswd.c:102 +msgid " -p port Specify port remote server is listening on\n" +msgstr " -p port Spécifie le port d'écoute du serveur distant\n" + +#: src/rpasswd.c:104 +msgid " -r level Specify level of SSL certificate checks\n" +msgstr " -r niveau Spécifie le niveau de contrôle du certificat SSL\n" + +#: src/rpasswd.c:107 +msgid " --no-slp Don't use SLP to find a server\n" +msgstr " --no-slp Ne pas utiliser SLP pour trouver un serveur\n" + +#: src/rpasswd.c:109 +msgid " -v, --verbose Be verbose, print SSL connection data\n" +msgstr "" +" -v, --verbose Sortie détaillée, affiche les données de connection SSL\n" + +#: src/rpasswd.c:150 +#, c-format +msgid "Warning: cannot turn echo off\n" +msgstr "Attention: impossible de couper l'écho écran\n" + +#: src/rpasswd.c:515 +#, c-format +msgid "SLP: Found Server on %s, port %s" +msgstr "SLP: serveur trouvé sur %s, port %s" + +#: src/rpasswd.c:518 +#, c-format +msgid "SLP: Found Server on %s" +msgstr "SLP: serveur trouvé sur %s" + +#: src/rpasswd.c:554 +#, c-format +msgid "Go away, you do not exist!" +msgstr "Sortez, vous n'existez pas!" + +#: src/rpasswd.c:568 +#, c-format +msgid "No server specified\n" +msgstr "Aucun serveur spécifié\n" + +#: src/rpasswd-client.c:57 src/rpasswd-client.c:60 +#, c-format +msgid "error while sending start request: %s\n" +msgstr "erreur lors de l'envoi de la requête de départ: %s\n" + +#: src/rpasswd-client.c:70 src/rpasswd-client.c:73 +#, c-format +msgid "error while sending locale data: %s\n" +msgstr "erreur lors de l'envoi de données locales: %s\n" + +#: src/rpasswd-client.c:81 src/rpasswd-client.c:84 +#, c-format +msgid "error while sending username: %s\n" +msgstr "erreur lors de l'envoi du nom d'utilisateur: %s\n" + +#: src/rpasswd-client.c:107 src/rpasswd-client.c:110 src/rpasswd-client.c:120 +#: src/rpasswd-client.c:123 +#, c-format +msgid "error while sending string: %s\n" +msgstr "erreur d'envoi de la chaine: %s\n" + +#: src/rpasswd-client.c:318 +msgid "Searching a server...\n" +msgstr "Recherche d'un serveur...\n" + +#: src/rpasswd-client.c:323 +#, c-format +msgid "Error opening SLP handle: %i.\n" +msgstr "Erreur d'ouverture SLP handle: %i.\n" + +#: src/rpasswd-client.c:334 +msgid "No service found with SLP.\n" +msgstr "Aucun service SLP trouvé.\n" + +#: src/rpasswd-client.c:353 +msgid "Error while searching for SLP description.\n" +msgstr "Erreur lors de la recherche d'une description SLP.\n" + +#: src/rpasswd-client.c:372 +#, c-format +msgid "" +"\n" +"Please select a server:\n" +msgstr "" +"\n" +"SVP choisissez un serveur:\n" + +#: src/rpasswd-client.c:378 +#, c-format +msgid " (port %s)" +msgstr " (port %s)" + +#: src/rpasswd-client.c:388 +#, c-format +msgid "Enter number of choice [1-%d]: " +msgstr "Entrez le numéro de votre choix [1-%d]: " + +#: src/rpasswd-client.c:458 +msgid "parsing config file" +msgstr "analyse du fichier de configuration" + +#: src/rpasswd-client.c:501 src/rpasswd-client.c:504 +msgid "Trying entry:" +msgstr "Essai avec l'entrée:" + +#: src/rpasswd-client.c:543 +#, c-format +msgid "Entry \"%s\" is not valid!\n" +msgstr "L'entrée \"%s\" n'est pas valide!\n" + +#: src/rpasswd-client.c:547 +#, c-format +msgid "Entry \"%s\" is not valid, ignored!\n" +msgstr "L'entrée \"%s\" n'est pas valide, ignorée!\n" + +#: src/rpasswd-client.c:560 +msgid "Bad entries found.\n" +msgstr "Entrées incorrectes trouvées.\n" + +#: src/rpasswd-client.c:565 +msgid "No entry found.\n" +msgstr "Aucune entrée trouvée.\n" + +#: src/rpasswd-client.c:575 +msgid "No entry found." +msgstr "Aucune entrée trouvée." + +#: src/rpasswd-client.c:609 +msgid "Hostname or service not known for specified protocol\n" +msgstr "Nom d'hôte ou service inconnu pour le protocole spécifié\n" + +#: src/rpasswd-client.c:623 +#, c-format +msgid "bad port: %s\n" +msgstr "mauvais port: %s\n" + +#: src/rpasswd-client.c:648 src/rpasswd-client.c:657 +#, c-format +msgid "Trying %s port %d...\n" +msgstr "Essai de %s port %d...\n" + +#: src/rpasswd-client.c:663 +#, c-format +msgid "Trying %s...\n" +msgstr "Essai de %s...\n" + +#: src/rpasswd-client.c:677 +#, c-format +msgid "connect to address %s: %s\n" +msgstr "connecté sur l'adresse %s: %s\n" + +#: src/rpasswd-client.c:732 src/rpasswd-client.c:1028 +msgid "Server certificate info:\n" +msgstr "Détails du certificat serveur:\n" + +#: src/rpasswd-client.c:742 +#, c-format +msgid " Certificate is valid since: %s" +msgstr " Certificat valide depuis: %s" + +#: src/rpasswd-client.c:744 +#, c-format +msgid " Certificate expires: %s" +msgstr " Certificat expirant le: %s" + +#: src/rpasswd-client.c:750 +#, c-format +msgid " Certificate public key: %s" +msgstr " clef publique du certificate: %s" + +#: src/rpasswd-client.c:756 +#, c-format +msgid " Certificate version: #%d\n" +msgstr " Version du certificate: #%d\n" + +#: src/rpasswd-client.c:761 src/rpasswd-client.c:1034 +#, c-format +msgid " DN: %s\n" +msgstr " DN: %s\n" + +#: src/rpasswd-client.c:765 src/rpasswd-client.c:1041 +#, c-format +msgid " Issuer's DN: %s\n" +msgstr " DN de l'émetteur: %s\n" + +#: src/rpasswd-client.c:846 +#, c-format +msgid "Handshake failed: %s\n" +msgstr "Echec de la négociation: %s\n" + +#: src/rpasswd-client.c:869 +#, c-format +msgid "TLS certificate error: %s\n" +msgstr "erreur de certificat TLS: %s\n" + +#: src/rpasswd-client.c:880 +#, c-format +msgid "" +"%s connection using %s-%s (%s)\n" +"\n" +msgstr "" +"%s connection utilisant %s-%s (%s)\n" +"\n" + +#: src/rpasswd-client.c:898 +msgid "TLS authentication error: server certificate issuer is unknown.\n" +msgstr "erreur d'authentification TLS: émetteur du certificat inconnu.\n" + +#: src/rpasswd-client.c:906 +msgid "TLS authentication error: server certificate is NOT trusted.\n" +msgstr "" +"erreur d'authentification TLS: le certificat du serveur n'est PAS digne de " +"confiance.\n" + +#: src/rpasswd-client.c:917 +msgid "TLS authentication error: server certificate not yet activated.\n" +msgstr "" +"erreur d'authentification TLS: le certificat du serveur n'est pas encore " +"actif.\n" + +#: src/rpasswd-client.c:925 +msgid "TLS authentication error: server certificate expired.\n" +msgstr "erreur d'authentification TLS: le certificat du serveur a expiré.\n" + +#: src/rpasswd-client.c:960 +#, c-format +msgid "error loading default verify locations: %s\n" +msgstr "erreur de chargement des emplacements de vérification par défaut: %s\n" + +#: src/rpasswd-client.c:968 +#, c-format +msgid "error setting default verify path: %s\n" +msgstr "erreur en positionnant le chemin de vérification par défaut: %s\n" + +#: src/rpasswd-client.c:1003 +#, fuzzy +msgid "Unable to get certificate from peer.\n" +msgstr "Impossible d'obtenir l'entropie de %s\n" + +#: src/rpasswd-client.c:1017 +#, c-format +msgid "" +"SSL connection using %s\n" +"\n" +msgstr "" +"connection SSL utilisant %s\n" +"\n" + +#: src/rpasswd-client.c:1022 +msgid "Server does not have a certificate?\n" +msgstr "Le serveur n'a pas de certificat ?\n" + +#: src/rpasswdd.c:102 +#, c-format +msgid "" +"Usage: %s [-4] [-6] [-d] [-c certificate] [-k privatekey] [-p port]\n" +" [--slp [--slp-timeout timeout] [--slp-descr description]]\n" +msgstr "" +"Usage: %s [-4] [-6] [-d] [-c certificat] [-k cle_privee] [-p port]\n" +" [--slp [--slp-timeout temporisation] [--slp-descr description]]\n" + +#: src/rpasswdd.c:105 +#, c-format +msgid "Usage: %s [-4] [-6] [-d] [-c certificate] [-k privatekey] [-p port]\n" +msgstr "Usage: %s [-4] [-6] [-d] [-c certificat] [-k cle_privee] [-p port]\n" + +#: src/rpasswdd.c:116 +msgid " -4 Use IPv4\n" +msgstr " -4 Utiliser IPv4\n" + +#: src/rpasswdd.c:117 +msgid " -6 Use IPv6\n" +msgstr " -6 Utiliser IPv6\n" + +#: src/rpasswdd.c:118 +msgid " -c certificate Specify alternate certificate file\n" +msgstr " -c certificat Précise un fichier de certificat particulier\n" + +#: src/rpasswdd.c:119 +msgid " -k privatekey Specify alternate file with private key\n" +msgstr "" +" -k cle_privee Spécifie un fichier particulier contenant la clé privée\n" + +#: src/rpasswdd.c:121 +msgid " -d Run in debug mode\n" +msgstr " -d Fonctionnement en mode débogage\n" + +#: src/rpasswdd.c:122 +msgid " -p port Port on which the server should listen\n" +msgstr " -p port Port sur lequel le serveur devrait écouter\n" + +#: src/rpasswdd.c:125 +msgid " --slp Register at local SLP server\n" +msgstr " --slp S'enregistre sur le serveur local SLP\n" + +#: src/rpasswdd.c:126 +msgid " --slp-timeout Set timeout for re-registration\n" +msgstr "" +" --slp-timeout Précise le temps d'expiration pour le ré-enregistrement\n" + +#: src/rpasswdd.c:127 +msgid " --slp-descr Set a description shown to SLP clients\n" +msgstr " --slp-descr Précise la description à montrer aux clients SLP\n" + +#: src/rpasswdd.c:710 +#, c-format +msgid "Please authenticate as %s on %s" +msgstr "SVP identifiez-vous comme %s sur %s" + +#: src/rpasswdd.c:749 +#, c-format +msgid "" +"\n" +"Now enter the new password for %s" +msgstr "" +"\n" +"Maintenant saisissez le nouveau mot de passe pour %s" + +#: src/rpasswdd.c:770 +#, c-format +msgid "setresuid failed on server: %s" +msgstr "Echec de setresuid sur le serveur: %s" + +#: src/rpasswdd.c:813 +msgid "Password not changed" +msgstr "Mot de passe inchangé" + +#: src/rpasswdd.c:816 +msgid "Password changed" +msgstr "Mot de passe modifié" + +#: src/rpasswdd.c:1349 +msgid "already running" +msgstr "déjà en cours d'exécution" + +#: src/useradd.c:54 src/usermod.c:55 +#, c-format +msgid "Usage: %s ...\n" +msgstr "Usage: %s ...\n" + +#: src/useradd.c:61 +#, c-format +msgid "" +"%s - create a new user\n" +"\n" +msgstr "" +"%s - crée un nouvel utilisateur\n" +"\n" + +#: src/useradd.c:63 src/usermod.c:64 +msgid " -c comment Set the GECOS field for the new account\n" +msgstr " -c commentaire Positionne le champ GECOS pour le nouveau compte\n" + +#: src/useradd.c:65 +msgid " --show-defaults Print default values\n" +msgstr " --show-defaults Affiche les valeurs par défaut\n" + +#: src/useradd.c:66 +msgid " --save-defaults Save modified default values\n" +msgstr " --save-defaults Sauvegarde les valeurs par défaut modifiées\n" + +#: src/useradd.c:68 src/usermod.c:69 +msgid " -d homedir Home directory for the new user\n" +msgstr " -d rep_perso Répertoire personnel pour le nouvel utilisateur\n" + +#: src/useradd.c:69 src/usermod.c:70 +msgid " -e expire Date on which the new account will be disabled\n" +msgstr " -e expire Date à laquelle le nouveau compte sera désactivé\n" + +#: src/useradd.c:71 src/usermod.c:72 +msgid "" +" -f inactive Days after a password expires until account is disabled\n" +msgstr "" +" -f inactif Nombre de jours suivant l'expiration du mot de passe avant " +"la désactivation du compte.\n" + +#: src/useradd.c:73 src/usermod.c:74 +msgid " -G group,... List of supplementary groups\n" +msgstr " -G groupe,... Liste de groupes supplémentaires\n" + +#: src/useradd.c:74 src/usermod.c:75 +msgid " -g gid Name/number of the users primary group\n" +msgstr " -g gid Nom/numéro du groupe primaire d'utilisateurs\n" + +#: src/useradd.c:78 +msgid " -m Create home directory for the new user\n" +msgstr " -m Crée le répertoire personnel du nouvel utilisateur\n" + +#: src/useradd.c:85 +msgid " -u uid Force the new userid to be the given number\n" +msgstr " -u uid Positionne l'ID du nouvel utilisateur à \"uid\"\n" + +#: src/useradd.c:87 +msgid " -U umask Umask value used for creating home directory\n" +msgstr "" +" -U masque valeur \"umask\" utilisée pour créer le rép. personnel\n" + +#: src/useradd.c:90 src/usermod.c:88 +msgid " -s shell Name of the user's login shell\n" +msgstr " -s shell Nom du \"shell\" de connection de l'utilisateur\n" + +#: src/useradd.c:186 +#, c-format +msgid "%s: Invalid numeric argument `%s' for group ID.\n" +msgstr "%s: Argument numérique incorrect `%s' pour l'ID de groupe.\n" + +#: src/useradd.c:196 src/usermod.c:160 +#, c-format +msgid "%s: Group `%u' not found in service `%s'.\n" +msgstr "%s: Groupe `%u' non trouvé dans le service `%s'.\n" + +#: src/useradd.c:202 src/usermod.c:166 +#, c-format +msgid "%s: Unknown group `%u'.\n" +msgstr "%s: Groupe inconnu `%u'.\n" + +#: src/useradd.c:301 +#, c-format +msgid "%s: Unknown group `%s' in %s.\n" +msgstr "%s: Groupe inconnu `%s' dans %s.\n" + +#: src/useradd.c:316 +#, c-format +msgid "%s: Invalid home directory `%s' in %s.\n" +msgstr "%s: Répertoire personnel incorrect `%s' dans %s.\n" + +#: src/useradd.c:335 +#, c-format +msgid "%s: Invalid numeric argument `%s' for `INACTIVE' in %s.\n" +msgstr "%s: Argument numérique non valide `%s' pour `INACTIVE' dans %s.\n" + +#: src/useradd.c:358 +#, c-format +msgid "%s: Expiredate `%s' is no date and no integer value >= -1 in %s.\n" +msgstr "" +"%s: La date d'expiration `%s' n'est ni une date ni un entier >= -1 dans %s.\n" + +#: src/useradd.c:374 +#, c-format +msgid "%s: Invalid shell `%s' in %s.\n" +msgstr "%s: \"shell\" non valide `%s' dans %s.\n" + +#: src/useradd.c:388 +#, c-format +msgid "%s: Skel directory \"%s\" in %s does not exist.\n" +msgstr "%s: le répertoire modèle \"%s\" n'existe pas dans %s.\n" + +#: src/useradd.c:449 +#, c-format +msgid "%s: Invalid value `%s' for option CREATE_MAIL_SPOOL in %s.\n" +msgstr "%s: Valeur non valide `%s' pour l'option CREATE_MAIL_SPOOL dans %s.\n" + +#: src/useradd.c:465 +#, c-format +msgid "%s: Invalid numeric argument `%s' for `UMASK' in %s.\n" +msgstr "%s : Argument numérique non valide `%s' pour `UMASK' dans %s.\n" + +#: src/useradd.c:913 +#, c-format +msgid "%s: Can't get unique uid in range %u - %u.\n" +msgstr "%s: Impossible d'obtenir un UID unique dans l'intervalle %u - %u.\n" + +#: src/useradd.c:987 +#, c-format +msgid "%s: Can't stat `%s': %m\n" +msgstr "%s: Impossible d'atteindre `%s': %m\n" + +#: src/useradd.c:1018 +#, c-format +msgid "" +"%s: No group named \"mail\" exists, creating mail spool with mode 0600.\n" +msgstr "" +"%s: Aucun groupe \"mail\" n'existe, création d'une file d'attente mail avec " +"autorisations 0600.\n" + +#: src/useradd.c:1026 +#, c-format +msgid "%s: Can't create mail spool for user %s.\n" +msgstr "" +"%s: Impossible de créer la file d'attente de mails pour l'utilisateur %s.\n" + +#: src/useradd.c:1095 src/usermod.c:520 +#, c-format +msgid "%s: Cannot create directory `%s'.\n" +msgstr "%s: Impossible de créer le répertoire `%s'.\n" + +#: src/useradd.c:1100 src/usermod.c:525 src/usermod.c:549 +#, c-format +msgid "%s: Warning: chown on `%s' failed: %m\n" +msgstr "%s: Attention: échec de la commande \"chown\" `%s' : %m\n" + +#: src/useradd.c:1103 src/usermod.c:528 +#, c-format +msgid "%s: Warning: chmod on `%s' failed: %m\n" +msgstr "%s: Attention: échec de la commande \"chmod\" `%s' : %m\n" + +#: src/useradd.c:1126 +#, c-format +msgid "%s: Copying of skel directory failed.\n" +msgstr "%s: Echec de la copie du répertoire modèle.\n" + +#: src/useradd.c:1136 +#, c-format +msgid "%s: Warning: home directory already exists, not modifying it.\n" +msgstr "%s: Attention: le répertoire personnel existe déjà, non modifié.\n" + +#: src/useradd.c:1197 +#, c-format +msgid "%s: Reading of `%s' was not successful.\n" +msgstr "%s: Echec de la lecture de `%s'.\n" + +#: src/useradd.c:1226 src/usermod.c:798 +#, c-format +msgid "%s: Invalid comment `%s'.\n" +msgstr "%s: Commentaire non valide `%s'.\n" + +#: src/useradd.c:1243 src/usermod.c:812 +#, c-format +msgid "%s: Invalid home directory `%s'.\n" +msgstr "%s: Répertoire personnel non valide `%s'.\n" + +#: src/useradd.c:1264 src/usermod.c:836 +#, c-format +msgid "%s: Expiredate `%s' is no date and no integer value >= -1.\n" +msgstr "%s: La date d'expiration `%s' n'est ni une date ni un entier >= -1.\n" + +#: src/useradd.c:1280 +#, c-format +msgid "%s: Invalid numeric argument `%s' for `-f'.\n" +msgstr "%s: Argument numérique non valide `%s' pour `-f'.\n" + +#: src/useradd.c:1299 +#, c-format +msgid "%s: Skel directory `%s' does not exist.\n" +msgstr "%s: Le répertoire modèle `%s' n'existe pas.\n" + +#: src/useradd.c:1341 src/usermod.c:935 +#, c-format +msgid "%s: Invalid shell `%s'.\n" +msgstr "%s: \"shell\" non valide `%s'.\n" + +#: src/useradd.c:1350 src/useradd.c:1374 +#, c-format +msgid "%s: Invalid numeric argument `%s' for User ID.\n" +msgstr "%s: Argument numérique non valide `%s' pour l'ID d'utilisateur.\n" + +#: src/useradd.c:1364 +#, c-format +msgid "%s: Invalid numeric argument `%s' for `-U'.\n" +msgstr "%s : Argument numérique non valide `%s' pour `-U'.\n" + +#: src/useradd.c:1425 +#, c-format +msgid "%s: You cannot use --uid and --preferred-uid at the same time.\n" +msgstr "%s : impossible d'utiliser --uid et --preferred-uid simultanément.\n" + +#: src/useradd.c:1576 +#, c-format +msgid "%s: Writing of `%s' was not successful.\n" +msgstr "%s: L'écriture de `%s' a échoué.\n" + +#: src/useradd.c:1604 src/usermod.c:1335 +#, c-format +msgid "%s: UID %u is not unique.\n" +msgstr "%s: l'UID %u n'est pas unique.\n" + +#: src/useradd.c:1616 src/usermod.c:1349 +#, c-format +msgid "%s: Invalid account name `%s'.\n" +msgstr "%s: Nom de compte nom valide `%s'.\n" + +#: src/useradd.c:1637 src/usermod.c:1360 +#, c-format +msgid "%s: Account `%s' already exists.\n" +msgstr "%s: Le compte `%s' existe déjà.\n" + +#: src/useradd.c:1721 +#, c-format +msgid "%s: Error: Cannot clear old faillog entry: %s\n" +msgstr "" +"%s: Erreur: impossible de vider l'ancienne entrée \"faillog\" (connection " +"rejetée) : %s\n" + +#: src/useradd.c:1734 +#, c-format +msgid "%s: Error: Cannot clear old lastlog entry: %s\n" +msgstr "" +"%s: Erreur: impossible de vider l'ancienne entrée \"lastlog\" (dernière " +"connection) : %s\n" + +#: src/useradd.c:1748 +#, c-format +msgid "%s: Cannot add user to LDAP database without DN.\n" +msgstr "%s: Impossible d'ajouter un utilisateur à la base LDAP sans le DN.\n" + +#: src/useradd.c:1765 +#, c-format +msgid "%s: User not added to LDAP database.\n" +msgstr "%s: Utilisateur non ajouté à la base LDAP.\n" + +#: src/useradd.c:1793 src/usermod.c:397 src/usermod.c:635 src/usermod.c:1563 +#, c-format +msgid "%s: ERROR: Cannot find group `%s' anymore!\n" +msgstr "%s: ERREUR: Impossible de trouver le groupe `%s' !\n" + +#: src/useradd.c:1797 src/usermod.c:1567 src/usermod.c:1667 +#, c-format +msgid "%s: Cannot find group `%s' in service `%s', ignored.\n" +msgstr "" +"%s: Impossible de trouver le groupe `%s' dans le service `%s', ignoré.\n" + +#: src/useradd.c:1813 src/usermod.c:1583 +#, c-format +msgid "%s: Cannot add user to groups stored in LDAP database without DN.\n" +msgstr "" +"%s: Impossible d'ajouter un utilisateur aux groupes de la base LDAP sans le " +"DN.\n" + +#: src/useradd.c:1821 src/useradd.c:1839 src/useradd.c:1856 src/usermod.c:1591 +#: src/usermod.c:1610 src/usermod.c:1628 +#, c-format +msgid "%s: User not added to LDAP group `%s'.\n" +msgstr "%s: Utilisateur non ajouté au groupe LDAP `%s'.\n" + +#: src/useradd.c:1908 +#, c-format +msgid "%s: USERADD_CMD fails with exit code %d.\n" +msgstr "%s: échec de USERADD_CMD avec code de sortie %d.\n" + +#: src/userdel.c:54 +#, c-format +msgid "Usage: %s [-D binddn] [-P path] [-r [-f]] user\n" +msgstr "Usage: %s [-D dn] [-P chemin] [-r [-f]] utilisateur\n" + +#: src/userdel.c:61 +#, c-format +msgid "" +"%s - delete a user and related files\n" +"\n" +msgstr "" +"%s - supprimer un utilisateur et les fichiers associés\n" +"\n" + +#: src/userdel.c:63 +msgid " -r Remove home directory and mail spool\n" +msgstr "" +" -r Supprime le répertoire personnel et la file de messages " +"électroniques\n" + +#: src/userdel.c:65 +msgid " -f Force removal of files, even if not owned by user\n" +msgstr "" +" -f Force la suppression des fichiers même ceux non possédés " +"par l'utilisateur\n" + +#: src/userdel.c:175 src/userdel.c:194 +#, c-format +msgid "%s: directory `%s' is in use by `%s'.\n" +msgstr "%s: le répertoire `%s' est utilisé par `%s'.\n" + +#: src/userdel.c:262 src/usermod.c:1663 +#, c-format +msgid "%s: ERROR: cannot find group `%s' anymore!\n" +msgstr "%s: ERREUR: impossible de trouver le groupe `%s' !\n" + +#: src/userdel.c:279 src/usermod.c:652 src/usermod.c:1683 +#, c-format +msgid "" +"%s: Cannot remove user from groups stored in LDAP database without DN.\n" +msgstr "" +"%s: Impossible de supprimer un utilisateur des groupes de la base LDAP sans " +"le DN.\n" + +#: src/userdel.c:287 src/userdel.c:306 src/usermod.c:664 src/usermod.c:687 +#: src/usermod.c:1691 src/usermod.c:1710 src/usermod.c:1728 +#, c-format +msgid "%s: User not removed from LDAP group `%s'.\n" +msgstr "%s: Utilisateur non retiré du groupe LDAP `%s'.\n" + +#: src/userdel.c:327 src/usermod.c:709 +#, c-format +msgid "%s: User not removed from group `%s'.\n" +msgstr "%s: Utilisateur non retiré du groupe `%s'.\n" + +#: src/userdel.c:537 +#, c-format +msgid "%s: account `%s' is currently in use.\n" +msgstr "%s: le compte `%s' est en cours d'utilisation.\n" + +#: src/userdel.c:559 +#, c-format +msgid "%s: USERDEL_PRECMD fails with exit code %d.\n" +msgstr "%s: échec de USERDEL_PRECMD avec code de sortie %d.\n" + +#: src/userdel.c:587 src/userdel.c:605 +#, c-format +msgid "%s: `%s' is not owned by `%s', not removed.\n" +msgstr "%s: `%s' n'est pas possédé par `%s', non supprimé.\n" + +#: src/userdel.c:593 src/userdel.c:615 +#, c-format +msgid "%s: warning: can't remove `%s': %s" +msgstr "%s: attention: impossible de supprimer `%s': %s" + +#: src/userdel.c:625 +#, c-format +msgid "%s: directory `%s' not removed.\n" +msgstr "%s: répertoire `%s' non supprimé.\n" + +#: src/userdel.c:637 +#, c-format +msgid "%s: error deleting user `%s'.\n" +msgstr "%s: erreur durant la suppression de l'utillsateur `%s'.\n" + +#: src/userdel.c:659 +#, c-format +msgid "%s: USERDEL_POSTCMD fails with exit code %d.\n" +msgstr "%s: échec de USERDEL_POSTCMD avec code de sortie %d.\n" + +#: src/usermod.c:62 +#, c-format +msgid "" +"%s - modify a user account\n" +"\n" +msgstr "" +"%s - modifie un compte utilisateur\n" +"\n" + +#: src/usermod.c:77 +msgid " -l login Change login name.\n" +msgstr " -l login Change l'identifiant de connection (login).\n" + +#: src/usermod.c:78 +msgid " -m Move home directory to the new path\n" +msgstr " -m Déplace le répertoire personnel au nouvel endroit\n" + +#: src/usermod.c:80 +msgid " -A group,... List of groups the user should be added to\n" +msgstr " -A groupe,... Liste des groupes auxquels ajouter l'utilisateur\n" + +#: src/usermod.c:82 +msgid " -R group,... List of groups the user should be removed from\n" +msgstr "" +" -R groupe,... Liste des groupes desquels l'utilisateur sera supprimé\n" + +#: src/usermod.c:89 +msgid " -u uid Change the userid to the given number\n" +msgstr " -u uid Change l'ID de l'utilisateur en \"uid\"\n" + +#: src/usermod.c:92 +msgid " -L Locks the password entry for \"user\"\n" +msgstr " -L Verrouille le mot de passe pour \"utilisateur\"\n" + +#: src/usermod.c:94 +msgid " -U Try to unlock the password entry for \"user\"\n" +msgstr "" +" -U Essaye de déverrouiller le mot de passe pour \"utilisateur" +"\"\n" + +#: src/usermod.c:149 src/usermod.c:853 src/usermod.c:948 +#, c-format +msgid "%s: Invalid numeric argument `%s'.\n" +msgstr "%s: Argument numérique non valide `%s'.\n" + +#: src/usermod.c:416 +#, c-format +msgid "%s: User not renamed in LDAP group `%s'.\n" +msgstr "%s: Utilisateur non renommé dans le groupe LDAP `%s'.\n" + +#: src/usermod.c:433 +#, c-format +msgid "%s: User not renamed from LDAP group `%s'.\n" +msgstr "%s: Utilisateur non renommé dans le groupe LDAP `%s'.\n" + +#: src/usermod.c:455 +#, c-format +msgid "%s: User not renamed in group `%s'.\n" +msgstr "%s: Utilisateur non renommé dans le groupe `%s'.\n" + +#: src/usermod.c:558 +#, c-format +msgid "%s: Cannot copy directory %s to %s.\n" +msgstr "%s: Impossible de copier le répertoire %s sur %s.\n" + +#: src/usermod.c:565 +#, c-format +msgid "%s: Cannot rename directory %s to %s.\n" +msgstr "%s: Impossible de renommer le répertoire %s en %s.\n" + +#: src/usermod.c:1067 +#, c-format +msgid "%s: Account `%s' does not exist.\n" +msgstr "%s: Le compte `%s' n'existe pas.\n" + +#: src/usermod.c:1175 src/usermod.c:1240 +#, c-format +msgid "%s: `%s' is primary group name.\n" +msgstr "%s: `%s' est le nom d'un groupe primaire.\n" + +#: src/usermod.c:1323 +#, c-format +msgid "%s: Account `%s' is currently in use.\n" +msgstr "%s: Le compte `%s' est en cours d'utilisation.\n" + +#: src/usermod.c:1418 +#, c-format +msgid "%s: Shadow passwords required for -e and -f.\n" +msgstr "%s: mots de passe \"shadow\" requis pour -e et -f.\n" + +#: src/usermod.c:1443 +#, c-format +msgid "%s: Cannot modify user in LDAP database without DN.\n" +msgstr "" +"%s: Impossible de modifier un utilisateur dans une base LDAP sans connaître " +"le DN.\n" + +#: src/usermod.c:1461 +#, c-format +msgid "%s: User not modified in LDAP database.\n" +msgstr "%s: Utilisateur non modifié dans la base LDAP.\n" + +#: src/usermod.c:1780 src/usermod.c:1791 src/usermod.c:1817 +#, c-format +msgid "%s: Error: Cannot copy faillog entry: %s\n" +msgstr "" +"%s: Erreur: impossible de copier l'entrée \"faillog\" (connection rejetée): %" +"s\n" + +#: src/usermod.c:1806 +#, c-format +msgid "%s: Error: Cannot copy lastlog entry: %s\n" +msgstr "" +"%s: Erreur: impossible de copier l'entrée \"lastlog\" (dernière connection): " +"%s\n" + +#: src/vipw.c:58 +#, c-format +msgid "Usage: %s [-g|-p|-s]\n" +msgstr "Usage: %s [-g|-p|-s]\n" + +#: src/vipw.c:66 +#, c-format +msgid "" +"%s - edit the password, group or shadow file\n" +"\n" +msgstr "" +"%s - édite le fichier de mot de passe, \"shadow\" ou de groupe\n" +"\n" + +#: src/vipw.c:69 +msgid " -g, --group Edit the /etc/group file\n" +msgstr " -g, --groupe Edite le fichier /etc/group\n" + +#: src/vipw.c:70 +msgid " -p, --passwd Edit the /etc/passwd file\n" +msgstr " -p, --passwd Edite le fichier /etc/passwd\n" + +#: src/vipw.c:71 +msgid " -s, --shadow Edit the /etc/shadow file\n" +msgstr " -s, --shadow Edite le fichier /etc/shadow\n" + +#: src/vipw.c:164 +#, c-format +msgid "Cannot lock `%s': already locked.\n" +msgstr "Impossible de verrouiller `%s': déjà verrouillé.\n" + +#: src/vipw.c:278 +#, c-format +msgid "%s: no changes made\n" +msgstr "%s: aucun changement effectué\n" + +#: src/vipw.c:318 +#, c-format +msgid "Warning: cannot create backup file: %m\n" +msgstr "Attention: impossible de créer le fichier de sauvegarde: %m\n" + +#~ msgid "cannot open socket: %s" +#~ msgstr "impossible d'ouvrir le slot (socket): %s" + +#~ msgid "cannot enable socket to accept connections: %s" +#~ msgstr "" +#~ "impossible d'activer un slot réseau pour accepter les connections: %s" + +#~ msgid "handle_request: request received (Version = %d)" +#~ msgstr "handle_request: requête reçue (version = %d)" + +#~ msgid "cannot handle request version %d; current version is %d" +#~ msgstr "" +#~ "impossible de gérer une requête en version %d; la version courante est %d" + +#~ msgid "User %s: %s" +#~ msgstr "Utilisateur %s: %s" + +#~ msgid "handle_request: exit (%d)" +#~ msgstr "handle_request: sortie (%d)" + +#~ msgid "while accepting connection: %s" +#~ msgstr "en attente de connection: %s" + +#~ msgid "Handshake has failed (%s)" +#~ msgstr "La négociation a échoué (%s)" + +#~ msgid "client has closed the GNUTLS connection" +#~ msgstr "le client a mis fin à la connection GNUTLS" + +#~ msgid "cannot enable SSL encryption" +#~ msgstr "impossible d'activer le chiffrement SSL" + +#~ msgid "locale length in request too long: %d" +#~ msgstr "la taille locale de la requête est trop grande: %d" + +#~ msgid "error while reading request locale: %s" +#~ msgstr "erreur durant la lecture de la requête locale: %s" + +#~ msgid "data length in request too long: %d" +#~ msgstr "trop grande taille des données de requête: %d" + +#~ msgid "error while reading request username: %s" +#~ msgstr "erreur durant la lecture de la requête utilisateur: %s" + +#~ msgid "No username supplied" +#~ msgstr "Aucun nom d'utilisateur spécifié" diff --git a/po/id.gmo b/po/id.gmo new file mode 100644 index 0000000000000000000000000000000000000000..32272d8f1448fbb0e744b5a1c9504f7bbb192008 GIT binary patch literal 62472 zcmb`Q37lM2mH$goG*J*xLH3tGNCK&lgw?P%>1MR!*RDxPJ4sT z2USnc2gMhk07dtEkSvx~QyHS)3o5?XgYv%zR6b9HcmcQxTnJ8quuSRiLFMyfpz8mB zL6u_#m8W#B0Ts_n!KL6=z$M^)2mSeJ0j~g+&ds30zXw#f-+&i`D`0+#Ub+@k{oDak zWu+g1;{Q|Dx&IDO?er{A{PQ+Y<+>-}!`6F0TL&iiUkx4y{w;Vc_zG|y_+Ib`@MGY7 z@NQ7?-2|6`<0&3{?En;3L3if)58@4JtqH0TutZL6zqrn>=5qfl7Y^n1Iv4 z{XCE+E4>F)JN_}?8Jj(wYe41iMo{^=4OBTl8{9twRUe0L@#g~pM?mH0CU7bECQ$jm z3p@?{ZNLRv-G2+H@=St??

~_HI!5`w6J}DsS`p*$#>i+TbGaHc42O_@4SJ3!Ih04m)(g8Oseskr|f zaOqBOmtj!lyB5^*7lX>rM?r=Ed2k={C{OnsQ03YVD*b6t<$rPTe=m3x?yrC=z+Zu< zg9{$*{qC}WPX;A7-Uyxreh(D=F^_S%y9reLHv&Efd<5>>KtyTj6QJ^O-^Z3p>%asQ z|Bi#IpQnNf{|fL(@B`pc;FmzP+s{DN)59OtO{!fD9 z*Ly(K_XDr={H*{*|5(uaO>n;nRDQk!ivREXcz?b);8yTL{M(?)`F2q4^B>?v;2~Ez zZUL3An?c2Y8+bJMCGa@#7ohU_psQUzoC}KXvEakNzX8P;F9gNE?*dN%zXrh?v zWW>`s1zd=GJ*axR20R>mE~s+e0v-##4?GdP8&vq;gAWA{8})cj29=++pxS8)6u&(m zRQNXp|4)F*&(A>R=RsA+1XTF50$vF!UpIj&@9V&mz&pVO;5}dh-fzs)TNH2;sC-@v zo(w(@RJeD7YOk+>hk?Hj&mTDM&�Fy9^XR%z&!LmxGJIPl1Z}m!Q&r$Zn5sC8+0H z1I`3|Nx%<*O8*C-@-x5Y{q=NEe7yyf|8DS5@MiEK;LE^wgKq+rUiBKUx2J>ZkFNpc z|M}ql4Y(Nh2@@{A*MX~WKM_=Wy%|*h{UoS%`xdBv_Zv{{bnv9N_wk_U&H+yWw}Ilj zJ)p|@8c^-_X;A#}9Z>c1zu=kRu~R-C4uN|9bWrtr3#fMg7^w1o7hD29uQ1QM6RQ-J(RJh-Q$AiZ-JYVO6s*l|PpARbEcY>n(KB#mLn)Y#VA$U6OVemBY zMo{It0~GyT!Tn$0O5Dd>>+QT5OmNr0dEhfawciWC3&Gn#rSl6==^xT`zC9D1kNZ+k z@_i?GDEKT;;a>u(f4l=c1pGXxdiWM7zQ1qF>+unw^0^9Bdp-tKy<7{b{azT{Zvqwn z=Rontx4`A#eP(Ow z_VgbIs(dd7RnPAQ75>}c2Jj(I@%nyDz$sAea|5V)e-|iz{s=e-ejdCDJo0Zm-Isxv z;QlViqtYpV>-_T?5K&#a3sk*cc!TS+Rgf-Px(z%IJn^YsZ|8$!xUT?JuO9^!?u+0u z@P9zn%i&zHbcz=NLde0M6Sd_NvM8GII~cDVyw3H}sZ z1s?x*-cCc{V%*OGMgLAv{PA^A_3?mbc)pGT#XpNcJ---Kx|84n@cE#^za!w+z!P!* zCAd#~rqd6C@}B?|?pdJt_%`rp@Wa9X>!8Z)@%lp9+c(-V7cO{#$VW7*zi|_&Lt!$AhY$8mRm{4}2te zCwL+F-@*T!=Q=-*f}(qEz%PO4tmqu^CwXJz4S#M&sE?$ z+_!@Y|2yz>@XQyNN{<3ZLG|nRfeHBM;D6#jIsG0`eD`)x@qQgtIS+q{ySIW%aNh{3 z+_!-%!Eb`g!NXqa^Wcj>)x%!!V(|T-()|;-8oc;rPWMD`A?~+ zTn{dNwdeO*Q1tHvF9v@NJ`!B@|Gb?iLGkUapyK}=D1N%ntzI8zg2&?C4IT&H2p$jK z0zLx#AUF^F3U~x~4>%wEEvWL9UgPz%3RJr{z!SlL1QqW)!K1)0fC>1M;Qyf4dcR!^ zo{9f9Q2D$OR6cJ92f=THi@-&%^LpL{D*kIg<@cEZUkfI(~!hZui9X#U>=Z6vS6x{y^o(g^dTmt?GTm~Ng z7BAO@0jEK=!>a;*1XO)ypq@VkTnye0DxJGQwfn*EbbdP( zRCz836YzD^mb77`)5%3U-sURU+{3;PXvzuZw3|rD?z3A zN$@oAkD%Id$@{$AJHeB2?*rA}Ujd3=-w!?<{3>`9_)AdfKH&XczO%p;xW_^9$BRML z+lK>w2UNY@=L6m^7J+KVL2wn=0M7tl1s(_972LlG&llh6={ycpI?o1`{||uYfIkM$ z1s8nK<9QsYd^{)MyFk_7w?WmzNgwk5d?~mE_p<|j4OIIs`LNSH27DOqr+~+TF94O_ zJHQ3tcZ2)>AMyG*7gYOf1(nVWxDb44@V_&-zXvLv2Yl3@p989X9tWNPJ{eSfyc|^e zp9huh4?vaw=#P0jUJ92AAOeBq+Z76{zx@@F}nFO`z)KT2TD`D)1EWZcu#t zXHe-q>|ee7>p}3<04~K{0~O!%K|OzOz+ZsM&%#f8d_&;L zxUUa*3#fYh1gLWT06Yo2|7ToJUkV!#zbng4_&KFBTrN0@pb^}$8TLaz= zo{f9nXI+oF7*u=i0UruJE4cp|JOcOILG|BHf@+U%f#T~wfv18;f6n{GAgFYo20jA3 z0~GzIK;{33;91~f_nL|9zm!@iS2M|G+P~-c<%4iMs}>e6I#i1OFXV zy#E8LzK{O0>w_1AD#zb|YPXky4+h@{9tr*nxC#6gsB)clm*-D~-V{=E)d0e&1zz~6x??@?dze6IuLUj-iyJ`Gen zF9RhHJ_$Yuyzf`N{SF0{uf^a|;Mw3I;8sxeaRsRGe;3?u1JB3(El_mFea*{pDtIvN z^T9H>22_5p1;roF0Tb{|pz{A2Q0@L_Q0;cg*S)>Bfg5l?9o!0jF5rpZaQ>@Uap>gns?>EN$Hwfll^dVCu| z(O(U!z1!dk;0>Vo=@#&4@Drfw_1oYo@MoaPdE&QR?hJv);=Tzy4!i|azU~AS&$mJK zkNbby>-#iNbdLfRe+xVwycraKy)n4I3_b++Z$RbqpznD89s!<%`yB9mumP?G-vpiu z{wJt-PrJwSw-!{pJpmj5Uk4ru{sa_%+~>P4j}8N`z`X!G1AH>L1AHs^IPl=_x!za- zmEP+D{sL5cpZR^4&sTs7{|r$5;RE0?;JhDrd!7ug#l03(`p*I%3cdssf4mudF8F)! zGVtj?^m)=(!N0?O@{hcK-v(Zb`-hc=dy%6_|9`L)C>u3p6|C{{Q{{Is9?c6;-(0?w517Csv zY2XyN6ucRHI@dYeKO5BVJg)V)|C>u~eJ7~jS@$KcToc?c0UycrCwoHvz;|;!FSrFa z6YkI8KLx*2aG%F@HsM~6-w4;s!n1dRPvm+?a0@;X?%xA04taPq_yEHH3pfvd#9iqn z+#edAe+Bn5s*BiNi7Wg^v zbZGyF``2)NmFtIGutw>h!J~P$3*3b}|2qT!-{8NQOTU9~>-YD#|HW@h&koQ26FfZl zoe@y5h%i;~6I>7D{)|AcXV200v?9X-2^YYo@WLb$U)@%_2M&29R- zH28fg_?#HrKgIo>aQ{p0Yg}LFT7lmMTxW895%)6EJ(%ll+`kCF$8tTMtHBk2pXC1S zIrkTM@K~;gV9N5MhTcnS9p;JSfJzs+0^=GpVXe+=Q)L-!Bd9|3BA;ufAw;eH<&e}BY% z4cF`N_yqV&@K&yixYlxQ=hE-@JiD7qzjuSr0GEN^0hbbY{QXCuxdFV9>&HAOga0r1 z*TBP}|33bAasNLd;8t)Q?so;ZU>$UKgTD%4KNe8>%4Okxz6kkU9P-c({_@+&{VJ|Q zxCU|mE4T-IBX~Gho%=G^v0M-0dOd#s#--l_z%PLdi1+>G1OJ2H!ha&r{5arq1Ad(6 zhd}@4KreV8m&U;-%aQvX3*AR^?z_1EcjEbW@cR(=H-`Jqa?h}n{*Dakok<)^xc@t%W&AI|Zw4I2{c*1Mas4CiXMp;>1N?>G+W%MK4$+&*zr9pWNTU{e|FS zF8$VqXB*sU|EKx?U%~&A+&@qEG-@q-MLBE7+IoCV5F2es!TrKYP z`vTn`NCF9a{geFxWh+`l)3 zdm?y0{GJ5v1_y)xV*>sVzcTd0;FIw?8N7n)zTx=^+&`D={vnDZgv6an z;9*?xcLIK|#4#2;{s^9q-ySagmU7+7{mI1rF!1SIZ^iF&@U`G>a37a`tGHgubu8}n z;C;ZyfIs2-Dwlr8b2af_1RfQ_Z32H0?tcy5!!?ie^!q37U(PknHN;ir`X>IDa=nv# z{a(!VOzximZVZ0%|8K6p!Tlld!(1!4K9Bo+;y#J{zvKRETo1+lueg85^$0HgPT_j5 z-7)`yM!%!EuI5^e`xFmTufU6!(rWE(G)I%MMw2v3^M@v@l~y%r zRVS+>Gf9P;<{l!PUrPM9sFjqZ7CeE0fF1^<=7MH`gUomFwiQH`!ZhnpZ8U)hi=2S0*9Zd@N5aPhMYcUtb=* zzP#h|a^=eF%he}!(v{1*tCQ1KjPxmMm)JG?)qsg9HCAp;57#P~7DwCFgH+@Q89<8=Un#%2tsyM@(wP`CYRkT-Sws0epH7Wvr zRUMK0@=R^2+Gx*sz~~UeHLK;OCEc`23n7esln%e`)yilGqc&l4XR#&CMq?&v)F<~X z?HP2Ws%Ea$r%8J(3s$RBR-$c;C8v*8_nba6v(JO44X>2<*ZA~`mKxfAL(N)!CYf$F z#+#L?Bs{W6&vb(DUk$QxXwR9mJhJlG^Rs&eJ$sf%SZ&s%oduVud4y&W>g{I$bkF(adKGduIcf?vX+<`E# zKxunaW@ehTUG15w3x%Bp@?jbm)@av}JQKxmJ=<|-(w?fcCPExL?S4;XvTZEt1KCKk zia@E4C%ZLZ7J02wNPJ+F@g|vSj8>`P>FP)g*;g^YH1o*tX7$=O3_EIdRE%I7(kIzl zgR#mx)JWnWBwK}nI}B4^=8+^BX-rM2`S`89t~x?>Bv%K&#U6!5WNR%;Xe1e_HfL&M z8d4DX%H7yLVn$Hc<&%FZK8%4#hKjRdN>Z!A)~{W&Z3i4vrMoM8@>62Dk+eLr3~@cu z+&67OhoWMT35jamp29Cy-odpLc+22f3GwZkZ0sGYwRT$;tb}PT528tsS*4g(X_^Jb zCOU;{5k10gZ!?6}8EJO4$E}e9jhdBKwKPm8N}IS)I`w@EVWWAPqjilY1Eew(W!eaX zG=qDZKZe12^*W7(dfj-|QQ%^J_A5@hHfM}#l2mR(9{1<6LyVmL3c^>+B1kwEOy zT9#DzNJkk<>KaD()@h4f`>awd%VThCeXKTKHX)btALSYwt2V`A{@h{H%ThVA z-0o|%HPVx?`~#h7avGia4OaG11!JavWNqN}-9j$R)Y85rg{n}kW2#n)PJ{AOt)jh5 zQZW#kw+%a?eN}IuYdQq_~X>ER)fd_ZpsBX=`iW(s%pF-6mjin%|*fK)tQmg-8&T;yG>A* zr!})kxy;(l1gQJxisbZH9T0tMCa^^+$&`8VBz=h@pfp*wC(`!NO|G6}YnYZJu5}La z?lqwb*h9CRsP040?2?tn!X~x?T>@c9uQh>K4ALYGSx*J6xKtz^X3p)2iD&EV+(gv+6EEFuD?QAOWp;V=xn9A+w=6-AnDU+%qLsN$Hx^TD>;I zNLYJ96`8cB)@;;mM5(k??a+-=$RHS}3e~Vi18=os*zGNoivhQwhja!D9m=PvGd{LV zB@NidC4YfC+V#;YGLei;Gh0J3Z^izR8~d!VHpNVHtq~Fxpf=T>%8ic;3sp~dc8O-8 zLLGV+%IdI@MyZ~mXiiqWOO&tl@`XjUGQgq zGnE%51o&%9Kb=ZIWpiyhq^G@$Ms8MT+RZQ;*pR>E44+^T*hPfG#=e=)aF?VYgeK47 zH>CT*xal2VdXr`%nuk|?z%2%h-O?f}$P5X34<>!D5dw>!twfU8MbQ_$Q`vWI%$#9R zMiItnd{r|Fl&@86<`juf!XZFl?P|1qK21##GZc8 zwTlX?%@?LBjDM}^Mq|>Lre`pT(zFE`_ZS$c7h};7Xp*r$ijY{F?#D2)W5?!#HaW7p z%A6{MG$!;+_GIm+F_XAffR>BnK)zKSIX7@FhI^#sIZ=-QJDJQbw%8UYbPWlkt^k&4 zpFMVRTW+%FksEF75<7IGw#&xjWhi4*iR$0fLMqBx3=X1dxGS+QFqFM_EVkOs@Wrk!a{U=0J}1wwH<(#)d9YYZlWOzuD-p zpw2d~t;x+UgSIVGa*2+Ydx9Kcc1;_#YV{GbJ9iLFw|6nfNuTNwI+(&%Cnqg3MQw1a zTdR{~W2@D!HtBz<*AkQNi&{%d;`GX%Di+7FN_%pqmF&Q!2_TbUM)=^Ze6`J_0D0c* znaE}p*jH+~2I)u;O`rr}uAZgf4c8U(TFGn8^DqkSZK4%1$XvaswU|;cL6b2&$gj|a zV|Scie3%y*#V0X9VFp(uk$|W&<%0331s4^y(T)_<8(dA1i6K87EJkK@X`v&AQ2N}5gfwuY4jV-iuFKgt z6vV>yAhGObIS3T6Ly*aRqR0p=f;1DZ*;cY?ThAw|-uPhDEgu!HxGrC72{l%;I*HPZ zVJ2T=*f)G=h?TM|)IaQ)A5=mGSl_@n6o|}l7E?^0d5Xc>5(2iTkz~25SIAlwMZccx zs?3b+_DGoMN5R)d4vZrv$}s;DI;#<^P8Kd|EtD=MQ-bMZV#56FhndErmO6i=s<2?v zXfns>oT3NQMvjMV2C=9$_b6heiEXuVHpi50oL88u>Ea=^#fwH3r&;z1UU*U-O2#HD z<5pzZsu`Op3#B&YOM1=%Pq{oo8=D1@F+H?Ur8(Z#q$*Hg;eZn$lqsls-N+=>yoZ5b z87~t`53wqmod}yDw&~g~*d^q|=k$RsLL+23!lq+6axE$Z8E`hRk}}nmeuj2>9SV4? z<^siN1D;UZ8cDA>NOq*%lvxNhmr8)y0@<31maWVtix5w>S!+~d$+Tsia-6XdhMSQE zPP(ib!zv@z8hC05@}v)(OgBa9cd3yCVKKr01=Z1tyY&7N#)2CJa55=H;&g#4&V zSUd@hitO;!4U~gjT1J({K`UQ_TeED%AXfBy6~ZMOi(n0G(kj&45*=ww@5_uB2|bb2 z^L4MBg=WeOsw#3Z^FgkK;Xp=?xurjf9k|I{yPDXP(aIm@&tmgXo3^IuaVu#RFOJ=E zFH36Ub(OoAry%1z+?;D9gtDB>IgpuAgYDQ%JomCWa`B)Ap=4(EyJFesQ<}A8P14zN z^p$2~Qi@2E^>JAPB`A!~3Ib~l3}Cb5u?~Y)GDfdVt8@^J2~I%Wn{1C(lZBHD-Qe%G z2Z_8OQGF^rQODA;cQ?IbBO{Z|<3}5z1Z%f%-?qJP(^l&HrfA9_B?Ik5UO>ZF_9{CwAsLZgFzOq8n4=@?^U{f;~*kB4yP`emoZeRAu2GPOnXdtLxjDk zbC0fG)V7hi&~-XS@Acca?Hn2y9K34HmO-oEmh&>hm`)at2YY{Ic|U=~uUYHp-aF~KU@Qo9tA zR1|TqKvC*n0eeeJ;T+N-tsAzJt zO_wy;vwn|;2DT&`4cbjil9gRdj7TgSDTky6B3xuftJdlG&ih^7A))QeO_bR%FT-x; zQ;}ACWQ6T_EI9|l9c~+l9Y5Q*VFP>F2f^}KO3f-=GSy~p6b3{Fe{Ht3EkdfZNK{z( z3$t8}mr2hV(T*aywP;VmVQe}%akZG)Gxp`4THA1gjegpz5oU~WekOnRlQ8M;e87g9 z%6J8_B)dX0l!Qg6uAw(R+Oc-~+{VbAP|kgbOsVHGLhh{li05qE)rYzt$IN$xYe%^g zLzs52_&Nf}KYB4$E3+}e`yC2Qt6DWHM)usNp;2?`IXF8Pn^^ViJDc{T%|{&DFOImm zc=kKqT58=?StaHZ65amB+B8C+p5({x{*e}FXCrfIl&J*!r;RGXoG8199__1dtLbYL zTuYDEGE%gwquE40M<%6fzhoVwdr_m)B21`fn_$#tLK{3f*pK%s#~#~gn=FWWF(!=B z#)z4VkmZ3(mz2krhMAM-!?X#e#&|Bfh?$Ja)6FV-b(k)@pPLk0noepTZpc_yc-cxi z!<*mS!jHL*U5>Lrt8-a&kV%;T*q<}bZlFy3g=`pEPidL&PF34Fr;SzlU_oh4H!&%M zH$>pg4&vgRAt&&ojv15eW7FEj{^2fe)7B#mRLm#s8CyUiqlFoBq|gS7{g7aeQZx38 zL60@S_fG=~wOMBbnHeD#kuD~-!AvNhP*ELZV(DT{!c}OU=_H#NTttTO{#a&3)rj?Y z+q4~6)*iD(W5nurbXl^9iFGz`D>=7J2i-ueKG{_kl?@#u&f&d5WWi=GP3F?6T`f!? zGM1An6_d*sJ5u)7Y}cDwm1>VPICIEJgh}jyJq+sXG?IlNqYZN_TTF=A=%i_ffz4_* z8nKzeQwX;HwHW(HgMm24K%qt&boP-bab}{5;H=^u!sc(GmBQ`>%RDw(Z(*wsX=|lu z0ye9Fuh$I9n6Tur{K{Lllm`cw7Kxbb&npeEmonRHimpWO+{-4Sah`}9@|JxsjppFp z&%_0}=fxK+LfaGY68fSVUCS0W6*fOOdT^_;fwM*Ab}dwN5LgX&cKkqxRZ_-lOzsRB zRM2>P5;G7BSWQ$84Xn-4pLeC!0^) z(N9Lx%vq8$Sak>Vy4qD4nTUJY0}bn{F%wRc#oRBJ7Mr52a%Cl2Z zclFT?7G?<)%1n3TwW?-9)2l+_NewA! zKg_CVHmaZruIa8 zV)^`GZB*lLtjUzC)fk&$NUEM^6EG#)V)HmV15_9-UnwCJN!G@-!;^QLm`7_(w3Te# zHlL8J?#=8w&lGUm+pch1)^1<3VPNa?jhTpJQiez_DP*|3>K@>>mLOC6%f7PfXbe4BHh$3f7amS9Jk z3H((cRX5G{(}Y%v6dH&`5I3nXnzU_iMp!HjQbE~@q@5&@3&pFEj)82JNYxPn>*fQ^ zJqWLfkYf|1GWdjHn=$QJtD*+lf@Bi<0PP3Y2mquXJy1CNR*mGVhdQ zO(D!b31+L{AJ&}^v0?L68qiwbv@NvIKo+eErob-43Z$ym6yKM?c2}kut7Xv&^l4MYquLyi6XF3%tOCGz8SbP6g`BjQ;z(;53|zKvVESUOSdAi z*@I-dy0l(rrJi|D79OrCZhH)q*@i0=gedr1?Onc&A&tZLW|^9(sJf(O8e0cpx5(^A znUkCSNYYleolS)eRr?Fl?|G0FwlKLLn$vm`O*U*FN2HJ;iL% z(K|9(dZxo@C*OWT2DYWcWQsqGT7cb{tjqb>7YhQgtl%_EA5@YYy>E3CW&tH7n zBaUqKmLZY3;(nHX=a<%znGVGvn{oAcm=lSVEIpr~w7!v4_Ez>S)7B1zqL0AZO|+o2 zK3%L_on+G4=3FL$tqxcw2z!tUmKoB>2QN&CRdw;PvgNCwOJuk5L0Rt|jxP04aRc5o zBHPXL_K*$fc?zWsVdR#yl;S6`s%YGLtA=gaOGR3y!F7LL8yrb9>rzA8aypB4uTf)vtZ-SZCF!e>}n&$3{#_j!Ld9z~{x0KUyKRBo2lxQ7ItvYRlQ^Sc#Cl^g?LFqm6_Epv6S#rc~MEUatV z$8&0N{@h8aycn&@%hp1@q8?TA-ewDh**vs5S!ereb|ayV^HL=)Scry`C-9FkD3nruZ;#4k4aOWi_dagrKxjOv!&I+ zo{-Ov?9@89;y{DJa9g(xGf!o6#JvfvH+#gjL0>!2Nb zOiHPy`8Bu-_F**QT;2Nfg_LnK@W2Kd*Ylx z_kR&dFaTc8%Yht^=8&FV77i{`qIRm8ABUEk>R;KJi|Z+f4x_ugTsTSvw+_&7OEHd6 zgv-l&uDo2cwvK4x;aW;~$aF&8RrPN~mWJ!6M$fuF>bUr7ePd2haPEszBc6B=f$pb~ zDLRzEPXoC!8bv+NQ_=hKayW@WL9W%mw*KwmpEzYs={E^5cIB1Ye8BW1-+sM|9Ny$s zI+OZ$ZJIf2H=0F4T2K6?U%Lx7d+z6$FPl^M&knmg*i=E4k@3sRP5sLng_aD%_LaVj z)hC`bjH;0-1e4hojIf0%({+I#Ov~ZwE`}niI_i6@Uf)Y(SK| zdq3z-*gBA^DO1)6`k#hT%^Swr9JZmoOgZ{&qp$?4>FN1hPdUnH5pzqB-iQbhDUi>g z`&h&*l8lPnm?6SU6y)Yn{?4}#1!iej?JuY}79l zSDFkAl3TNq+xw3xU9UvK>^4|wqN}h*(eK^Vlz1d;l$dRQ!v2XF=ddbw(&<>0q{^a= zWGs)hb$duBs+7VOJZ4qAJ*hmpa--ddT^1TzC%0oS&chkrF+|jO|0^6o)RW9O4lPvr zd3I!&X(8g`zF~qIEgQpJh&9bo6Pxvj%r?WJ8JaW4IZ3icI|4amR(XmieB=!(o*9`z z!Wp&2&^@gMs+j`|VU?K+LWhge7L&w*X3@@m^Af6qYge0Ob5~LFbTbX65Y5KkS&3u^ zBf?c@qB*o}vq&_UH`{eBqLs8IQPT}qvBI3!W)!2Nw)_|O<+#cx4Oi2VIMHCB)bWCt zMa)tZ_V74uT!`zSm3_)nb249Ak_}985cd?Pdo^_|#8fFyAp?va2iuR$O6E$`nk^<} zrtn<*HI$Nagy~W2+nwP^#I7HV4tk#WXHc$*<#su)chxvzo9V~A^4vL$2T_1lC#zPhTv=XmR(a)$WaZhb&pi9I6{}XPfUvxsiL*B7Wppdb zE6(9BS+#2QnP;80;vDF-l29II*GP+3C1gVxpc5o(mvfFbBPw$G{0bgd!9~r+#rrCV zoaN{X7ZR>M-ex*e9wm1$?kdBg0km?pEyc1}?Zy?5Sb zk_gYYN*M8w0(OSjRBc`py3hO_)d^lURu`|d+7py}LLC$DEl6X5xYe=)wQGkB#go^)+BkAtw&gL> zYSobRI&qw>Q8Y`XUPJg!az0KiO!PgtCP<;qb;i+bx$HQ5{8EcGQ6;Nn*k?l%^B!e& z%2=S#xSpOGTIMS|jeLCwJ6YLRsS^i6vclO~y^kax^r{=JA-gA7VpD?7HX&xt755o9 z<=KI;Fr<#(M6))n`lvQxIbKU=(RV^ek}HlZa6E_H0!N2)?f#D?zoaq(w|B5SJ4S2q zWO7z)_El_~SFfYVhpBnW9{Wx%pl+utqm|iCCXeklJEw$+uebJaMf;c4aORyJ zU4oWI7Pec;hq!%eS7oEcTQuuuFM;Q^Qa9Soo>ut3$s}jYSB|qh-Gwpt@j&ux=-Tllz%}B# zUDYNHYUv|(>gj8nqm@Zcq+e+Ca|}F(0J#h*v5@#Kb!=o08JI&HA&{#w@qBZ3)G707 z@9s!+y!k8)VyqG?s>mg5%WJceLPc5KZ!hr3278zWv}j^Wq#RN_;ymk573N%=Y@QPa zmO}A}^EHiKl~i0Z{?bq}fm}`YZ0h1^=UZ8suZ8o^Ro8TY*cBs#PBFr=M>J*5rp9^8 zQ}N*PEqc{ATflDBmgUM&c%b!pbQ>LjOG(@6Y(3)hPL0J`44|{n;r1YNJZpSXq}^=q zjt8@04(Iz29E)zF@C;f(l3WVk)YX@-j-J?6JVs*)X%-P!edT!%-QkJC72lT}T0&U7tXZ>*-j5h zhrT`AG3m~PUEGjn!{!vG-;}dcsFnS+&b+^{nO<8vIWXOdI%{h4m(T>-&XAser3kG1uw8=IqEKE2IYrdaeyXXGx4V*C%V=n~?1**CTk&*tBlPHL5ub~hjMf{s9&_<{_09lx0&|ZLg#*^} zOrtPAF}=ZRRohL%9CDO`8GhPuslTPsO^@vR_sqs+|&ZIs(SCDd6!OxHss9S5#w zc_oj=o%v`|k)==;K|IFT3la20H<^dVW%S_Psj8`k)`qj6!oEM{EA)qWpnAUY_7_yl z6T|sFau4l|stJ(!V)|oTniNN+RCWxz#$7%mfdJs$hjA)Xqid^50cUE7H4*fEk7K{2 zhbqul=ob%UAJVFnS76!#&UEx7*FMwXVv4mYq<;8W(J<#|3T6TvL5$&08|7*)G;^b^ zmAm^ycBjzhI-Seza%Ewm8N&22pQgz`Rk+t?@j&*C*YM7sq_$ogvH9|nT{dgw5UPp% zk?as@GoSr(U9TyN2>rnxraiTIAbYOl#)xw){&Y@K7Bq|82$r__Xln!nNcUk-c40xP=~RnB*>oDF87^{*fje|Ci?<+nQvJ6x8Zmt^ zc=iyZ{>0d%cv5>#ryi|USZtvK6^~&LCJVNFR9x-v`8ZQkP3JUo&@#P^!t~P2yRN9l z$(GlZYik`!Hp~qtvw61fY3+TKJR4zxafnksWjaS3TS^_(8XuWZo95eCjDW3*iG)-g z=Ade;3>IyTXFbO`ZZL1cbTV_t$?d%qOJ0qva5VEZm1W2PlSP>LZNfq2wHfpSZ&*}e zO$S4h#84FN;oQ*{Cef<5TJb1%%cu)Mlj&BLu0!0V>oM!i(G|6U=eFni4A#N@%tH&}_OFO18v=``xm!b{qou0VY${qYXsX|(VbyxG z>UhPo;4cZL&%l(kTGHYH@A}w-rdv!*Or+#zxVA2ex?Y`NjEfyG2K1BRGm}9N6CC@U z$q^k2<86LMx>rZU_Zt54`!E8N=5$I^5j(s0{?3Q*k<5;4lAX;GYz0V}OeK!L+0v?B zQ?WPGk;J)&K>^eu@jaeeUGz8|en>n1Sj0%?bUJ*EX$uO08Alj2?S*n5k~0O6>VqvMG#Q{hs#>Y-3}PGJyaSR%o33!?by990~+xYKS9ezB>Iu z8b;L-D&2+_?svC$`D7s&qEg!0Oq#wGJcP?CPY2Coel>$t80> zARe~B>|cW{YOa~a-Z?c+8@w2di80}&>cO0Ran8O`h`~|qMg5$Y^dpyHOViEJIMSde zDq0vW9$jAyK85JCI@4~90}fqh&p_{NuI|WYnvM<*LOCa!DiEW+4PKq(j44Q6Rf0(i zwrGRo1(}<1Vv3f3{+GK=oxdZECwXmdg;)JGrnXZ^Ye8Z){>u%mfOk z^*9~LKjZSILu3zCF)qMlG^YvrEI#|r@&x%gdk9m9Qw=N|5n~?G z=edrN>pred6MjUCrwHpP2Tj8Gh%9n1zEO9{sL;l-_Vm&@3O1E774|V{G@DaU?cnYk zw4+vBfD{weVWU9@=$&3MP)IHd6xYmh>aYr*xD69g>nmz-l>7M1B%VRw=lpx;%LG{n z^jAa~nsU7uR#Tq+o%`<{B@S z-+EN+I1^eSWi5f#$n1p3uEYNiB#0kxJckg{tF75OHJtU?lOQpeN79#>?q&1ReCfLA zF{YV0+Z#DA=40J?5WWKt*p+w1_7h~l50-Xe%O}uan0#buJf;d%CeVkvhVVT7D7&%Z zHjK`pK2PWIB1Xf+tjEX`$hT?%B~CKDVy*hjAQ5O%nd~)_$)V5^-2vj>fIbmgqM4BN z+~!jpOjQS8FzJjZ48>_j+#h`?$Z&DBFqdxO;CEF?pJ%Z>{cuy)@A9-k|E2SZA49Tp z43rL`>B*>_0dtx1st+ep6LyScot20DbRfjZ&Hx3SLN(MF!Z(J8Op|twv8b|on zK!+6V4Be-c#xH%VrZd}-y=}GIt@yck^Ub}(-YD-3-^pRUsbVT-HtUMQYtFQc?hg@k zR6@#{6WSu2XQ_N%hpnq2x?P}Pcra}$e47COWei@Ln59c7QDoaRHuqVAET&++h#x7i zfrL$gF4io;%1$z_ zvfVo*kjWNPE$y_n*m$9xvUzp~aW2ytO)5_PlLgL}oi>SKw%)ScN3(D?!SEu#4=h+4^-MN2UI z6Tt(RPzsZgVA{4`VdIH20{ZA^W5PbdpzS!h&o5XEfx+U;IGx(~#~4h0cYKV2vsp10 zBuH?!-7!+cKA`;ck4;v<&e-I4uVNdE18nhA4P;4sb@YahSu;F0_SJ@v$y}e#h6eNW z>1XecG=x$W_C_jDY{$@Z@@Wve?9Vp78Q0}4GzHDS)ASn?3yTIJ(v)*iHJUnqxTIm2 z)kAG$gjJ9v9I{%o-S*jsP@K^5l}9U8j}88w!CX)u-E!-e%!;+aUFFD;r7eIZI#ym#2AsB-g|Or) zojF!Xs$@DP8>B1o(?_(DscJzPQ2C6t_le=5668~vqqq?5lEFZ~xKfc$kniA9ai zi!aL=XAx>kczw~NfwcN`<}g@kVIUgZ8rUxr96=<7??ZHu#WJRCrV5FxXd%e3Yld;C z*w=2cZydg1=$g@tq0OF0mpVmCUuy_8%%V*3X*9inOvYCO}_hw)Zlh11U)Aq|=+If2|FLji}*BwYqd+7N}1wGHx50Q75$wO#ibXLk~ z+tex{p9w;BwjQl^Xo&^i1YwA6liT-D+tT8}=;ksHC8LKy)ojqJ1r88OA>n^_224+z; z>CJ9wHFFG-jazdGh%`K%8c63xg~5_;-jzQXiazdN)XG+WV9A=EU+37!R*Ep*#aD)tU2L9ZlS6p7T8k;I_7qJWGS8j}Ex&8CSXks- zo|yS{KFX_3DyW@@a$`FOyvm07q~yT*fvx=crlU=3*KAv}Z4=I&TZeaUN``k{x)TTA zE*Rzu20ME(Fjhk!_aszQ^_4n})xp1oC3Ky?)}Mra()p2&Vr1!X7Lv8?jcN0BMVyg` z9U~K*3}G+9Yx7{w@gNGMxW^<7(XTskU`KARM@p^))TjCdE9?-NC6s^1BfQ;c>Jz2( zZ+PTA#Z+44as73o(c-gTe61tzshq?Qc$irwFQUSCItu<-59swY8csRH-@i7`XzqL7 z^P2UHDP6FsxFaRCwb)LjI_kg0#q=<@LS}1Llg5zcEkt9=wGQWH)mnDUOvlWT%4D-T zRX%eMOc>~+AK6pprpV`D+4f^J((ipl^)+rpZL-Z7C9=)XqS4Pk_~G5mBJi!M`w11k z_~F46f*u!xm;u@A(xz7MK)*-1?IlooP0OHeqYVR;y*^;){N_IS!N@fZ$8%JUzxEi$ zBOO5Md&bhJm;r^2ww>F+lB(}}L$Lrn& zi3F$hNQKw5eWlsQ(B2WKA4)RBIZNzFJ>v5!o(o|%4V*)~cJ!eQ1zCmU#@o(}#IuxS zn(KTf#<4NiOhrN1F}U|Gx)BBSB$srH0aCApYj?<;!p15?W0^H1mOftFH%mo!Knc9x zSqjd2nczc-{>Gn8Q+j+OB;)9gE#{qNwa4AD^q88v)oxDPNb)o7ust?NRSJ_$!owpM z6>fdz`Bp}~cp#BeJ-Rh6r_^|wJ?I(^k~v2WZpI%t%SL_ z3L!g1zP=+usxh~5XT%a&THO=5Z>$}@Cvqtp=Vr>PFeq|XtKqmvzg@>JWM36Ap&WN* z#AJdICoqP6Rb+xqV?os0sSD|;22q=_x8dWLDpKQxgnh7E7k2)H8jl^<6Ly=JDv%b5 z%#eGOiF8vXb5EkVI3Axs_$d85Nn>Mo`bX6>hRgN7xh2#)KrSa~pPXBKy~v4er+>yZ z3iyWaY0b5CHWPp~DigbFO?|wi+c&R-6f9r%T7C?BARD>nmp13VXkxaqDc-;5G=<4r zVzi9=1!i$N%+`9NHmk(a7I|Uj_Al7P@-hvx&zsn}AEph5PM+$x^Gh5RTFs{z4iF9N zo}mx9Zkvmio)C2PKG9yf^6loBxTF2vBY#!y2O2ouOGecpRWb}TRPslg+hrS(p zK77_4clWSlfkyb^kk%`*0Ks%OySO0JQS79dj@{S?pe#avbpTP~BNbESSR2Lddj6G_ zzTr}Xl;x~8!Ra`x75leWiV^wOSLPUz)jbDoOw2H!vDmP1E>E^F@W&TJ?BgsOY-Kb^ z!|Z??z0@753ie2k2k@e%+Cv9BP~RS%eXV7-;6-U2-jMh0xv8kL$q?^yXg7ABy>L+) zk?>~rLrR{+*8+QLn0Xe@2r!}NSbxU)gbf^hy!Bm|)Uc7s267pblAn0UM>(s_#jnW^4hlxGTy{9o=D}-vroo&%`*A*LxHkbLIBQn-5d@@bXE=Q=mJ@_ZQJ~^ z-sNtOHdU^-R4QYIL%jTX95{*#VET+qRZG40-I!v=>05Czj*=SGRKGwOLECb3i;~s5&0b_9(XtP0Qvbu{?QoS>ieX*VFNW@_W zYVbvlc&)@fHeyR9eZDI*?7SJ*yKTp2 zwj_|-A;s5C;ulSNg$bXO@e>r|=xJZK@zwfVOj-1O zYDUWs&x{?{zClB6+S|{0bCsVD7v9P$mRcY4#x9Pg>c{zLwSyOhY{RTKL+@|W6l0mv z2HC&9)yTW8b}>LT^@WxXC1-zL$|dV@qy7W{1yG{9i>B zY~vC9Yc?cgAGL`G;r9L5jobS5shjTn!8~^G}rB{scSXQqG z+uy9){@=dwRQDIvkgMm4%D!<@(OrX4Plr2sT66sdjx>CQD1PN+I`F{(WF&qJCkE|N zzxmq872&V^EKW>t&UuwZXFs_sew!tHBqwdY{CQXUu*&Sw>03D-bgm!E@vd$vfPF6~ znl=5i3?1LhiN)_xqL{9l*T0@KRP5hb)&hxtVy25KW3q52lQ<@Sg3GL5(m8Mz(-(ER zGtvLEI$gBI_VbsHuhJB)Z*yfI*y)PQzOtjil9}IbO0EX)mBHMncJdq%7A`X#Ag3Xt zrlJnT6aytmX&T3PlABs(cDB5&7>x_L-M5pEpsr2rNk&F zT_5dgQoO%6N16Nc)~|MP^iCx zs_G*I3h>B8y3C-po;iloUN2u9iUAlk*p^dNiYr>0^e_FOQpF_!`+h>nc8kNEwtL^t zpCr+oO{wxoL< zut$>CxIU#kz}!~E23ckU$LgyUE!k6VQK@Q3hRy5hP~o#ZDVc9ApO%peQ3a_u@jwXUhk*LVs8V#M8n%}i*V}g| z@HXj zB`bbP$i+uw2)EO9eNCvFh*3ss9*7vCgs<`+6iV{38Hagzdrw3ugn){}0<%3Sd{oGm g(L@pqWy){-rjUPBD7VmNjS)=mWJDj%@V(&wAD, 2008, 2009, 2010. +# +msgid "" +msgstr "" +"Project-Id-Version: pwdutils 3.2.10\n" +"Report-Msgid-Bugs-To: kukuk@thkukuk.de\n" +"POT-Creation-Date: 2011-05-10 16:46+0200\n" +"PO-Revision-Date: 2010-07-07 22:45+0700\n" +"Last-Translator: Arif E. Nugroho \n" +"Language-Team: Indonesian \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=ISO-8859-1\n" +"Content-Transfer-Encoding: 8bit\n" + +#: lib/authentication.c:46 src/passwd.c:840 +#, c-format +msgid "%s: PAM Failure, aborting: %s\n" +msgstr "%s: PAM Gagal, membatalkan: %s\n" + +#: lib/authentication.c:100 +#, c-format +msgid "Enter login(%s) password:" +msgstr "Masukan kata kunci login(%s):" + +#: lib/call_script.c:68 src/vipw.c:89 +#, c-format +msgid "Cannot fork: %s\n" +msgstr "Tidak dapat fork: %s\n" + +#: lib/call_script.c:76 +#, c-format +msgid "waitpid (%d) failed: %s\n" +msgstr "waitpid (%d) gagal: %s\n" + +#: lib/check_name.c:70 +#, c-format +msgid "Can't compile regular expression: %s\n" +msgstr "Tidak dapat menyusun pernyataan umum: %s\n" + +#: lib/chown_dir_rec.c:54 lib/copy_dir_rec.c:147 lib/group.c:389 +#: lib/user.c:495 lib/user.c:759 src/grpck.c:277 src/grpck.c:654 +#: src/pwck.c:284 src/pwck.c:554 src/pwck.c:916 src/pwconv.c:206 +#: src/useradd.c:564 src/useradd.c:1036 src/useradd.c:1111 src/vipw.c:295 +#, c-format +msgid "Cannot change owner/group for `%s': %s\n" +msgstr "Tidak dapat mengubah pemilik/grup untuk `%s': %s\n" + +#: lib/copy_dir_rec.c:77 lib/group.c:369 lib/user.c:475 lib/user.c:739 +#: src/grpck.c:259 src/grpck.c:634 src/pwck.c:266 src/pwck.c:536 +#: src/pwck.c:896 src/pwconv.c:198 src/useradd.c:547 src/usermod.c:543 +#: src/vipw.c:189 +#, c-format +msgid "Can't create `%s': %m\n" +msgstr "Tidak dapat membuat `%s': %m\n" + +#: lib/copy_dir_rec.c:99 +#, c-format +msgid "Cannot create directory `%s': %s\n" +msgstr "Tidak dapat membuat direktori `%s': %s\n" + +#: lib/copy_dir_rec.c:113 lib/copy_dir_rec.c:199 lib/group.c:378 +#: lib/user.c:484 lib/user.c:748 src/grpck.c:267 src/grpck.c:643 +#: src/pwck.c:274 src/pwck.c:544 src/pwck.c:905 src/pwconv.c:215 +#: src/useradd.c:554 src/useradd.c:1046 src/useradd.c:1117 src/vipw.c:287 +#, c-format +msgid "Cannot change permissions for `%s': %s\n" +msgstr "Tidak dapat mengubah ijin untuk `%s': %s\n" + +#: lib/copy_dir_rec.c:138 +#, c-format +msgid "Cannot create symlink `%s': %s\n" +msgstr "Tidak dapat membuat symlink `%s': %s\n" + +#: lib/copy_dir_rec.c:185 src/vipw.c:230 src/vipw.c:238 +#, c-format +msgid "Cannot copy `%s': %s\n" +msgstr "Tidak dapat menyalin `%s': %s\n" + +#: lib/copy_dir_rec.c:215 +#, c-format +msgid "Warning: ignoring `%s', not a regular file\n" +msgstr "" + +#: lib/copy_xattr.c:51 lib/copy_xattr.c:69 +#, c-format +msgid "Cannot get attributes for `%s': %m\n" +msgstr "Tidak dapat memperoleh atribut untuk `%s': %m\n" + +#: lib/copy_xattr.c:93 lib/copy_xattr.c:113 +#, c-format +msgid "Cannot get attribute %s of `%s': %m\n" +msgstr "Tidak dapat mendapatkan atribut %s dari `%s': %m\n" + +#: lib/copy_xattr.c:127 +#, c-format +msgid "SELinux not enabled, ignore attribute %s for `%s'.\n" +msgstr "SELinux tidak aktif, abaikan atribut %s untuk `%s'.\n" + +#: lib/copy_xattr.c:133 +#, c-format +msgid "Cannot set attribute %s for `%s': %m\n" +msgstr "Tidak dapat menset atribut %s untuk `%s': %m\n" + +#: lib/copy_xattr.c:154 +#, c-format +msgid "%s: Can't get context for `%s'" +msgstr "%s: Tidak dapat mendapatkan konteks untuk `%s'" + +#: lib/copy_xattr.c:161 +#, c-format +msgid "%s: Can't set context for `%s'" +msgstr "%s: Tidak dapat menset konteks untuk `%s'" + +#: lib/get_ldap_password.c:39 src/chpasswd.c:224 src/chsh.c:516 +#: src/passwd.c:881 +#, c-format +msgid "Enter LDAP Password:" +msgstr "Masukan kata kunci LDAP:" + +#: lib/group.c:305 src/groupadd.c:506 src/groupdel.c:365 src/grpck.c:820 +#, c-format +msgid "Cannot lock group file: already locked.\n" +msgstr "Tidak dapat mengunci berkas grup: telah terkunci.\n" + +#: lib/group.c:334 lib/group.c:409 lib/user.c:440 lib/user.c:514 +#: lib/user.c:704 lib/user.c:778 src/grpck.c:227 src/grpck.c:294 +#: src/grpck.c:599 src/grpck.c:674 src/pwck.c:234 src/pwck.c:301 +#: src/pwck.c:571 src/pwck.c:861 src/pwck.c:936 src/useradd.c:582 +#, c-format +msgid "Can't open `%s': %m\n" +msgstr "Tidak dapat membuka `%s': %m\n" + +#: lib/group.c:340 lib/user.c:446 lib/user.c:710 src/grpck.c:233 +#: src/grpck.c:605 src/grpunconv.c:225 src/pwck.c:240 src/pwck.c:510 +#: src/pwck.c:867 src/pwconv.c:224 src/pwunconv.c:172 src/useradd.c:538 +#: src/vipw.c:249 src/vipw.c:258 src/vipw.c:272 +#, c-format +msgid "Can't stat `%s': %m\n" +msgstr "Tidak dapat memperoleh statistik `%s': %m\n" + +#: lib/group.c:435 lib/group.c:478 lib/group.c:492 lib/user.c:540 +#: lib/user.c:591 lib/user.c:605 lib/user.c:803 lib/user.c:873 src/grpck.c:703 +#: src/pwck.c:965 +#, c-format +msgid "Error while writing `%s': %m\n" +msgstr "Error ketika menulis `%s': %m\n" + +#: lib/group.c:503 +#, c-format +msgid "Group not found (and not deleted): %s\n" +msgstr "Grup tidak ditemukan (dan tidak terhapus): %s\n" + +#: lib/group.c:511 lib/group.c:540 lib/user.c:623 lib/user.c:653 +#: lib/user.c:883 lib/user.c:912 src/grpck.c:715 src/grpck.c:723 +#: src/pwck.c:977 src/pwck.c:985 +#, c-format +msgid "Error while closing `%s': %m\n" +msgstr "Error ketika menutup `%s': %m\n" + +#: lib/group.c:520 lib/user.c:632 lib/user.c:893 +#, c-format +msgid "Error while writing to disk `%s': %m\n" +msgstr "Error ketika menulis ke disk `%s': %m\n" + +#: lib/group.c:530 lib/user.c:642 lib/user.c:903 +#, c-format +msgid "Error while syncing to disk `%s': %m\n" +msgstr "Error ketika sinkronisasi ke disk `%s': %m\n" + +#: lib/group.c:547 lib/user.c:661 lib/user.c:919 src/grpck.c:472 +#: src/grpck.c:730 src/pwck.c:468 src/pwck.c:734 src/pwck.c:992 +#, c-format +msgid "Warning: cannot create backup file `%s': %m\n" +msgstr "Peringatan: tidak dapat membuat berkas backup `%s': %m\n" + +#: lib/group.c:552 lib/user.c:666 lib/user.c:923 +#, c-format +msgid "Error while renaming `%s': %m\n" +msgstr "Error ketika mengubah nama `%s': %m\n" + +#: lib/group.c:693 lib/user.c:1094 +#, c-format +msgid "LDAP information update failed: %s\n" +msgstr "Update informaso LDAP gagal: %s\n" + +#: lib/group.c:702 +#, c-format +msgid "Cannot modify/add NIS group entries.\n" +msgstr "Tidak dapat mengubah/menambahkan masukan grup NIS.\n" + +#: lib/group.c:707 lib/user.c:1103 +#, c-format +msgid "Unknown service %d.\n" +msgstr "Layanan tidak dikenal %d.\n" + +#: lib/libldap.c:1364 lib/libldap.c:1429 lib/libldap.c:1484 lib/libldap.c:1610 +#: lib/libldap.c:1752 lib/libldap.c:1992 +#, c-format +msgid "Authentication failure.\n" +msgstr "Autentifikasi gagal.\n" + +#: lib/libldap.c:1760 +#, c-format +msgid "Cannot find base ou for new users.\n" +msgstr "Tidak dapat menemukan dasar ou untuk pengguna baru.\n" + +#: lib/libldap.c:1763 +#, c-format +msgid "Base DN for user account `%s' is \"%s\".\n" +msgstr "Dasar DN untuk account pengguna `%s' adalah \"%s\".\n" + +#: lib/libldap.c:2000 +#, c-format +msgid "Cannot find base ou for new groups.\n" +msgstr "Tidak dapat menemukan dasar ou untuk grup baru.\n" + +#: lib/libldap.c:2003 +#, c-format +msgid "Base DN for group `%s' is \"%s\".\n" +msgstr "Dasar DN untuk grup `%s' adalah \"%s\".\n" + +#: lib/logging.c:65 +#, c-format +msgid "" +"Cannot open logging plugin:\n" +"%s\n" +msgstr "" +"Tidak dapat membuka plugin logging:\n" +"%s\n" + +#: lib/logging.c:81 lib/logging.c:99 +#, c-format +msgid "" +"Cannot find symbol `%s':\n" +"%s\n" +msgstr "" +"Tidak dapat menemukan simbol `%s':\n" +"%s\n" + +#: lib/logging.c:140 +#, c-format +msgid "Error setting up logging subsystem!\n" +msgstr "Error mengkonfigurasi logging subsistem!\n" + +#: lib/parse_crypt_arg.c:87 +#, c-format +msgid "Can't open %s for reading: %s\n" +msgstr "Tidak dapat membuka %s untuk pembacaan: %s\n" + +#: lib/parse_crypt_arg.c:95 +#, c-format +msgid "Unable to obtain entropy from %s\n" +msgstr "Tidak dapat memperoleh entropy dari %s\n" + +#: lib/parse_crypt_arg.c:110 +#, c-format +msgid "Unable to generate a salt, check your crypt settings.\n" +msgstr "" +"Tidak dapat menghasilkan sebuah salt, periksa konfigurasi crypt anda.\n" + +#: lib/parse_crypt_arg.c:144 +#, c-format +msgid "No support for blowfish compiled in, using MD5.\n" +msgstr "" +"Tidak ada dukungan untuk blowfish yang ikut dikompile, menggunakan MD5.\n" + +#: lib/parse_crypt_arg.c:149 +#, c-format +msgid "No support for %s available, using DES.\n" +msgstr "Tidak ada dukungan untuk %s tersedia, menggunakan DES.\n" + +#: lib/passwd_nisplus.c:306 +#, c-format +msgid "Could not determine hostname!\n" +msgstr "Tidak dapat menentukan nama host!\n" + +#: lib/passwd_nisplus.c:322 +#, c-format +msgid "Can't find %s's secret key\n" +msgstr "Tidak dapat menemukan kunci rahasia %s\n" + +#: lib/passwd_nisplus.c:338 lib/passwd_nisplus.c:359 +#, c-format +msgid "Could not get public key for %s!\n" +msgstr "Tidak dapat memperoleh kunci publik untuk %s!\n" + +#: lib/passwd_nisplus.c:348 +#, c-format +msgid "Could not determine the NIS+ root server!\n" +msgstr "Tidak dapat menentukan NIS+ root server!\n" + +#: lib/passwd_nisplus.c:366 +#, c-format +msgid "Could not create conversion key!\n" +msgstr "Tidak dapat membuat kunci pengubahan!\n" + +#: lib/passwd_nisplus.c:378 +#, c-format +msgid "DES encryption failure\n" +msgstr "DES enkripsi gagal\n" + +#: lib/passwd_nisplus.c:390 +#, c-format +msgid "rpc.nispasswd not running on %s?\n" +msgstr "rpc.nispasswd tidak berjalan di %s?\n" + +#: lib/passwd_nisplus.c:411 +#, c-format +msgid "ERROR: password incorrect, try again\n" +msgstr "ERROR: kata kunci tidak benar, coba lagi\n" + +#: lib/passwd_nisplus.c:413 lib/passwd_nisplus.c:481 +#, c-format +msgid "" +"ERROR: %s\n" +" password not changed\n" +msgstr "" +"ERROR: %s\n" +" kata kunci tidak berubah\n" + +#: lib/passwd_nisplus.c:429 lib/passwd_nisplus.c:456 +#, c-format +msgid "DES decryption failure!\n" +msgstr "DES dekripsi gagal!\n" + +#: lib/passwd_nisplus.c:514 +#, c-format +msgid "ERROR: Unknown error, don't know what happened\n" +msgstr "ERROR: Error tidak diketahui, tidak tahu apa yang sedang terjadi\n" + +#: lib/passwd_nisplus.c:519 +#, c-format +msgid "NIS+ password information changed for %s\n" +msgstr "informasi kata kunci NIS+ berubah untuk %s\n" + +#: lib/passwd_nisplus.c:521 +#, c-format +msgid "NIS+ credential information changed for %s\n" +msgstr "informasi kredensial NIS+ berubah untuk %s\n" + +#: lib/passwd_nisplus.c:590 +#, c-format +msgid "NIS+ passwd table not found: %s\n" +msgstr "tabel kata kunci NIS+ tidak ditemukan: %s\n" + +#: lib/passwd_nisplus.c:606 +#, c-format +msgid "User not found in NIS+ table.\n" +msgstr "Pengguna tidak ditemukan dalam tabel NIS+.\n" + +#: lib/print_error.c:30 src/rpasswd.c:120 src/rpasswdd.c:139 +#, c-format +msgid "Try `%s --help' or `%s --usage' for more information.\n" +msgstr "Coba `%s --help' atau `%s --usage' untuk informasi lebih lanjut.\n" + +#: lib/print_version.c:31 src/rpasswd.c:73 src/rpasswdd.c:90 +#, c-format +msgid "" +"Copyright (C) %s Thorsten Kukuk.\n" +"This is free software; see the source for copying conditions. There is NO\n" +"warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n" +msgstr "" +"Hak Cipta (C) %s Thorsten Kukuk.\n" +"Ini adalah aplikasi bebas; lihat kode sumber untuk kondisi penyalinan. " +"TIDAK\n" +" garansi; bahkan untuk PERDAGANGAN atau KECOCOKAN UNTUK TUJUAN TERTENTU.\n" + +#: lib/remove_dir_rec.c:74 +#, c-format +msgid "Cannot remove file `%s': %s\n" +msgstr "Tidak dapat menghapus berkas `%s': %s\n" + +#: lib/remove_dir_rec.c:83 +#, c-format +msgid "Cannot remove directory `%s': %s\n" +msgstr "Tidak dapat menghapus direktori `%s': %s\n" + +#: lib/selinux_utils.c:80 +#, c-format +msgid "Couldn't get security context `%s': %s\n" +msgstr "Tidak dapat memperoleh konteks keamanan `%s': %s\n" + +#: lib/selinux_utils.c:88 +#, c-format +msgid "Couldn't get default security context: %s\n" +msgstr "Tidak dapat memperoleh konteks keamanan baku: %s\n" + +#: lib/selinux_utils.c:97 +#, c-format +msgid "Couldn't set default security context to `%s': %s\n" +msgstr "Tidak dapat menset konteks keamanan baku ke `%s': %s\n" + +#: lib/selinux_utils.c:117 +#, c-format +msgid "Couldn't reset default security context to `%s': %s\n" +msgstr "Tidak dapat mereset konteks keamanan baku ke `%s': %s\n" + +#: lib/user.c:81 +#, c-format +msgid "Can't find the NIS master server: %s\n" +msgstr "Tidak dapat menemukan master server NIS: %s\n" + +#: lib/user.c:88 +#, c-format +msgid "rpc.yppasswdd not running on NIS master %s.\n" +msgstr "rpc.yppasswdd tidak berjalan di NIS master %s.\n" + +#: lib/user.c:94 +#, c-format +msgid "rpc.yppasswdd running on illegal port on NIS master %s.\n" +msgstr "rpc.yppasswd berjalan di port tidak legal di master NIS %s.\n" + +#: lib/user.c:411 src/groupmod.c:434 src/pwck.c:1082 src/useradd.c:1630 +#: src/userdel.c:569 src/usermod.c:1373 +#, c-format +msgid "Cannot lock password file: already locked.\n" +msgstr "Tidak dapat mengunci berkas kata kunci: telah terkunci.\n" + +#: lib/user.c:615 +#, c-format +msgid "User not found (and not deleted): %s\n" +msgstr "Pengguna tidak ditemukan (dan tidak dihapus): %s\n" + +#: lib/user.c:858 +#, c-format +msgid " Error while writing `%s': %m\n" +msgstr " Error ketika menulis `%s': %m\n" + +#: lib/user.c:982 +#, c-format +msgid "Error while changing the NIS data.\n" +msgstr "Error ketika mengubah data NIS.\n" + +#: lib/user.c:991 +#, c-format +msgid "Error while changing the NIS+ data.\n" +msgstr "Error ketika mengubah data NIS+.\n" + +#: src/chage.c:56 +#, c-format +msgid "" +"Usage: %s [-D binddn][-P path][-m mindays][-M maxdays][-d lastday][-I " +"inactive][-E expiredate][-W warndays] user\n" +msgstr "" +"Penggunaan: %s [-D binddn][-P jalur][-m mindays][-M maxdays][-d lastday][-I " +"tidak aktif][-E tanggal expire][-W warndays] pengguna\n" + +#: src/chage.c:58 +#, c-format +msgid " %s -l user\n" +msgstr " %s -l pengguna\n" + +#: src/chage.c:66 +#, c-format +msgid "" +"%s - change user password expiry information\n" +"\n" +msgstr "" +"%s - ubah informasi kadaluarsa kata kunci pengguna\n" +"\n" + +#: src/chage.c:70 src/chfn.c:112 src/chpasswd.c:70 src/chsh.c:65 +#: src/gpasswd.c:94 src/groupadd.c:64 src/groupdel.c:64 src/groupmod.c:63 +#: src/passwd.c:401 src/useradd.c:67 src/userdel.c:68 src/usermod.c:67 +msgid " -D binddn Use dn \"binddn\" to bind to the LDAP directory\n" +msgstr "" +" -D binddn Gunakan dn \"binddn\" untuk mengikat ke direktori LDAP\n" + +#: src/chage.c:73 src/chfn.c:115 src/chpasswd.c:73 src/chsh.c:68 +#: src/passwd.c:403 src/pwconv.c:54 src/pwunconv.c:54 +msgid " -P path Search passwd and shadow file in \"path\"\n" +msgstr " -P jalur Cari kata kunci dan berkas bayangan dalam \"jalur\"\n" + +#: src/chage.c:76 src/chfn.c:88 src/chfn.c:123 src/chpasswd.c:79 src/chsh.c:74 +#: src/gpasswd.c:93 src/groupmod.c:77 src/passwd.c:400 src/usermod.c:91 +msgid " --service srv Use nameservice 'srv'\n" +msgstr " --service srv Gunakan layanan nama 'srv'\n" + +#: src/chage.c:77 src/chfn.c:86 src/chfn.c:124 src/chsh.c:75 +msgid " -q, --quiet Don't be verbose\n" +msgstr " -q, --quiet Jangan ramai\n" + +#: src/chage.c:78 src/chfn.c:89 src/chfn.c:125 src/chpasswd.c:80 src/chsh.c:76 +#: src/expiry.c:52 src/groupadd.c:74 src/groupdel.c:70 src/groupmod.c:78 +#: src/grpck.c:68 src/grpconv.c:43 src/grpunconv.c:63 src/newgrp.c:66 +#: src/pwck.c:68 src/pwconv.c:56 src/pwunconv.c:56 src/useradd.c:92 +#: src/userdel.c:74 src/usermod.c:96 src/vipw.c:72 +msgid " --help Give this help list\n" +msgstr " --help Berikan daftar bantuan ini\n" + +#: src/chage.c:79 src/chfn.c:90 src/chfn.c:126 src/chpasswd.c:81 src/chsh.c:77 +#: src/expiry.c:53 src/groupdel.c:71 src/grpck.c:69 src/grpconv.c:44 +#: src/grpunconv.c:64 src/newgrp.c:67 src/pwck.c:69 src/pwconv.c:57 +#: src/pwunconv.c:57 src/userdel.c:75 src/vipw.c:73 +msgid " -u, --usage Give a short usage message\n" +msgstr " -u, --usage Berikan sebuah pesan penggunaan singkat\n" + +#: src/chage.c:80 src/chfn.c:91 src/chfn.c:127 src/chpasswd.c:82 src/chsh.c:78 +#: src/expiry.c:54 src/groupadd.c:76 src/groupdel.c:72 src/groupmod.c:80 +#: src/grpck.c:70 src/grpconv.c:45 src/grpunconv.c:65 src/newgrp.c:68 +#: src/pwck.c:70 src/pwconv.c:58 src/pwunconv.c:58 src/useradd.c:94 +#: src/userdel.c:76 src/usermod.c:98 src/vipw.c:74 +msgid " -v, --version Print program version\n" +msgstr " -v, --version Tampilkan versi aplikasi\n" + +#: src/chage.c:81 src/chfn.c:94 src/chfn.c:130 src/chpasswd.c:83 src/chsh.c:81 +#: src/passwd.c:409 +msgid "Valid services are: files, nis, nisplus, ldap\n" +msgstr "Layanan yang valid diantaranya: files, nis, nisplus, ldap\n" + +#: src/chage.c:109 +#, c-format +msgid "Minimum:\t%ld\n" +msgstr "Minimal:\t%ld\n" + +#: src/chage.c:110 +#, c-format +msgid "Maximum:\t%ld\n" +msgstr "Maksimal:\t%ld\n" + +#: src/chage.c:111 +#, c-format +msgid "Warning:\t%ld\n" +msgstr "Peringatan:\t%ld\n" + +#: src/chage.c:112 +#, c-format +msgid "Inactive:\t%ld\n" +msgstr "Tidak aktif:\t%ld\n" + +#: src/chage.c:113 +#, c-format +msgid "Last Change:\t\t" +msgstr "Perubahan terakhir:\t\t" + +#: src/chage.c:115 +#, c-format +msgid "Unknown, password is forced to change at next login\n" +msgstr "Tidak diketahui, kata kunci dipaksa untuk diubah di login berikutnya\n" + +#: src/chage.c:117 src/chage.c:123 src/chage.c:129 src/chage.c:135 +#, c-format +msgid "Never\n" +msgstr "Tidak pernah\n" + +#: src/chage.c:120 +#, c-format +msgid "Password Expires:\t" +msgstr "Kata kunci kadaluarsa:\t" + +#: src/chage.c:126 +#, c-format +msgid "Password Inactive:\t" +msgstr "Kata kunci tidak aktif:\t" + +#: src/chage.c:133 +#, c-format +msgid "Account Expires:\t" +msgstr "Account Kadaluarsa:\t" + +#: src/chage.c:147 +msgid "Minimum Password Age" +msgstr "Umur minimum kata kunci" + +#: src/chage.c:154 src/chage.c:170 src/chage.c:186 +#, c-format +msgid "Input is no integer value\n" +msgstr "Masukan bukan sebuah nilai integer\n" + +#: src/chage.c:156 src/chage.c:172 src/chage.c:188 +#, c-format +msgid "Negative numbers are not allowed as input (except -1)\n" +msgstr "Jumlah negatif tidak diijinkan sebagai masukan (kecuali -1)\n" + +#: src/chage.c:163 +msgid "Maximum Password Age" +msgstr "Umur maksimal kata kunci" + +#: src/chage.c:179 +msgid "Password Expiration Warning" +msgstr "Peringatan kadaluarsa kata kunci" + +#: src/chage.c:195 +msgid "Password Inactive" +msgstr "Kata kunci tidak aktif" + +#: src/chage.c:203 +msgid "Last Password Change (YYYY-MM-DD)" +msgstr "Perubahan terakhir kata kunci (TTTT-BB-HH)" + +#: src/chage.c:217 src/chage.c:237 +#, c-format +msgid "Invalid date\n" +msgstr "Tanggal tidak valid\n" + +#: src/chage.c:223 +msgid "Account Expiration Date (YYYY-MM-DD)" +msgstr "Tanggal kadaluarsa account (TTTT-BB-HH)" + +#: src/chage.c:340 src/chfn.c:478 src/chsh.c:337 +#, c-format +msgid "Only root is allowed to specify another path\n" +msgstr "Hanya root yang diperbolehkan untuk menspesifikasikan jalur lain\n" + +#: src/chage.c:370 src/chfn.c:439 src/chpasswd.c:171 src/chsh.c:320 +#: src/gpasswd.c:197 src/groupadd.c:376 src/groupdel.c:224 src/groupmod.c:300 +#: src/passwd.c:523 src/useradd.c:1403 src/userdel.c:454 src/usermod.c:978 +#, c-format +msgid "Service `%s' not supported.\n" +msgstr "Layanan `%s' tidak didukung.\n" + +#: src/chage.c:395 src/chfn.c:510 src/chpasswd.c:208 src/chsh.c:363 +#: src/chsh.c:370 src/expiry.c:247 src/gpasswd.c:230 src/groupadd.c:413 +#: src/groupdel.c:249 src/groupmod.c:333 src/grpck.c:806 src/grpconv.c:100 +#: src/grpunconv.c:197 src/newgrp.c:155 src/passwd.c:589 src/pwck.c:1068 +#: src/pwconv.c:170 src/pwunconv.c:144 src/rpasswd.c:491 src/rpasswdd.c:1339 +#: src/useradd.c:1511 src/userdel.c:479 src/usermod.c:1014 src/vipw.c:410 +#, c-format +msgid "%s: Too many arguments.\n" +msgstr "%s: Terlalu banyak argumen.\n" + +#: src/chage.c:402 +#, c-format +msgid "%s: Do not include \"l\" with other flags\n" +msgstr "%s: Jangan masukan \"l\" dengan opsi lain\n" + +#: src/chage.c:427 src/chfn.c:531 src/chsh.c:397 src/expiry.c:267 +#: src/gpasswd.c:265 src/groupadd.c:450 src/groupdel.c:278 src/groupmod.c:362 +#: src/passwd.c:656 src/useradd.c:1545 src/userdel.c:507 src/usermod.c:1048 +#, c-format +msgid "%s: Cannot determine your user name.\n" +msgstr "%s: Tidak dapat menentukan nama pengguna anda.\n" + +#: src/chage.c:446 src/chfn.c:566 src/chsh.c:431 src/userdel.c:527 +#, c-format +msgid "%s: User `%s' is not known to service `%s'.\n" +msgstr "%s: Pengguna `%s' tidak diketahui ke layanan `%s'.\n" + +#: src/chage.c:449 src/chfn.c:555 src/chfn.c:569 src/chsh.c:421 src/chsh.c:434 +#: src/passwd.c:675 src/passwd.c:696 src/userdel.c:530 +#, c-format +msgid "%s: Unknown user `%s'.\n" +msgstr "%s: Pengguna tidak diketahui `%s'.\n" + +#: src/chage.c:467 +#, c-format +msgid "Only an administrator is allowed to change aging information.\n" +msgstr "" +"Hanya sebuah administrator yang diperbolehkan untuk mengubah informasi " +"aging.\n" + +#: src/chage.c:483 +#, c-format +msgid "This system does not support shadow accounts.\n" +msgstr "Sistem ini tidak mendukung account bayangan.\n" + +#: src/chage.c:489 +#, c-format +msgid "This account does not have a shadow entry.\n" +msgstr "Account ini tidak memiliki sebuah masukan bayangan.\n" + +#: src/chage.c:535 +#, c-format +msgid "You can only list your own aging information.\n" +msgstr "Anda hanya dapat mendaftar informasi aging anda.\n" + +#: src/chage.c:542 src/expiry.c:306 src/passwd.c:1019 +#, c-format +msgid "%s: Failed to drop privileges: %s\n" +msgstr "%s: Gagal mendrop privileges: %s\n" + +#: src/chage.c:554 +#, c-format +msgid "No aging information available for %s.\n" +msgstr "Tidak ada informasi aging tersedia untuk %s.\n" + +#: src/chage.c:574 +#, c-format +msgid "Changing aging information for %s.\n" +msgstr "Perubahan informasi aging untuk %s.\n" + +#: src/chage.c:580 src/chage.c:667 +#, c-format +msgid "Aging information not changed.\n" +msgstr "Informasi aging tidak berubah.\n" + +#: src/chage.c:623 +#, c-format +msgid "Lastday is no date and no integer value >= -1\n" +msgstr "Hari terakhir bukan tanggal dan bukan nilai integer >= -1\n" + +#: src/chage.c:643 +#, c-format +msgid "Expiredate is no date and no integer value >= -1\n" +msgstr "Tanggal kadaluarsa bukan tanggal dan bukan nilai integer >= -1\n" + +#: src/chage.c:652 +#, c-format +msgid "Error while parsing options.\n" +msgstr "Error ketika parsing opsi.\n" + +#: src/chage.c:698 +#, c-format +msgid "Error while converting to shadow account.\n" +msgstr "Error ketika mengubah account bayangan.\n" + +#: src/chage.c:716 +#, c-format +msgid "Error while changing aging information.\n" +msgstr "Error ketika mengubah informasi aging.\n" + +#: src/chage.c:726 +#, c-format +msgid "Aging information changed.\n" +msgstr "Informasi aging berubah.\n" + +#: src/chfn.c:71 +#, c-format +msgid "" +"Usage: %s [-f name] [-r room] [-w work_phone]\n" +" [-h home_phone] [-o other] [-q] [-u] [-v] [user]\n" +msgstr "" +"Penggunaan: %s [-f nama] [-r ruang] [-w work_phone]\n" +" [-h home_phone] [-o lain] [-q] [-u] [-v] [pengguna]\n" + +#: src/chfn.c:79 src/chfn.c:109 +#, c-format +msgid "" +"%s - change user name and information\n" +"\n" +msgstr "" +"%s - ubah nama pengguna dan informasi\n" +"\n" + +#: src/chfn.c:81 src/chfn.c:117 +msgid " -f full-name Change your real name\n" +msgstr " -f full-name Ubah nama anda\n" + +#: src/chfn.c:82 +msgid " -r room Change your office room number\n" +msgstr " -r ruang Ubah nomor ruangan kantor anda\n" + +#: src/chfn.c:83 +msgid " -w work_phone Change your office phone number\n" +msgstr " -w work_phone Ubah nomor telephone kantor anda\n" + +#: src/chfn.c:84 +msgid " -h home_phone Change your home phone number\n" +msgstr " -h home_phone Ubah nomor telephone rumah anda\n" + +#: src/chfn.c:85 +msgid " -o other Change the undefined portions of the GECOS field\n" +msgstr " -o other Ubah porsi yang tidak terdefinisi dari field GECOS\n" + +#: src/chfn.c:101 +#, c-format +msgid "" +"Usage: %s [-D binddn] [-P path] [-f name] [-o office] [-p office-phone]\n" +" [-h home-phone][-m other] [-q] [-u] [-v] [user]\n" +msgstr "" +"Penggunaan: %s [-D binddn] [-P jalur] [-f nama] [-o kantor] [-p office-" +"phone]\n" +" [-h home-phone][-m lain] [-q] [-u] [-v] [pengguna]\n" + +#: src/chfn.c:118 +msgid " -o office Change your office room number\n" +msgstr " -o kantor Ubah nomor ruang kantor anda\n" + +#: src/chfn.c:119 +msgid " -p phone Change your office phone number\n" +msgstr " -p phone Ubah nomor telepon kantor anda\n" + +#: src/chfn.c:120 +msgid " -h home-phone Change your home phone number\n" +msgstr " -h home-phone Ubah nomor telepone rumah anda\n" + +#: src/chfn.c:121 +msgid " -m other Change the undefined portions of the GECOS field\n" +msgstr " -m lain Ubah porsi tidak terdefinisi dari field GECOS\n" + +#: src/chfn.c:165 +#, c-format +msgid "Enter the new value, or press ENTER for the default\n" +msgstr "Masukan nilai baru, atau tekan ENTER untuk yang baku\n" + +#: src/chfn.c:171 +msgid "Full Name" +msgstr "Nama Lengkap" + +#: src/chfn.c:173 +#, c-format +msgid "\tFull Name: %s\n" +msgstr "\tNama Lengkap: %s\n" + +#: src/chfn.c:176 +msgid "Room Number" +msgstr "Nomor Ruang" + +#: src/chfn.c:178 +#, c-format +msgid "\tRoom Number: %s\n" +msgstr "\tNomor Ruang: %s\n" + +#: src/chfn.c:181 +msgid "Work Phone" +msgstr "Telepone Kerja" + +#: src/chfn.c:183 +#, c-format +msgid "\tWork Phone: %s\n" +msgstr "\tTelepone Kerja: %s\n" + +#: src/chfn.c:186 +msgid "Home Phone" +msgstr "Telepone Rumah" + +#: src/chfn.c:188 +#, c-format +msgid "\tHome Phone: %s\n" +msgstr "\tTelepone Rumah: %s\n" + +#: src/chfn.c:191 +msgid "Other" +msgstr "Lain" + +#: src/chfn.c:193 +#, c-format +msgid "\tOther: %s\n" +msgstr "\tLain: %s\n" + +#: src/chfn.c:255 +#, c-format +msgid "%s: The characters '%s\"' are not allowed.\n" +msgstr "%s: Karakter '%s\"' tidak diijinkan.\n" + +#: src/chfn.c:261 src/chsh.c:204 +#, c-format +msgid "%s: Control characters are not allowed.\n" +msgstr "%s: Karakter kontrol tidak diijinkan.\n" + +#: src/chfn.c:331 src/chsh.c:257 +#, c-format +msgid "%s: Don't know what I should do.\n" +msgstr "%s: Tidak tahu apa yang harus saya lakukan.\n" + +#: src/chfn.c:377 src/chfn.c:395 src/chfn.c:407 src/chfn.c:451 src/chfn.c:460 +#: src/gpasswd.c:296 src/passwd.c:614 src/passwd.c:628 +#, c-format +msgid "%s: Permission denied.\n" +msgstr "%s: Ijin ditolak.\n" + +#: src/chfn.c:586 src/chsh.c:451 src/passwd.c:712 +msgid "Unknown user context" +msgstr "Konteks pengguna tidak diketahui" + +#: src/chfn.c:588 +#, c-format +msgid "%s: %s is not authorized to change the finger information for %s.\n" +msgstr "%s: %s tidak diijinkan untuk mengubah informasi finger untuk %s.\n" + +#: src/chfn.c:601 +#, c-format +msgid "SELinux is in permissive mode, continuing.\n" +msgstr "SELinux ada dalam mode permissive, melanjutkan.\n" + +#: src/chfn.c:619 +#, c-format +msgid "You cannot change the finger information for `%s'.\n" +msgstr "Anda tidak dapat mengubah informasi finger untuk `%s'.\n" + +#: src/chfn.c:626 +#, c-format +msgid "Changing finger information for %s.\n" +msgstr "Mengubah informasi finger untuk %s.\n" + +#: src/chfn.c:658 +#, c-format +msgid "%s: Invalid name: `%s'\n" +msgstr "%s: Nama tidak valid: `%s'\n" + +#: src/chfn.c:666 +#, c-format +msgid "%s: Invalid room number: `%s'\n" +msgstr "%s: Nomor ruang tidak valid: `%s'\n" + +#: src/chfn.c:674 +#, c-format +msgid "%s: Invalid work phone: `%s'\n" +msgstr "%s: Telepone kerja tidak valid: `%s'\n" + +#: src/chfn.c:682 +#, c-format +msgid "%s: Invalid home phone: `%s'\n" +msgstr "%s: Telepone rumah tidak valid: `%s'\n" + +#: src/chfn.c:690 +#, c-format +msgid "%s: `%s' contains illegal characters.\n" +msgstr "%s: `%s' berisi karakter tidak legal.\n" + +#: src/chfn.c:716 +#, c-format +msgid "Finger information not changed.\n" +msgstr "Informasi finger tidak diubah.\n" + +#: src/chfn.c:724 +#, c-format +msgid "Error while changing finger information.\n" +msgstr "Error ketika mengubah informasi finger.\n" + +#: src/chfn.c:734 +#, c-format +msgid "Finger information changed.\n" +msgstr "Informasi finger berubah.\n" + +#: src/chpasswd.c:59 +#, c-format +msgid "Usage: %s [-D binddn] [-P path] [-e] [-c des|md5|blowfish] [file]\n" +msgstr "" +"Penggunaan: %s [-D binddn] [-p jalur] [-e] [-c des|md5|blowfish] [berkas]\n" + +#: src/chpasswd.c:67 +#, c-format +msgid "" +"%s - update password entries in batch\n" +"\n" +msgstr "" +"%s - update masukan kata kunci dalam batch\n" +"\n" + +#: src/chpasswd.c:75 +msgid "" +" -c, --crypt Password should be encrypted with DES, MD5 or blowfish\n" +msgstr "" +" -c, --crypt Kata kunci seharusnya dienkripsi dengan DES, MD5 atau " +"blowfish\n" + +#: src/chpasswd.c:77 +msgid " -e, --encrypted The passwords are in encrypted form\n" +msgstr " -e, --encrypted Kata kunci berada dalam bentuk terenkripsi\n" + +#: src/chpasswd.c:278 +#, c-format +msgid "%s: line %ld: missing new password\n" +msgstr "%s: baris %ld: hilang kata kunci baru\n" + +#: src/chpasswd.c:287 +#, c-format +msgid "%s: line %ld: unknown user %s\n" +msgstr "%s: baris %ld: pengguna %s tidak diketahui\n" + +#: src/chpasswd.c:318 src/gpasswd.c:425 +#, c-format +msgid "Cannot create salt for standard crypt" +msgstr "Tidak dapat membuat salt untuk standar crypt" + +#: src/chpasswd.c:334 src/gpasswd.c:460 +#, c-format +msgid "Cannot create salt for MD5 crypt" +msgstr "Tidak dapat membuat salt untuk MD5 crypt" + +#: src/chpasswd.c:350 src/gpasswd.c:441 +#, c-format +msgid "Cannot create salt for blowfish crypt" +msgstr "Tidak dapat membuat salt untuk blowfish crypt" + +#: src/chpasswd.c:380 +#, c-format +msgid "%s: line %ld: cannot update password entry\n" +msgstr "%s: baris %ld: tidak dapat memperbarui masukan kata kunci\n" + +#: src/chpasswd.c:395 +#, c-format +msgid "%s: errors occurred, %ld passwords not updated\n" +msgstr "%s: error terjadi, %ld kata kunci tidak diperbarui\n" + +#: src/chsh.c:54 +#, c-format +msgid "" +"Usage: %s [-D binddn] [-P path] [-s shell] [-l] [-q]\n" +" [--help] [--usage] [--version] [user]\n" +msgstr "" +"Penggunaan: %s [-D binddn] [-P jalur] [-s shell] [-l] [-q]\n" +" [--help] [--usage] [--version] [pengguna]\n" + +#: src/chsh.c:62 +#, c-format +msgid "" +"%s - change login shell\n" +"\n" +msgstr "" +"%s - ubah login shell\n" +"\n" + +#: src/chsh.c:70 +msgid " -l List allowed shells from /etc/shells\n" +msgstr " -l Daftar shell yang diperbolehkan dari /etc/shells\n" + +#: src/chsh.c:72 +msgid " -s shell Use 'shell' as new login shell\n" +msgstr " -s shell Gunakan 'shell' sebagai login shell baru\n" + +#: src/chsh.c:109 +#, c-format +msgid "No known shells.\n" +msgstr "Tidak ada shell yang diketahui.\n" + +#: src/chsh.c:177 +#, c-format +msgid "%s: Shell must be a full path name.\n" +msgstr "%s: Shell harus berupa nama jalur lengkap.\n" + +#: src/chsh.c:183 +#, c-format +msgid "%s: `%s' does not exist.\n" +msgstr "%s: `%s' tidak ada.\n" + +#: src/chsh.c:189 +#, c-format +msgid "%s: `%s' is not executable.\n" +msgstr "%s: `%s' bukan executable.\n" + +#: src/chsh.c:199 +#, c-format +msgid "%s: '%c' is not allowed.\n" +msgstr "%s: '%c' tidak diijinkan.\n" + +#: src/chsh.c:212 +#, c-format +msgid "Warning: \"%s\" is not listed in /etc/shells.\n" +msgstr "Peringatan: \"%s\" tidak terdaftar dalam /etc/shells.\n" + +#: src/chsh.c:215 +#, c-format +msgid "%s: \"%s\" is not listed in /etc/shells.\n" +msgstr "%s: \"%s\" tidak terdaftar dalam /etc/shells.\n" + +#: src/chsh.c:217 +#, c-format +msgid "%s: Use -l option to see list.\n" +msgstr "%s: Gunakan opsi -l untuk melihat daftar.\n" + +#: src/chsh.c:453 +#, c-format +msgid "%s: %s is not authorized to change the shell of `%s'.\n" +msgstr "%s: %s tidak diijinkan untuk mengubah shell dari `%s'.\n" + +#: src/chsh.c:466 src/passwd.c:728 +#, c-format +msgid "SELinux is in permissive mode, continuing\n" +msgstr "SELinux berada dalam mode permissive, melanjutkan\n" + +#: src/chsh.c:484 +#, c-format +msgid "You cannot change the shell for %s.\n" +msgstr "Anda tidak dapat mengubah shell untuk %s.\n" + +#: src/chsh.c:495 +#, c-format +msgid "You cannot change a restricted shell.\n" +msgstr "Anda tidak dapat menubah shell terbatas.\n" + +#: src/chsh.c:501 +#, c-format +msgid "Changing login shell for %s.\n" +msgstr "Mengubah login shell untuk %s.\n" + +#: src/chsh.c:545 +#, c-format +msgid "Enter the new value, or press return for the default.\n" +msgstr "Masukan nilai baru, atau tekan return untuk baku.\n" + +#: src/chsh.c:546 +msgid "Login Shell" +msgstr "Login Shell" + +#: src/chsh.c:554 +#, c-format +msgid "Shell not changed.\n" +msgstr "Shell tidak diubah.\n" + +#: src/chsh.c:568 +#, c-format +msgid "Error while changing login shell.\n" +msgstr "Error ketika mengubah login shell.\n" + +#: src/chsh.c:578 +#, c-format +msgid "Shell changed.\n" +msgstr "Shell berubah.\n" + +#: src/expiry.c:40 +#, c-format +msgid "Usage: %s [-f]\n" +msgstr "Penggunaan: %s [-f]\n" + +#: src/expiry.c:48 +#, c-format +msgid "" +"%s - check password expiration and enforce password change\n" +"\n" +msgstr "" +"%s - periksa kadaluarsa kata kunci dan paksa pengubahan kata kunci\n" +"\n" + +#: src/expiry.c:50 +msgid " -f, --force The caller is forced to change the password\n" +msgstr " -f, --force Pemanggil dipaksa untuk mengubah kata kunci\n" + +#: src/expiry.c:100 +#, c-format +msgid "Age field for %s is wrong" +msgstr "Umur field untuk %s salah" + +#: src/expiry.c:121 +#, c-format +msgid "Your password has expired. Choose a new password." +msgstr "Kata kunci anda telah kadaluarsa. Pilih kata kunci baru." + +#: src/expiry.c:139 +#, c-format +msgid "Your login has expired. Contact the system administrator.\n" +msgstr "Login anda telah kadaluarsa. Hubungi administrasi sistem.\n" + +#: src/expiry.c:147 +#, c-format +msgid "Password changing requested. Choose a new password.\n" +msgstr "Perubahan kata kunci diminta. Pilih kata kunci baru.\n" + +#: src/expiry.c:157 +#, c-format +msgid "Your password is inactive. Contact the system administrator.\n" +msgstr "Kata kunci anda tidak aktif. Hubungi administrasi sistem.\n" + +#: src/expiry.c:162 +#, c-format +msgid "Your password has expired. Choose a new password.\n" +msgstr "Kata kunci anda telah kadaluarsa. Pilih kata kunci baru.\n" + +#: src/expiry.c:171 +#, c-format +msgid "Your password will expire in %ld days.\n" +msgstr "Kata kunci anda akan kadaluarsa dalam %ld hari.\n" + +#: src/expiry.c:174 +#, c-format +msgid "Your password will expire tomorrow.\n" +msgstr "Kata kunci anda akan kadaluarsa besok.\n" + +#: src/expiry.c:176 +#, c-format +msgid "Your password will expire within 24 hours.\n" +msgstr "Kata kunci anda akan kadaluarsa dalam 24 jam.\n" + +#: src/gpasswd.c:63 src/passwd.c:796 +#, c-format +msgid "%s: error reading from stdin!\n" +msgstr "%s: error membaca dari stdin!\n" + +#: src/gpasswd.c:80 +#, c-format +msgid "Usage: %s [-r|-l|-u] group\n" +msgstr "Penggunaan: %s [-r|-l|-u] grup\n" + +#: src/gpasswd.c:87 +#, c-format +msgid "" +"%s - change group password\n" +"\n" +msgstr "" +"%s - ubah kata kunci grup\n" +"\n" + +#: src/gpasswd.c:88 +msgid " -r Remove the password for this group\n" +msgstr " -r Hapus kata kunci untuk grup ini\n" + +#: src/gpasswd.c:89 +msgid " -l Locks the password entry for \"group\"\n" +msgstr " -l Kunci masukan kata kunci untuk \"grup\"\n" + +#: src/gpasswd.c:91 +msgid " -u Try to unlock the password entry for \"group\"\n" +msgstr "" +" -u Coba untuk melepas masukan kata kunci untuk \"grup\"\n" + +#: src/gpasswd.c:96 +msgid " -P path Search group file in \"path\"\n" +msgstr " -P jalur Cari berkas grup dalam \"jalur\"\n" + +#: src/gpasswd.c:98 src/passwd.c:406 src/rpasswd.c:111 src/rpasswdd.c:130 +msgid " --help Give this help list\n" +msgstr " --help Berikan daftar bantuan ini\n" + +#: src/gpasswd.c:99 src/passwd.c:407 src/rpasswd.c:112 src/rpasswdd.c:131 +msgid " --usage Give a short usage message\n" +msgstr " --usage Berikan pesan penggunaan singkat\n" + +#: src/gpasswd.c:100 src/passwd.c:408 src/rpasswd.c:113 src/rpasswdd.c:132 +msgid " --version Print program version\n" +msgstr " --version Tampilkan versi aplikasi\n" + +#: src/gpasswd.c:101 +msgid " --stdin Receive input from stdin instead of /dev/tty\n" +msgstr " --stdin Terima masukan dari stdin daripada /dev/tty\n" + +#: src/gpasswd.c:102 +msgid "Valid services for -r are: files, nis, nisplus, ldap\n" +msgstr "Layanan valid untuk -r adalah: files, nis, nisplus, ldap\n" + +#: src/gpasswd.c:238 +#, c-format +msgid "%s: Group argument missing.\n" +msgstr "%s: Argumen grup hilang.\n" + +#: src/gpasswd.c:277 +#, c-format +msgid "%s: Group `%s' is not known to service `%s'.\n" +msgstr "%s: Grup `%s' tidak diketahui ke layanan `%s'.\n" + +#: src/gpasswd.c:280 src/groupdel.c:300 src/groupmod.c:384 src/useradd.c:220 +#: src/usermod.c:185 +#, c-format +msgid "%s: Unknown group `%s'.\n" +msgstr "%s: Grup `%s' tidak diketahui.\n" + +#: src/gpasswd.c:314 src/passwd.c:909 src/usermod.c:1125 +#, c-format +msgid "Cannot unlock the password for `%s'!\n" +msgstr "Tidak dapat melepas kata kunci untuk `%s'!\n" + +#: src/gpasswd.c:336 src/passwd.c:936 src/usermod.c:1104 +#, c-format +msgid "Password for `%s' is already locked!\n" +msgstr "Kata kunci untuk `%s' telah terkunci!\n" + +#: src/gpasswd.c:348 +#, c-format +msgid "Changing the password for group %s.\n" +msgstr "Mengubah kata kunci untuk grup %s.\n" + +#: src/gpasswd.c:355 src/gpasswd.c:357 +msgid "New Password: " +msgstr "Kata kunci baru: " + +#: src/gpasswd.c:366 +#, c-format +msgid "Password change aborted.\n" +msgstr "Perubahan kata kunci dibatalkan.\n" + +#: src/gpasswd.c:379 src/gpasswd.c:381 +msgid "Re-enter new password: " +msgstr "Masukan kata kunci baru: " + +#: src/gpasswd.c:392 +#, c-format +msgid "Sorry, passwords do not match.\n" +msgstr "Maaf, kata kunci tidak cocok.\n" + +#: src/gpasswd.c:400 +#, c-format +msgid "%s: Try again later.\n" +msgstr "%s: Coba lagi nanti.\n" + +#: src/gpasswd.c:448 +#, c-format +msgid "No support for blowfish compiled in. Using MD5\n" +msgstr "" +"Tidak ada dukungan untuk blowfish yang masuk waktu kompilasi. Menggunakan " +"MD5\n" + +#: src/gpasswd.c:475 +#, c-format +msgid "%s: Error changing password.\n" +msgstr "%s: Error mengubah kata kunci.\n" + +#: src/gpasswd.c:484 +#, c-format +msgid "Password removed.\n" +msgstr "Kata kunci dihapus.\n" + +#: src/gpasswd.c:490 src/passwd.c:978 +#, c-format +msgid "Password changed.\n" +msgstr "Kata kunci berubah.\n" + +#: src/groupadd.c:54 +#, c-format +msgid "" +"Usage: %s [-D binddn] [-g gid [-o]] [-r] [-P path] [-p password] group\n" +msgstr "" +"Penggunaan: %s [-D binddn] [-g gid [-o]] [-r] [-P jalur] [-p kata kunci] " +"grup\n" + +#: src/groupadd.c:62 +#, c-format +msgid "" +"%s - create a new group\n" +"\n" +msgstr "" +"%s - buat sebuah grup baru\n" +"\n" + +#: src/groupadd.c:65 +msgid " -g gid Force the new groupid to be the given number\n" +msgstr " -g gid Paksa id grup baru ke angka yang diberikan\n" + +#: src/groupadd.c:67 src/groupmod.c:70 src/useradd.c:80 src/usermod.c:79 +msgid " -o Allow duplicate (non-unique) UID\n" +msgstr " -o Ijinkan duplikasi (bukan unik) UID\n" + +#: src/groupadd.c:68 src/groupdel.c:67 src/groupmod.c:71 src/grpck.c:61 +#: src/pwck.c:61 src/useradd.c:81 src/userdel.c:71 src/usermod.c:84 +msgid " -P path Search passwd, shadow and group file in \"path\"\n" +msgstr "" +" -P jalur Cari berkas passwd, shadow, dan grup dalam \"jalur\"\n" + +#: src/groupadd.c:70 src/groupmod.c:73 src/useradd.c:83 src/usermod.c:86 +msgid " -p password Encrypted password as returned by crypt(3)\n" +msgstr "" +" -p kata kunci Kata kunci terenkripsi seperti dikembali oleh crypt(3)\n" + +#: src/groupadd.c:72 src/useradd.c:89 +msgid " -r, --system Create a system account\n" +msgstr " -r, --system Buat sebuah account sistem\n" + +#: src/groupadd.c:73 src/groupdel.c:69 src/useradd.c:91 src/userdel.c:73 +msgid " --service srv Add account to nameservice 'srv'\n" +msgstr " --service srv Tambahkan account ke layanan service 'srv'\n" + +#: src/groupadd.c:75 src/groupmod.c:79 src/useradd.c:93 src/usermod.c:97 +msgid " --usage Give a short usage message\n" +msgstr " --usage Berikan sebuah pesan penggunaan singkat\n" + +#: src/groupadd.c:77 src/groupdel.c:73 src/useradd.c:95 src/userdel.c:77 +msgid "Valid services for --service are: files, ldap\n" +msgstr "Layanan valid untuk --service adalah: files, ldap\n" + +#: src/groupadd.c:257 +#, c-format +msgid "%s: Can't get unique gid in range %u - %u.\n" +msgstr "%s; Tidak dapat mendapatkan gid unik dalam jangkauan %u - %u.\n" + +#: src/groupadd.c:312 +#, c-format +msgid "%s: You are using an undocumented option (-f)!\n" +msgstr "%s: Anda menggunakan sebuah opsi yang tidak terdokumentasi (-f)!\n" + +#: src/groupadd.c:320 src/groupadd.c:330 +#, c-format +msgid "%s: Invalid numeric argument `%s' for Group ID.\n" +msgstr "%s: Argumen numerik `%s' tidak valid untuk ID Grup.\n" + +#: src/groupadd.c:352 src/useradd.c:1328 src/usermod.c:925 +#, c-format +msgid "%s: Invalid characters in password `%s'.\n" +msgstr "%s: Karakter dalam kata kunci `%s' tidak valid.\n" + +#: src/groupadd.c:398 +#, c-format +msgid "%s: You cannot use --gid and --preferred-gid at the same time.\n" +msgstr "" +"%s: Anda tidak dapat menggunakan --gid dan --preferred-gid secara " +"bersamaan.\n" + +#: src/groupadd.c:419 src/groupdel.c:255 src/groupmod.c:339 src/useradd.c:1517 +#: src/userdel.c:485 src/usermod.c:1020 +#, c-format +msgid "%s: Too few arguments.\n" +msgstr "%s: Terlalu sedikit argumen.\n" + +#: src/groupadd.c:425 +#, c-format +msgid "%s: You cannot use -f with -o.\n" +msgstr "%s: Anda tidak dapat menggunakan -f dengan -o.\n" + +#: src/groupadd.c:474 +#, c-format +msgid "%s: GID %u is not unique, using another one.\n" +msgstr "%s: GID %u tidak unik, menggunakan yang lain.\n" + +#: src/groupadd.c:484 src/groupmod.c:398 +#, c-format +msgid "%s: GID %u is not unique.\n" +msgstr "%s: GID %u tidak unik.\n" + +#: src/groupadd.c:495 src/groupmod.c:411 +#, c-format +msgid "%s: Invalid group name `%s'.\n" +msgstr "%s: Nama grup `%s' tidak valid.\n" + +#: src/groupadd.c:513 src/groupmod.c:421 +#, c-format +msgid "%s: Group `%s' already exists.\n" +msgstr "%s: Grup `%s' telah ada.\n" + +#: src/groupadd.c:555 +#, c-format +msgid "%s: Cannot add group to LDAP database without DN.\n" +msgstr "%s: Tidak dapat menambahkan grup ke basis data LDAP tanpa DN.\n" + +#: src/groupadd.c:572 +#, c-format +msgid "%s: Group not added to LDAP database.\n" +msgstr "%s: Grup tidak ditambahakn ke basis data LDAP.\n" + +#: src/groupadd.c:604 +#, c-format +msgid "%s: GROUPADD_CMD fails with exit code %d.\n" +msgstr "%s: GROUPADD_CMD gagal dengan kode keluar %d.\n" + +#: src/groupdel.c:54 +#, c-format +msgid "Usage: %s [-D binddn] [-P path] group\n" +msgstr "Penggunaan: %s [-D binddn] [-P jalur] grup\n" + +#: src/groupdel.c:61 +#, c-format +msgid "" +"%s - delete a group\n" +"\n" +msgstr "" +"%s - hapus sebuah grup\n" +"\n" + +#: src/groupdel.c:130 src/groupdel.c:147 +#, c-format +msgid "%s: GID `%u' is primary group of `%s'.\n" +msgstr "%s: GID `%u' adalah grup utama dari `%s'.\n" + +#: src/groupdel.c:297 src/groupmod.c:381 src/useradd.c:214 src/usermod.c:179 +#, c-format +msgid "%s: Group `%s' not found in service `%s'.\n" +msgstr "%s: Grup `%s' tidak ditemukan dalam layanan `%s'.\n" + +#: src/groupdel.c:310 +#, c-format +msgid "%s: Cannot remove user's primary group.\n" +msgstr "%s: Tidak dapat menghapus grup pengguna utama.\n" + +#: src/groupdel.c:325 +#, c-format +msgid "%s: Cannot delete group from LDAP database without DN.\n" +msgstr "%s: Tidak dapat menghapus grup dari basis data LDAP tanpa DN.\n" + +#: src/groupdel.c:342 +#, c-format +msgid "%s: Group not deleted from LDAP database.\n" +msgstr "%s: Grup dihapus dari basis data LDAP.\n" + +#: src/groupdel.c:355 +#, c-format +msgid "%s: GROUPDEL_PRECMD fails with exit code %d.\n" +msgstr "%s: GROUPDEL_PRECMD gagal dengan kode keluar %d.\n" + +#: src/groupdel.c:373 +#, c-format +msgid "%s: Error deleting group `%s'.\n" +msgstr "%s: Error menghapus grup `%s'.\n" + +#: src/groupdel.c:397 +#, c-format +msgid "%s: GROUPDEL_POSTCMD fails with exit code %d.\n" +msgstr "%s: GROUPDEL_POSTCMD gagal dengan kode keluar %d.\n" + +#: src/groupmod.c:54 +#, c-format +msgid "Usage: %s [-g gid [-o]] [-n new_name] group\n" +msgstr "Penggunaan: %s [-g gid [-o]] [-n nama_baru] grup\n" + +#: src/groupmod.c:61 +#, c-format +msgid "" +"%s - modify a group entry\n" +"\n" +msgstr "" +"%s - modifikasi sebuah masukan grup\n" +"\n" + +#: src/groupmod.c:65 +msgid " -g gid Change the groupid to the given number\n" +msgstr " -g gid Ubah grupid ke nomor yang diberikan\n" + +#: src/groupmod.c:67 src/useradd.c:76 +msgid " -k skeldir Specify an alternative skel directory\n" +msgstr " -k skeldir Spesifikasika sebuah alternatif direktori skel\n" + +#: src/groupmod.c:69 +msgid " -n name Change group name.\n" +msgstr " -n nama Ubah nama grup.\n" + +#: src/groupmod.c:75 +msgid " -A user Add the user to the group entry\n" +msgstr " -A pengguna Tambahkan pengguna ke masukan grup\n" + +#: src/groupmod.c:76 +msgid " -R user Remove the user from the group entry\n" +msgstr " -R pengguna Hapus pengguna dari masukan grup\n" + +#: src/groupmod.c:81 src/usermod.c:99 +msgid "Valid services are: files, ldap\n" +msgstr "Layanan valid adalah: files, ldap\n" + +#: src/groupmod.c:245 +#, c-format +msgid "%s: invalid numeric argument `%s' for Group ID.\n" +msgstr "%s: argumen numerik `%s' tidak valid untuk Grup ID.\n" + +#: src/groupmod.c:271 +#, c-format +msgid "%s: invalid characters in password `%s'.\n" +msgstr "%s: karakter tidak valid dalam kata kunci `%s'.\n" + +#: src/groupmod.c:467 +#, c-format +msgid "%s: Cannot modify group in LDAP database without DN.\n" +msgstr "%s: Tidak dapat mengubah grup dalam basis data LDAP tanpa DN.\n" + +#: src/groupmod.c:485 +#, c-format +msgid "%s: Group not modified in LDAP database.\n" +msgstr "%s: Grup tidak terubah dalam basis data LDAP.\n" + +#: src/grpck.c:51 +#, c-format +msgid "Usage: %s [-P path] [-q|-r]\n" +msgstr "Penggunaan: %s [-P jalur] [-q|-r]\n" + +#: src/grpck.c:59 +#, c-format +msgid "" +"%s - check integrity of group file\n" +"\n" +msgstr "" +"%s - periksa integritas dari berkas grup\n" +"\n" + +#: src/grpck.c:63 src/pwck.c:63 +msgid " -q, --quiet Don't print warnings, only errors\n" +msgstr " -q, --quiet Jangan tampilkan peringatan, hanya errors\n" + +#: src/grpck.c:64 src/pwck.c:64 +msgid " -r, --read-only Run in read-only mode, don't make changes\n" +msgstr "" +" -r, --read-only Jalankan dalam mode baca-saja, jangan membuat perubahan\n" + +#: src/grpck.c:66 +msgid " -s, --sort Sort the group file, no checks are done\n" +msgstr "" +" -s, --sort Urutkan berkas grup, tidak ada pemeriksaan yang akan " +"dilakukan\n" + +#: src/grpck.c:78 src/pwck.c:78 +#, c-format +msgid "No\n" +msgstr "Tidak\n" + +#: src/grpck.c:222 src/pwck.c:229 +#, c-format +msgid "Checking `%s'\n" +msgstr "Memeriksa `%s'\n" + +#: src/grpck.c:337 src/grpck.c:384 +#, c-format +msgid "Invalid group entry.\n" +msgstr "Masukan grup tidak valid.\n" + +#: src/grpck.c:338 src/pwck.c:346 src/pwck.c:616 +#, c-format +msgid "Delete empty line? " +msgstr "Hapus baris kosong? " + +#: src/grpck.c:356 +#, c-format +msgid "Invalid group entry with comment.\n" +msgstr "Masukan grup tidak valid dengan komentar.\n" + +#: src/grpck.c:357 src/grpck.c:385 src/grpck.c:402 src/grpck.c:418 +#: src/pwck.c:365 src/pwck.c:381 src/pwck.c:397 src/pwck.c:413 src/pwck.c:635 +#: src/pwck.c:650 src/pwck.c:666 src/pwck.c:682 src/pwck.c:700 +#, c-format +msgid "Delete line `%s'? " +msgstr "Hapus baris `%s'? " + +#: src/grpck.c:401 +#, c-format +msgid "Invalid group name `%s'.\n" +msgstr "Nama grup tidak valid `%s'.\n" + +#: src/grpck.c:417 +#, c-format +msgid "Duplicate group entry\n" +msgstr "Duplikasi masukan grup\n" + +#: src/grpck.c:445 +#, c-format +msgid "Group `%s': unknown user `%s'\n" +msgstr "Grup `%s': pengguna `%s' tidak diketahui\n" + +#: src/grpck.c:451 +#, c-format +msgid "Group `%s': Duplicate user entry `%s', already primary group.\n" +msgstr "" +"Grup `%s': Duplikasi masukan pengguna `%s', telah berada dalam grup utama.\n" + +#: src/grpck.c:812 src/pwck.c:1074 +#, c-format +msgid "%s: -s and -r are incompatibile.\n" +msgstr "%s: -s and -r tidak kompatibel.\n" + +#: src/grpconv.c:33 src/grpunconv.c:51 src/pwconv.c:44 src/pwunconv.c:44 +#, c-format +msgid "Usage: %s\n" +msgstr "Pergunaan: %s\n" + +#: src/grpconv.c:40 +#, c-format +msgid "" +"%s - convert to shadow group\n" +"\n" +msgstr "" +"%s - ubah ke grup bayangan\n" +"\n" + +#: src/grpconv.c:105 +#, c-format +msgid "%s: /etc/gshadow is not supported by this system.\n" +msgstr "%s: /etc/gshadow tidak didukung oleh sistem ini.\n" + +#: src/grpunconv.c:58 +#, c-format +msgid "" +"%s - convert from shadow groups\n" +"\n" +msgstr "" +"%s - ubah dari grup bayangan\n" +"\n" + +#: src/grpunconv.c:61 +msgid " -P path Search group and gshadow file in \"path\"\n" +msgstr " -P jalur Cari berkas grup dan gshadow dalam \"jalur\"\n" + +#: src/grpunconv.c:219 +#, c-format +msgid "%s: No gshadow file found.\n" +msgstr "%s: Tidak ada berkas gshadow yang ditemukan.\n" + +#: src/grpunconv.c:243 src/pwconv.c:243 src/pwconv.c:267 src/pwunconv.c:190 +#, c-format +msgid "Cannot create backup file `%s': %m\n" +msgstr "Tidak dapat membuat berkas jaga `%s': %m\n" + +#: src/grpunconv.c:266 src/pwunconv.c:214 +#, c-format +msgid "Error while moving password for `%s'.\n" +msgstr "Error ketika memindahkan kata kunci untuk `%s'.\n" + +#: src/newgrp.c:52 +#, c-format +msgid "Usage: %s [-l|-c command] [group]\n" +msgstr "Penggunaan: %s [-l|-c perintah] [grup]\n" + +#: src/newgrp.c:60 +#, c-format +msgid "" +"%s - change the effective group id\n" +"\n" +msgstr "" +"%s - ubah grup id efektif\n" +"\n" + +#: src/newgrp.c:63 +msgid " -l, --login reinitialize environment as if logged in\n" +msgstr " -l, --login reinisialisasi lingkungan seperti jika logged in\n" + +#: src/newgrp.c:65 +msgid " -c command Execute `command' with new group\n" +msgstr " -c perintah Jalankan `perintah' dengan grup baru\n" + +#: src/newgrp.c:161 +#, c-format +msgid "%s: -l and -c are exclusive\n" +msgstr "%s: -l dan -c adalah ekslusif\n" + +#: src/newgrp.c:167 +#, c-format +msgid "%s: -c requires a group argument\n" +msgstr "%s: -c membutuhkan sebuah argumen grup\n" + +#: src/newgrp.c:174 +#, c-format +msgid "%s: Unknown user.\n" +msgstr "%s: Pengguna tidak diketahui.\n" + +#: src/newgrp.c:195 +#, c-format +msgid "%s: bad group `%s'.\n" +msgstr "%s: grup `%s' buruk.\n" + +#: src/newgrp.c:218 src/newgrp.c:313 +#, c-format +msgid "%s: calling getgroups failed: %s\n" +msgstr "%s: panggilan ke getgroups gagal: %s\n" + +#: src/newgrp.c:271 +#, c-format +msgid "%s: failure to get group entry for %d.\n" +msgstr "%s: gagal untuk memperoleh masukan grup untuk %d.\n" + +#: src/newgrp.c:281 +msgid "Password: " +msgstr "Kata kunci: " + +#: src/newgrp.c:284 +#, c-format +msgid "%s: password incorrect.\n" +msgstr "%s: kata kunci tidak benar.\n" + +#: src/newgrp.c:351 +#, c-format +msgid "%s: too many groups, not added.\n" +msgstr "%s: terlalu banyak grup, tidak ditambahkan.\n" + +#: src/newgrp.c:358 +#, c-format +msgid "%s: calling setgroups failed: %s\n" +msgstr "%s: panggilan ke setgroups gagal: %s\n" + +#: src/newgrp.c:365 src/newgrp.c:380 +#, c-format +msgid "%s: calling setgid failed: %s\n" +msgstr "%s: panggilan ke setgid gagal: %s\n" + +#: src/newgrp.c:374 +#, c-format +msgid "%s: calling initgroups failed: %s\n" +msgstr "%s: panggilan ke initgroups gagal: %s\n" + +#: src/newgrp.c:389 +#, c-format +msgid "%s: calling setuid failed: %s\n" +msgstr "%s: panggilan ke setuid gagal: %s\n" + +#: src/newgrp.c:401 +#, c-format +msgid "Cannot change to directory %s: %s\n" +msgstr "Tidak dapat pindah ke direktori %s: %s\n" + +#: src/newgrp.c:439 +#, c-format +msgid "%s: execl failed: %s\n" +msgstr "%s: execl gagal: %s\n" + +#: src/pam_rpasswd.c:219 src/pam_rpasswd.c:223 src/pam_rpasswd.c:330 +#: src/pam_rpasswd.c:334 src/rpasswd.c:211 src/rpasswd.c:214 src/rpasswd.c:297 +#: src/rpasswd.c:300 +#, c-format +msgid "error while reading request: %s" +msgstr "error ketika membaca permintaan: %s" + +#: src/pam_rpasswd.c:220 src/rpasswd.c:212 src/rpasswd-client.c:58 +#: src/rpasswd-client.c:71 src/rpasswd-client.c:82 src/rpasswd-client.c:108 +#: src/rpasswd-client.c:121 +msgid "Peer has closed the TLS connection" +msgstr "Peer telah menutup koneksi TLS" + +#: src/pam_rpasswd.c:235 src/pam_rpasswd.c:344 +#, c-format +msgid "error while allocating memory: %m" +msgstr "error ketika mengalokasikan memori: %m" + +#: src/pam_rpasswd.c:242 src/rpasswd.c:223 src/rpasswd.c:312 +#, c-format +msgid "error while reading request data: %s" +msgstr "error ketika membaca permintaan data: %s" + +#: src/pam_rpasswd.c:296 src/rpasswd.c:269 src/rpasswd.c:358 +#, c-format +msgid "Cannot send input back to server: %s\n" +msgstr "Tidak dapat mengirim masukan kembali ke server: %s\n" + +#: src/pam_rpasswd.c:331 src/rpasswd.c:298 +msgid "wrong data received" +msgstr "data yang diterima salah" + +#: src/pam_rpasswd.c:352 +#, c-format +msgid "error while reading request data: %m" +msgstr "error ketika membaca permintaan data: %m" + +#: src/pam_rpasswd.c:403 +#, c-format +msgid "Cannot send input back to server: %m\n" +msgstr "Tidak dapat mengirim masukan kembali ke server: %m\n" + +#: src/pam_rpasswd.c:565 +#, c-format +msgid "SLP: Found Server on %s, port %s (%s)\n" +msgstr "SLP: Ditemukan Server di %s, port %s (%s)\n" + +#: src/pam_rpasswd.c:568 +#, c-format +msgid "SLP: Found Server on %s, port %s\n" +msgstr "SLT: Ditemukan Server di %s, port %s\n" + +#: src/pam_rpasswd.c:574 +#, c-format +msgid "SLP: Found Server on %s (%s)\n" +msgstr "SLP: Ditemukan Server di %s (%s)\n" + +#: src/pam_rpasswd.c:577 +#, c-format +msgid "SLP: Found Server on %s\n" +msgstr "SLP: Ditemukan Server di %s\n" + +#: src/passwd.c:210 +#, c-format +msgid "Unable to initialize BioAPI framework, BioAPI error #:%x.\n" +msgstr "Tidak dapat menginisialisasi lembar kerja BioAPI, BioAPI error #:%x.\n" + +#: src/passwd.c:220 +#, c-format +msgid "Unable to parse UUID (BioAPI error #:%x) : %s\n" +msgstr "Tidak dapat memparse UUID (BioAPI error #:%x) : %s\n" + +#: src/passwd.c:241 +#, c-format +msgid "Unable to load BioAPI BSP with UUID of %s, BioAPI error #%x.\n" +msgstr "Tidak dapat memuat BioAPI BSP dengan UUID dari %s, BioAPI error #%x.\n" + +#: src/passwd.c:252 +#, c-format +msgid "" +"Unable to attach default device to BioAPI BSP with UUID of %s, BioAPI error #" +"%x.\n" +msgstr "" +"Tidak dapat menggunakan perangkat baku ke BioAPI BSP dengan UUID dari %s, " +"BioAPI error #%x.\n" + +#: src/passwd.c:278 +#, c-format +msgid "Unable to create BIR database directory, \"%s\"\n" +msgstr "Tidak dapat membuat direktori basis data BIR, \"%s\"\n" + +#: src/passwd.c:291 +#, c-format +msgid "" +"Unable to create BSP-specific subdirectory in BIR database directory, \"%s" +"\"\n" +msgstr "" +"Tidak dapat membuat subdirektori spesifik BSP dalam basis data direktori " +"BIR, \"%s\"\n" + +#: src/passwd.c:306 +#, c-format +msgid "" +"Unable to write biometric identification record, \"%s\": BioAPI error #%x\n" +msgstr "" +"Tidak dapat menulis rekaman identifikasi biometrik, \"%s\": BioAPI error #%" +"x\n" + +#: src/passwd.c:318 +#, c-format +msgid "Unable to open BIR for writing, \"%s\"\n" +msgstr "Tidak dapat membuka BIR untuk ditulis, \"%s\"\n" + +#: src/passwd.c:349 +#, c-format +msgid "Unable to enroll user %s using BSP with UUID of %s, BioAPI error #%x.\n" +msgstr "" +"Tidak dapat mengenroll pengguna %s menggunakan BSP dengan UUID dari %s, " +"BioAPI error #%x.\n" + +#: src/passwd.c:367 +#, c-format +msgid "Usage: %s [-f|-g|-s|-k[-q]] [account]\n" +msgstr "Penggunaan: %s [-f|-g|-s|-k[-q]] [account]\n" + +#: src/passwd.c:368 +#, c-format +msgid " %s [-D binddn] [-n min] [-x max] [-w warn] [-i inact] account\n" +msgstr "" +" %s [-D binddn] [-n min] [-x max] [-w peringatan] [-i inact] account\n" + +#: src/passwd.c:369 +#, c-format +msgid " %s {-l|-u|-d|-S[-a]|-e} account\n" +msgstr " %s {-l|-u|-d|-S[-a]|-e} account\n" + +#: src/passwd.c:371 +#, c-format +msgid " %s --bioapi [account]\n" +msgstr " %s --bioapi [account]\n" + +#: src/passwd.c:373 +#, c-format +msgid " %s --stdin [account]\n" +msgstr " %s --stdin [account]\n" + +#: src/passwd.c:380 src/rpasswd.c:93 src/rpasswdd.c:114 +#, c-format +msgid "" +"%s - change password information\n" +"\n" +msgstr "" +"%s - ubah informasi kata kunci\n" +"\n" + +#: src/passwd.c:382 +msgid " -f Change the finger (GECOS) information\n" +msgstr " -f Ubah informasi finger (GECOS)\n" + +#: src/passwd.c:384 +msgid " -s Change the login shell\n" +msgstr " -s Ubah login shell\n" + +#: src/passwd.c:385 +msgid " -g Change the group password\n" +msgstr " -g Ubah kata kunci grup\n" + +#: src/passwd.c:386 +msgid " -k Change the password only if expired\n" +msgstr " -k Ubah kata kunci hanya jika kadaluarsa\n" + +#: src/passwd.c:387 +msgid " -q Try to be quiet\n" +msgstr " -q Coba untuk diam\n" + +#: src/passwd.c:388 +msgid " -S Show the password attributes\n" +msgstr " -S Tampilkan atribut kata kunci\n" + +#: src/passwd.c:389 +msgid " -a Only with -S, show for all accounts\n" +msgstr " -a Hanya dengan -S, tampilkan untuk seluruh accounts\n" + +#: src/passwd.c:390 +msgid " -d Delete the password for the named account\n" +msgstr " -d Hapus kata kunci untuk account bernama\n" + +#: src/passwd.c:391 +msgid " -l Locks the password entry for \"account\"\n" +msgstr " -l Kunci masukan kata kunci untuk \"account\"\n" + +#: src/passwd.c:392 +msgid " -u Try to unlock the password entry for \"account\"\n" +msgstr "" +" -u Coba untuk melepas masukan kata kunci untuk \"account\"\n" + +#: src/passwd.c:393 +msgid " -e Force the user to change password at next login\n" +msgstr "" +" -e Paksa pengguna untuk mengguna kata kunci di login " +"selanjutnya\n" + +#: src/passwd.c:394 +msgid " -n min Set minimum field for \"account\"\n" +msgstr " -n min Set field minimum untuk \"account\"\n" + +#: src/passwd.c:395 +msgid " -x max Set maximum field for \"account\"\n" +msgstr " -x max Set maximum field untuk \"account\"\n" + +#: src/passwd.c:396 +msgid " -w warn Set warn field for \"account\"\n" +msgstr " -w peringatan Set field warn untuk \"account\"\n" + +#: src/passwd.c:398 +msgid " --bioapi Authentication token is handled via BioAPI\n" +msgstr " --bioapi Autentifikasi token ditangani melalui BioAPI\n" + +#: src/passwd.c:405 +msgid " --stdin Read new password from stdin (root only)\n" +msgstr " --stdin Baca kata kunci baru dari stdin (hanya root)\n" + +#: src/passwd.c:597 +#, c-format +msgid "%s: User argument missing\n" +msgstr "%s: Argumen pengguna hilang\n" + +#: src/passwd.c:690 +#, c-format +msgid "%s: User `%s' is not known to service `%s'\n" +msgstr "%s: Pengguna `%s' tidak diketahui ke layanan `%s'\n" + +#: src/passwd.c:715 +#, c-format +msgid "%s: %s is not authorized to change the password of %s\n" +msgstr "%s: %s tidak diijinkan untuk mengubah kata kunci dari %s\n" + +#: src/passwd.c:744 +#, c-format +msgid "%s: Permission denied\n" +msgstr "%s: Ijin ditolak\n" + +#: src/passwd.c:753 +#, c-format +msgid "You cannot change the shadow data for `%s'.\n" +msgstr "Anda tidak dapat mengubah data bayangan untuk `%s'.\n" + +#: src/passwd.c:781 +#, c-format +msgid "%s: -P flag not supported in this mode!\n" +msgstr "%s: -P flag tidak didukung dalam mode ini!\n" + +#: src/passwd.c:811 +#, c-format +msgid "Changing password for %s.\n" +msgstr "Mengubah kata kunci untuk %s.\n" + +#: src/passwd.c:960 +#, c-format +msgid "Error while changing password expiry information.\n" +msgstr "Error ketika mengubah informasi kadaluarsa kata kunci.\n" + +#: src/passwd.c:962 +#, c-format +msgid "Error while changing password.\n" +msgstr "Error ketika mengubah kata kunci.\n" + +#: src/passwd.c:974 +#, c-format +msgid "Password expiry information changed.\n" +msgstr "Informasi kadaluarsa kata kunci telah berubah.\n" + +#: src/passwd.c:976 +#, c-format +msgid "Password deleted.\n" +msgstr "Kata kunci terhapus.\n" + +#: src/passwd.c:1038 +#, c-format +msgid "passwd: Cannot execute %s" +msgstr "passwd: Tidak dapat menjalankan %s" + +#: src/pwck.c:51 +#, c-format +msgid "Usage: %s [-P path] [-q|-r|-s]\n" +msgstr "Penggunaan: %s [-P jalur] [-q|-r|-s]\n" + +#: src/pwck.c:59 +#, c-format +msgid "" +"%s - check integrity of password files\n" +"\n" +msgstr "" +"%s - periksa integritas dari berkas kata kunci\n" +"\n" + +#: src/pwck.c:66 +msgid " -s, --sort Sort the password file, no checks are done\n" +msgstr "" +" -s, --sort Urutkan berkas kata kunci, tidak ada pemeriksaan yang " +"dilakukan\n" + +#: src/pwck.c:345 src/pwck.c:380 +#, c-format +msgid "Invalid password entry.\n" +msgstr "Masukan kata kunci tidak valid.\n" + +#: src/pwck.c:364 +#, c-format +msgid "Invalid password entry with comment.\n" +msgstr "Masukan kata kunci tidak valid dengan komentar.\n" + +#: src/pwck.c:396 src/pwck.c:665 +#, c-format +msgid "Invalid account name `%s'.\n" +msgstr "Nama account tidak valid `%s'.\n" + +#: src/pwck.c:412 +#, c-format +msgid "Duplicate password entry\n" +msgstr "Duplikasi masukan kata kunci\n" + +#: src/pwck.c:431 +#, c-format +msgid "User `%s': unknown group `%u'\n" +msgstr "Pengguna `%s': grup `%u' tidak diketahui\n" + +#: src/pwck.c:440 +#, c-format +msgid "User `%s': directory `%s' does not exist.\n" +msgstr "Pengguna `%s': direktori `%s' tidak ada.\n" + +#: src/pwck.c:449 +#, c-format +msgid "User `%s': shell `%s' is not executable.\n" +msgstr "Pengguna `%s': shell `%s' bukan executable.\n" + +#: src/pwck.c:506 +#, c-format +msgid "Checking `%s'.\n" +msgstr "Memeriksa `%s'.\n" + +#: src/pwck.c:615 src/pwck.c:649 +#, c-format +msgid "Invalid shadow entry.\n" +msgstr "Masukan bayangan tidak valid.\n" + +#: src/pwck.c:634 +#, c-format +msgid "Invalid shadow entry with comment.\n" +msgstr "Masukan bayangan tidak valid dengan komentar.\n" + +#: src/pwck.c:681 +#, c-format +msgid "Duplicate shadow entry\n" +msgstr "Duplikasi masukan bayangan\n" + +#: src/pwck.c:699 +#, c-format +msgid "No matching password file entry.\n" +msgstr "Tidak ada masukan berkas kata kunci yang cocok.\n" + +#: src/pwck.c:714 +#, c-format +msgid "User `%s': last password change in the future.\n" +msgstr "" +"Pengguna `%s': perubahan kata kunci terakhir berada dalam masa depan.\n" + +#: src/pwconv.c:51 +#, c-format +msgid "" +"%s - convert to shadow account\n" +"\n" +msgstr "" +"%s - ubah ke account bayangan\n" +"\n" + +#: src/pwconv.c:307 +#, c-format +msgid "Orphaned entry '%s' removed from shadow database.\n" +msgstr "Masukan kosong '%s' dihapus dari basis data bayangan.\n" + +#: src/pwconv.c:316 +#, c-format +msgid "Error while deleting `%s' shadow account.\n" +msgstr "Error ketika menghapus `%s' account bayangan.\n" + +#: src/pwconv.c:343 +#, c-format +msgid "%s: Error trying to get data for `%s'\n" +msgstr "%s: Error mencoba memperoleh data untuk `%s'\n" + +#: src/pwconv.c:365 src/pwconv.c:388 src/pwconv.c:419 src/pwconv.c:435 +#, c-format +msgid "Error while converting `%s' to shadow account.\n" +msgstr "Error ketika mengubah `%s' ke account bayangan.\n" + +#: src/pwconv.c:466 +#, c-format +msgid "Error while renaming temporary shadow file: %m\n" +msgstr "Error ketika mengubah nama berkas bayangan sementara: %m\n" + +#: src/pwconv.c:491 +#, c-format +msgid "Error while renaming temporary password file: %m\n" +msgstr "Error ketika mengubah nama berkas kata kunci sementara: %m\n" + +#: src/pwunconv.c:51 +#, c-format +msgid "" +"%s - convert from shadow account\n" +"\n" +msgstr "" +"%s - mengubah dari account bayangan\n" +"\n" + +#: src/pwunconv.c:166 +#, c-format +msgid "%s: No shadow file found.\n" +msgstr "%s: Tidak ada berkas bayangan yang ditemukan.\n" + +#: src/rpasswd.c:85 +#, c-format +msgid "Usage: %s [-4|-6][-a][-f config-file][-h hostname][-p port][-v][name]\n" +msgstr "" +"Penggunaan: %s [-4|-6][-a][-f berkas-konfigurasi][-h hostname][-p port][v]" +"[nama]\n" + +#: src/rpasswd.c:95 +msgid " -4 Use IPv4 only\n" +msgstr " -4 Hanya gunakan IPv4\n" + +#: src/rpasswd.c:96 +msgid " -6 Use IPv6 only\n" +msgstr " -6 Hanya gunakan IPv6\n" + +#: src/rpasswd.c:98 +msgid " -a Admin mode, special admin password is required\n" +msgstr "" +" -a Mode administrasi, kata kunci administrasi spesial " +"dibutuhkan\n" + +#: src/rpasswd.c:100 +msgid " -f config-file Specify a different config file\n" +msgstr " -f config-file Spesifikasikan sebuah berkas konfigurasi berbeda\n" + +#: src/rpasswd.c:101 +msgid " -h hostname Specify the remote server\n" +msgstr " -h hostname Spesifikasikan remote server\n" + +#: src/rpasswd.c:102 +msgid " -p port Specify port remote server is listening on\n" +msgstr "" +" -p port Spesifikasikan port remote server untuk mendengarkan\n" + +#: src/rpasswd.c:104 +msgid " -r level Specify level of SSL certificate checks\n" +msgstr "" +" -r tingkat Spesifikasikan tingkat dari pemeriksaan sertifikat SSL\n" + +#: src/rpasswd.c:107 +msgid " --no-slp Don't use SLP to find a server\n" +msgstr " --no-slp Jangan gunakan SLP untuk menemukan sebuah server\n" + +#: src/rpasswd.c:109 +msgid " -v, --verbose Be verbose, print SSL connection data\n" +msgstr " -v, --verbose Jadi ramai, tampilkan data koneksi SSL\n" + +#: src/rpasswd.c:150 +#, c-format +msgid "Warning: cannot turn echo off\n" +msgstr "Peringatkan: tidak dapat mematikan echo\n" + +#: src/rpasswd.c:515 +#, c-format +msgid "SLP: Found Server on %s, port %s" +msgstr "SLP: Ditemukan Server di %s, port %s" + +#: src/rpasswd.c:518 +#, c-format +msgid "SLP: Found Server on %s" +msgstr "SLP: Ditemukan Server di %s" + +#: src/rpasswd.c:554 +#, c-format +msgid "Go away, you do not exist!" +msgstr "Pergi, anda tidak ada!" + +#: src/rpasswd.c:568 +#, c-format +msgid "No server specified\n" +msgstr "Tidak ada server yang dispesifikasikan\n" + +#: src/rpasswd-client.c:57 src/rpasswd-client.c:60 +#, c-format +msgid "error while sending start request: %s\n" +msgstr "error ketika mengirim permintaan awal: %s\n" + +#: src/rpasswd-client.c:70 src/rpasswd-client.c:73 +#, c-format +msgid "error while sending locale data: %s\n" +msgstr "error ketika mengirim data lokal: %s\n" + +#: src/rpasswd-client.c:81 src/rpasswd-client.c:84 +#, c-format +msgid "error while sending username: %s\n" +msgstr "error ketika mengirim nama pengguna: %s\n" + +#: src/rpasswd-client.c:107 src/rpasswd-client.c:110 src/rpasswd-client.c:120 +#: src/rpasswd-client.c:123 +#, c-format +msgid "error while sending string: %s\n" +msgstr "error ketika mengirim string: %s\n" + +#: src/rpasswd-client.c:318 +msgid "Searching a server...\n" +msgstr "Mencari sebuah server...\n" + +#: src/rpasswd-client.c:323 +#, c-format +msgid "Error opening SLP handle: %i.\n" +msgstr "Error membuka penangan SLP: %i.\n" + +#: src/rpasswd-client.c:334 +msgid "No service found with SLP.\n" +msgstr "Tidak ada layanan ditemukan dengan SLP.\n" + +#: src/rpasswd-client.c:353 +msgid "Error while searching for SLP description.\n" +msgstr "Error ketika mencari untuk deskripsi SLP.\n" + +#: src/rpasswd-client.c:372 +#, c-format +msgid "" +"\n" +"Please select a server:\n" +msgstr "" +"\n" +"Mohon pilih sebuah server:\n" + +#: src/rpasswd-client.c:378 +#, c-format +msgid " (port %s)" +msgstr " (port %s)" + +#: src/rpasswd-client.c:388 +#, c-format +msgid "Enter number of choice [1-%d]: " +msgstr "Masukan angka yang dipilih [1-%d]: " + +#: src/rpasswd-client.c:458 +msgid "parsing config file" +msgstr "parsing berkas konfigurasi" + +#: src/rpasswd-client.c:501 src/rpasswd-client.c:504 +msgid "Trying entry:" +msgstr "Mencoba masukan:" + +#: src/rpasswd-client.c:543 +#, c-format +msgid "Entry \"%s\" is not valid!\n" +msgstr "Masukan \"%s\" tidak valid!\n" + +#: src/rpasswd-client.c:547 +#, c-format +msgid "Entry \"%s\" is not valid, ignored!\n" +msgstr "Masukan \"%s\" tidak valid, diabaikan!\n" + +#: src/rpasswd-client.c:560 +msgid "Bad entries found.\n" +msgstr "Masukan buruk ditemukan.\n" + +#: src/rpasswd-client.c:565 +msgid "No entry found.\n" +msgstr "Tidak ada masukan ditemukan.\n" + +#: src/rpasswd-client.c:575 +msgid "No entry found." +msgstr "Tidak ada masukan ditemukan." + +#: src/rpasswd-client.c:609 +msgid "Hostname or service not known for specified protocol\n" +msgstr "" +"Hostname atau layanan tidak diketahui untuk protokol yang dispesifikasikan\n" + +#: src/rpasswd-client.c:623 +#, c-format +msgid "bad port: %s\n" +msgstr "port buruk: %s\n" + +#: src/rpasswd-client.c:648 src/rpasswd-client.c:657 +#, c-format +msgid "Trying %s port %d...\n" +msgstr "Mencoba %s port %d...\n" + +#: src/rpasswd-client.c:663 +#, c-format +msgid "Trying %s...\n" +msgstr "Mencoba %s...\n" + +#: src/rpasswd-client.c:677 +#, c-format +msgid "connect to address %s: %s\n" +msgstr "menguhubungi alamat %s: %s\n" + +#: src/rpasswd-client.c:732 src/rpasswd-client.c:1028 +msgid "Server certificate info:\n" +msgstr "Informasi sertifikat server:\n" + +#: src/rpasswd-client.c:742 +#, c-format +msgid " Certificate is valid since: %s" +msgstr " Sertifikat valid sejak: %s" + +#: src/rpasswd-client.c:744 +#, c-format +msgid " Certificate expires: %s" +msgstr " Sertifikat kadaluarsa: %s" + +#: src/rpasswd-client.c:750 +#, c-format +msgid " Certificate public key: %s" +msgstr " Sertifikat kunci publik: %s" + +#: src/rpasswd-client.c:756 +#, c-format +msgid " Certificate version: #%d\n" +msgstr " Sertifikat versi: #%d\n" + +#: src/rpasswd-client.c:761 src/rpasswd-client.c:1034 +#, c-format +msgid " DN: %s\n" +msgstr " DN: %s\n" + +#: src/rpasswd-client.c:765 src/rpasswd-client.c:1041 +#, c-format +msgid " Issuer's DN: %s\n" +msgstr " Penerbit DN: %s\n" + +#: src/rpasswd-client.c:846 +#, c-format +msgid "Handshake failed: %s\n" +msgstr "Jabat-tangan gagal: %s\n" + +#: src/rpasswd-client.c:869 +#, c-format +msgid "TLS certificate error: %s\n" +msgstr "Sertifikat TLS error: %s\n" + +#: src/rpasswd-client.c:880 +#, c-format +msgid "" +"%s connection using %s-%s (%s)\n" +"\n" +msgstr "" +"%s koneksi menggunakan %s-%s (%s)\n" +"\n" + +#: src/rpasswd-client.c:898 +msgid "TLS authentication error: server certificate issuer is unknown.\n" +msgstr "Autentifikasi TLS error: penerbit sertifikat server tidak diketahui.\n" + +#: src/rpasswd-client.c:906 +msgid "TLS authentication error: server certificate is NOT trusted.\n" +msgstr "Autentifikasi TLS error: sertifikat server TIDAK dipercaya.\n" + +#: src/rpasswd-client.c:917 +msgid "TLS authentication error: server certificate not yet activated.\n" +msgstr "Autentifikasi TLS error: sertifikat server belum aktif.\n" + +#: src/rpasswd-client.c:925 +msgid "TLS authentication error: server certificate expired.\n" +msgstr "Autentifikasi TLS error: sertifikat server kadaluarsa.\n" + +#: src/rpasswd-client.c:960 +#, c-format +msgid "error loading default verify locations: %s\n" +msgstr "error memuat verifikasi lokasi baku: %s\n" + +#: src/rpasswd-client.c:968 +#, c-format +msgid "error setting default verify path: %s\n" +msgstr "error menset verifikasi jalur baku: %s\n" + +#: src/rpasswd-client.c:1003 +#, fuzzy +msgid "Unable to get certificate from peer.\n" +msgstr "Tidak dapat memperoleh entropy dari %s\n" + +#: src/rpasswd-client.c:1017 +#, c-format +msgid "" +"SSL connection using %s\n" +"\n" +msgstr "" +"SSL koneksi menggunakan %s\n" +"\n" + +#: src/rpasswd-client.c:1022 +msgid "Server does not have a certificate?\n" +msgstr "Server tidak memiliki sebuah sertifikat?\n" + +#: src/rpasswdd.c:102 +#, c-format +msgid "" +"Usage: %s [-4] [-6] [-d] [-c certificate] [-k privatekey] [-p port]\n" +" [--slp [--slp-timeout timeout] [--slp-descr description]]\n" +msgstr "" +"Penggunaan: %s [-4] [-6] [-d] [-c sertifikat] [-k privatekey] [-p port]\n" +" [--slp [--slp-timeout timeout] [--slp-descr deskripsi]]\n" + +#: src/rpasswdd.c:105 +#, c-format +msgid "Usage: %s [-4] [-6] [-d] [-c certificate] [-k privatekey] [-p port]\n" +msgstr "" +"Penggunaan: %s [-4] [-6] [-d] [-c sertifikat] [-k privatekey] [-p port]\n" + +#: src/rpasswdd.c:116 +msgid " -4 Use IPv4\n" +msgstr " -4 Gunakan IPv6\n" + +#: src/rpasswdd.c:117 +msgid " -6 Use IPv6\n" +msgstr " -6 Gunakan IPv6\n" + +#: src/rpasswdd.c:118 +msgid " -c certificate Specify alternate certificate file\n" +msgstr " -c sertifikat Spesifikasikan berkas sertifikat alternatif\n" + +#: src/rpasswdd.c:119 +msgid " -k privatekey Specify alternate file with private key\n" +msgstr " -k privatekey Spesifikasi berkas alternatif dengan kunci private\n" + +#: src/rpasswdd.c:121 +msgid " -d Run in debug mode\n" +msgstr " -d Jalankan dalam mode debug\n" + +#: src/rpasswdd.c:122 +msgid " -p port Port on which the server should listen\n" +msgstr " -p port Port dimana server seharusnya mendengarkan\n" + +#: src/rpasswdd.c:125 +msgid " --slp Register at local SLP server\n" +msgstr " --slp Daftar di lokal SLP server\n" + +#: src/rpasswdd.c:126 +msgid " --slp-timeout Set timeout for re-registration\n" +msgstr " --slp-timeout Set timeout untuk re-registration\n" + +#: src/rpasswdd.c:127 +msgid " --slp-descr Set a description shown to SLP clients\n" +msgstr " --slp-descr Set sebuah deskripsi terlihat ke klien SLP\n" + +#: src/rpasswdd.c:710 +#, c-format +msgid "Please authenticate as %s on %s" +msgstr "Mohon autentifikasi sebagai %s di %s" + +#: src/rpasswdd.c:749 +#, c-format +msgid "" +"\n" +"Now enter the new password for %s" +msgstr "" +"\n" +"Sekarang masukan kata kunci baru untuk %s" + +#: src/rpasswdd.c:770 +#, c-format +msgid "setresuid failed on server: %s" +msgstr "setresuid gagal di server: %s" + +#: src/rpasswdd.c:813 +msgid "Password not changed" +msgstr "Kata kunci tidak diubah" + +#: src/rpasswdd.c:816 +msgid "Password changed" +msgstr "Kata kunci telah berubah" + +#: src/rpasswdd.c:1349 +msgid "already running" +msgstr "telah berjalan" + +#: src/useradd.c:54 src/usermod.c:55 +#, c-format +msgid "Usage: %s ...\n" +msgstr "Penggunaan: %s ...\n" + +#: src/useradd.c:61 +#, c-format +msgid "" +"%s - create a new user\n" +"\n" +msgstr "" +"%s - buat sebuah pengguna baru\n" +"\n" + +#: src/useradd.c:63 src/usermod.c:64 +msgid " -c comment Set the GECOS field for the new account\n" +msgstr " -c komentar Set field GECOS untuk account baru\n" + +#: src/useradd.c:65 +msgid " --show-defaults Print default values\n" +msgstr " --show-defaults Tampilkan nilai baku\n" + +#: src/useradd.c:66 +msgid " --save-defaults Save modified default values\n" +msgstr " --save-defaults Simpan nilai termodifikasi baku\n" + +#: src/useradd.c:68 src/usermod.c:69 +msgid " -d homedir Home directory for the new user\n" +msgstr " -d homedir Direktori rumah untuk pengguna baru\n" + +#: src/useradd.c:69 src/usermod.c:70 +msgid " -e expire Date on which the new account will be disabled\n" +msgstr "" +" -e kadaluarsa Tanggal dimana account baru akan menjadi tidak aktif\n" + +#: src/useradd.c:71 src/usermod.c:72 +msgid "" +" -f inactive Days after a password expires until account is disabled\n" +msgstr "" +" -f tidak aktif Hari setelah sebuah kata kunci kadaluarsa sampai account " +"tidak aktif\n" + +#: src/useradd.c:73 src/usermod.c:74 +msgid " -G group,... List of supplementary groups\n" +msgstr " -G grup,... Daftar dari grup tambahan\n" + +#: src/useradd.c:74 src/usermod.c:75 +msgid " -g gid Name/number of the users primary group\n" +msgstr " -g gid Nama/nomor dari grup pengguna utama\n" + +#: src/useradd.c:78 +msgid " -m Create home directory for the new user\n" +msgstr " -m Buat direktori rumah untuk pengguna baru\n" + +#: src/useradd.c:85 +msgid " -u uid Force the new userid to be the given number\n" +msgstr " -u uid Paksa id pengguna baru ke angka yang diberikan\n" + +#: src/useradd.c:87 +msgid " -U umask Umask value used for creating home directory\n" +msgstr "" +" -U umask Nilai umask yang digunakan untuk membuat direktori rumah\n" + +#: src/useradd.c:90 src/usermod.c:88 +msgid " -s shell Name of the user's login shell\n" +msgstr " -s shell Nama dari login shell pengguna\n" + +#: src/useradd.c:186 +#, c-format +msgid "%s: Invalid numeric argument `%s' for group ID.\n" +msgstr "%s: Argumen numerik tidak valid `%s' untuk grup ID.\n" + +#: src/useradd.c:196 src/usermod.c:160 +#, c-format +msgid "%s: Group `%u' not found in service `%s'.\n" +msgstr "%s: Grup `%u' tidak ditemukan dalam layanan `%s'.\n" + +#: src/useradd.c:202 src/usermod.c:166 +#, c-format +msgid "%s: Unknown group `%u'.\n" +msgstr "%s: Grup `%u' tidak diketahui.\n" + +#: src/useradd.c:301 +#, c-format +msgid "%s: Unknown group `%s' in %s.\n" +msgstr "%s: Grup `%s' tidak diketahui dalam %s.\n" + +#: src/useradd.c:316 +#, c-format +msgid "%s: Invalid home directory `%s' in %s.\n" +msgstr "%s: Direktori rumah `%s' tidak valid dalam %s.\n" + +#: src/useradd.c:335 +#, c-format +msgid "%s: Invalid numeric argument `%s' for `INACTIVE' in %s.\n" +msgstr "%s: Argumen numerik `%s' tidak valid untuk `TIDAK AKTIF' dalam %s.\n" + +#: src/useradd.c:358 +#, c-format +msgid "%s: Expiredate `%s' is no date and no integer value >= -1 in %s.\n" +msgstr "" +"%s: Tanggal kadaluarsa `%s' bukan tanggal dan bukan nilai integer >= -1 " +"dalam %s.\n" + +#: src/useradd.c:374 +#, c-format +msgid "%s: Invalid shell `%s' in %s.\n" +msgstr "%s: Shell `%s' tidak valid dalam %s.\n" + +#: src/useradd.c:388 +#, c-format +msgid "%s: Skel directory \"%s\" in %s does not exist.\n" +msgstr "%s: Direktori skel \"%s\" dalam %s tidak ada.\n" + +#: src/useradd.c:449 +#, c-format +msgid "%s: Invalid value `%s' for option CREATE_MAIL_SPOOL in %s.\n" +msgstr "%s: Nilai `%s' tidak valid untuk opsi CREATE_MAIL_SPOOL dalam %s.\n" + +#: src/useradd.c:465 +#, c-format +msgid "%s: Invalid numeric argument `%s' for `UMASK' in %s.\n" +msgstr "%s: Argumen numerik `%s' tidak valid untuk `UMASK' dalam %s.\n" + +#: src/useradd.c:913 +#, c-format +msgid "%s: Can't get unique uid in range %u - %u.\n" +msgstr "%s: Tidak dapat memperoleh uid unik dalam jangkauan %u - %u.\n" + +#: src/useradd.c:987 +#, c-format +msgid "%s: Can't stat `%s': %m\n" +msgstr "%s: Tidak dapat memperoleh statistik `%s': %m\n" + +#: src/useradd.c:1018 +#, c-format +msgid "" +"%s: No group named \"mail\" exists, creating mail spool with mode 0600.\n" +msgstr "" +"%s: Tidak ada grup bernama \"mail\" ada, buat mail spool dengan mode 0600.\n" + +#: src/useradd.c:1026 +#, c-format +msgid "%s: Can't create mail spool for user %s.\n" +msgstr "%s: Tidak dapat membuat mail spool untuk pengguna %s.\n" + +#: src/useradd.c:1095 src/usermod.c:520 +#, c-format +msgid "%s: Cannot create directory `%s'.\n" +msgstr "%s: Tidak dapat membuat direktori `%s'.\n" + +#: src/useradd.c:1100 src/usermod.c:525 src/usermod.c:549 +#, c-format +msgid "%s: Warning: chown on `%s' failed: %m\n" +msgstr "%s: Peringatan: chown di `%s' gagal: %m\n" + +#: src/useradd.c:1103 src/usermod.c:528 +#, c-format +msgid "%s: Warning: chmod on `%s' failed: %m\n" +msgstr "%s: Peringatan: chmod di `%s' gagalL %m\n" + +#: src/useradd.c:1126 +#, c-format +msgid "%s: Copying of skel directory failed.\n" +msgstr "%s: Penyalinan dari direktori skel gagal.\n" + +#: src/useradd.c:1136 +#, c-format +msgid "%s: Warning: home directory already exists, not modifying it.\n" +msgstr "%s: Peringatan: direktori rumah telah ada, tidak memodifikasinya.\n" + +#: src/useradd.c:1197 +#, c-format +msgid "%s: Reading of `%s' was not successful.\n" +msgstr "%s: Pembacaan dari `%s' tidak sukses.\n" + +#: src/useradd.c:1226 src/usermod.c:798 +#, c-format +msgid "%s: Invalid comment `%s'.\n" +msgstr "%s: Komentar `%s' tidak valid.\n" + +#: src/useradd.c:1243 src/usermod.c:812 +#, c-format +msgid "%s: Invalid home directory `%s'.\n" +msgstr "%s: Direktori rumah `%s' tidak valid.\n" + +#: src/useradd.c:1264 src/usermod.c:836 +#, c-format +msgid "%s: Expiredate `%s' is no date and no integer value >= -1.\n" +msgstr "" +"%s: Tanggal kadaluarsa `%s' bukan tanggal dan bukan nilai integer >= -1.\n" + +#: src/useradd.c:1280 +#, c-format +msgid "%s: Invalid numeric argument `%s' for `-f'.\n" +msgstr "%s: Argumen numerik tidak valid `%s' untuk `-f'.\n" + +#: src/useradd.c:1299 +#, c-format +msgid "%s: Skel directory `%s' does not exist.\n" +msgstr "%s: Direktori skel `%s' tidak ada.\n" + +#: src/useradd.c:1341 src/usermod.c:935 +#, c-format +msgid "%s: Invalid shell `%s'.\n" +msgstr "%s: Shell `%s' tidak valid.\n" + +#: src/useradd.c:1350 src/useradd.c:1374 +#, c-format +msgid "%s: Invalid numeric argument `%s' for User ID.\n" +msgstr "%s: Argumen numerik `%s' tidak valid untuk pengguna ID.\n" + +#: src/useradd.c:1364 +#, c-format +msgid "%s: Invalid numeric argument `%s' for `-U'.\n" +msgstr "%s: Argumen numerik tidak valid `%s' untuk `-U'.\n" + +#: src/useradd.c:1425 +#, c-format +msgid "%s: You cannot use --uid and --preferred-uid at the same time.\n" +msgstr "" +"%s: Anda tidak dapat menggunakan --uid dan --preferred-uid secara " +"bersamaan.\n" + +#: src/useradd.c:1576 +#, c-format +msgid "%s: Writing of `%s' was not successful.\n" +msgstr "%s: Penulisan dari `%s' tidak sukses.\n" + +#: src/useradd.c:1604 src/usermod.c:1335 +#, c-format +msgid "%s: UID %u is not unique.\n" +msgstr "%s: UID %u tidak unik.\n" + +#: src/useradd.c:1616 src/usermod.c:1349 +#, c-format +msgid "%s: Invalid account name `%s'.\n" +msgstr "%s: Nama account `%s' tidak valid.\n" + +#: src/useradd.c:1637 src/usermod.c:1360 +#, c-format +msgid "%s: Account `%s' already exists.\n" +msgstr "%s: Account `%s' telah ada.\n" + +#: src/useradd.c:1721 +#, c-format +msgid "%s: Error: Cannot clear old faillog entry: %s\n" +msgstr "%s: Error: Tidak dapat menghapus masukan faillog lama: %s\n" + +#: src/useradd.c:1734 +#, c-format +msgid "%s: Error: Cannot clear old lastlog entry: %s\n" +msgstr "%s: Error: Tidak dapat menghapus masukan lastlog lama: %s\n" + +#: src/useradd.c:1748 +#, c-format +msgid "%s: Cannot add user to LDAP database without DN.\n" +msgstr "%s: Tidak dapat menambahkan pengguna ke basis data LDAP tanpa DN.\n" + +#: src/useradd.c:1765 +#, c-format +msgid "%s: User not added to LDAP database.\n" +msgstr "%s: Pengguna tidak ditambahkan ke basis data LDAP.\n" + +#: src/useradd.c:1793 src/usermod.c:397 src/usermod.c:635 src/usermod.c:1563 +#, c-format +msgid "%s: ERROR: Cannot find group `%s' anymore!\n" +msgstr "%s: ERROR: Tidak dapat menemukan grup `%s' lagi!\n" + +#: src/useradd.c:1797 src/usermod.c:1567 src/usermod.c:1667 +#, c-format +msgid "%s: Cannot find group `%s' in service `%s', ignored.\n" +msgstr "%s: Tidak dapat menemukan grup `%s' dalam layanan `%s', diabaikan.\n" + +#: src/useradd.c:1813 src/usermod.c:1583 +#, c-format +msgid "%s: Cannot add user to groups stored in LDAP database without DN.\n" +msgstr "" +"%s: Tidak dapat menambahkan pengguna ke grup disimpan dalam basis data LDAP " +"tanpa DN.\n" + +#: src/useradd.c:1821 src/useradd.c:1839 src/useradd.c:1856 src/usermod.c:1591 +#: src/usermod.c:1610 src/usermod.c:1628 +#, c-format +msgid "%s: User not added to LDAP group `%s'.\n" +msgstr "%s: Pengguna tidak ditambahakn ke LDAP grup `%s'.\n" + +#: src/useradd.c:1908 +#, c-format +msgid "%s: USERADD_CMD fails with exit code %d.\n" +msgstr "%s: USERADD_CMP gagal dengan kode keluar %d.\n" + +#: src/userdel.c:54 +#, c-format +msgid "Usage: %s [-D binddn] [-P path] [-r [-f]] user\n" +msgstr "Penggunaan: %s [-D binddn] [-P jalur] [-r [-f]] pengguna\n" + +#: src/userdel.c:61 +#, c-format +msgid "" +"%s - delete a user and related files\n" +"\n" +msgstr "" +"%s - hapus pengguna dan berkas yang berhubungan dengan pengguna itu\n" +"\n" + +#: src/userdel.c:63 +msgid " -r Remove home directory and mail spool\n" +msgstr " -r Hapus direktori rumah dan mail spool\n" + +#: src/userdel.c:65 +msgid " -f Force removal of files, even if not owned by user\n" +msgstr "" +" -f Paksa penghapusan dari berkas, walaupun tidak dimiliki oleh " +"pengguna\n" + +#: src/userdel.c:175 src/userdel.c:194 +#, c-format +msgid "%s: directory `%s' is in use by `%s'.\n" +msgstr "%s: dirketori `%s' sedang digunakan oleh `%s'.\n" + +#: src/userdel.c:262 src/usermod.c:1663 +#, c-format +msgid "%s: ERROR: cannot find group `%s' anymore!\n" +msgstr "%s: ERROR: tidak dapat menemukan grup `%s' lagi!\n" + +#: src/userdel.c:279 src/usermod.c:652 src/usermod.c:1683 +#, c-format +msgid "" +"%s: Cannot remove user from groups stored in LDAP database without DN.\n" +msgstr "" +"%s: Tidak dapat menghapus pengguna dari grup disimpan dalam basis data LDAP " +"tanpa DN.\n" + +#: src/userdel.c:287 src/userdel.c:306 src/usermod.c:664 src/usermod.c:687 +#: src/usermod.c:1691 src/usermod.c:1710 src/usermod.c:1728 +#, c-format +msgid "%s: User not removed from LDAP group `%s'.\n" +msgstr "%s: Pengguna tidak dihapus dari grup LDAP `%s'.\n" + +#: src/userdel.c:327 src/usermod.c:709 +#, c-format +msgid "%s: User not removed from group `%s'.\n" +msgstr "%s: Pengguna tidak dihapus dari grup `%s'.\n" + +#: src/userdel.c:537 +#, c-format +msgid "%s: account `%s' is currently in use.\n" +msgstr "%s: account `%s' saat ini sedang tidak digunakan.\n" + +#: src/userdel.c:559 +#, c-format +msgid "%s: USERDEL_PRECMD fails with exit code %d.\n" +msgstr "%s: USERDEL_PRECMD gagal dengan kode keluar %d.\n" + +#: src/userdel.c:587 src/userdel.c:605 +#, c-format +msgid "%s: `%s' is not owned by `%s', not removed.\n" +msgstr "%s: `%s' tidak dimiliki oleh `%s', tidak dihapus.\n" + +#: src/userdel.c:593 src/userdel.c:615 +#, c-format +msgid "%s: warning: can't remove `%s': %s" +msgstr "%s: peringatan: tidak dapat menghapus `%s': %s" + +#: src/userdel.c:625 +#, c-format +msgid "%s: directory `%s' not removed.\n" +msgstr "%s: direktori `%s' tidak dihapus.\n" + +#: src/userdel.c:637 +#, c-format +msgid "%s: error deleting user `%s'.\n" +msgstr "%s: error menghapus pengguna `%s'.\n" + +#: src/userdel.c:659 +#, c-format +msgid "%s: USERDEL_POSTCMD fails with exit code %d.\n" +msgstr "%s: USERDEL_POSTCMD gagal dengan kode keluar %d.\n" + +#: src/usermod.c:62 +#, c-format +msgid "" +"%s - modify a user account\n" +"\n" +msgstr "" +"%s - modifikasi account pengguna\n" +"\n" + +#: src/usermod.c:77 +msgid " -l login Change login name.\n" +msgstr " -l login Ubah nama login.\n" + +#: src/usermod.c:78 +msgid " -m Move home directory to the new path\n" +msgstr " -m Pindahkan direktori rumah ke jalur baru\n" + +#: src/usermod.c:80 +msgid " -A group,... List of groups the user should be added to\n" +msgstr " -A grup,... Daftar dari grup pengguna seharusnya ditambahkan ke\n" + +#: src/usermod.c:82 +msgid " -R group,... List of groups the user should be removed from\n" +msgstr "" +" -R grup,... Daftar dari grup dari pengguna seharusnya dihapus dari\n" + +#: src/usermod.c:89 +msgid " -u uid Change the userid to the given number\n" +msgstr " -u uid Ubah id pengguna ke angka yang diberikan\n" + +#: src/usermod.c:92 +msgid " -L Locks the password entry for \"user\"\n" +msgstr " -L Kunci masukan kata kunci untuk \"pengguna\"\n" + +#: src/usermod.c:94 +msgid " -U Try to unlock the password entry for \"user\"\n" +msgstr "" +" -U Coba untuk melepas masukan kata kunci untuk \"pengguna\"\n" + +#: src/usermod.c:149 src/usermod.c:853 src/usermod.c:948 +#, c-format +msgid "%s: Invalid numeric argument `%s'.\n" +msgstr "%s: Argumen numerik `%s' tidak valid.\n" + +#: src/usermod.c:416 +#, c-format +msgid "%s: User not renamed in LDAP group `%s'.\n" +msgstr "%s: Pengguna tidak diubah namanya dalam grup LDAP `%s'.\n" + +#: src/usermod.c:433 +#, c-format +msgid "%s: User not renamed from LDAP group `%s'.\n" +msgstr "%s: Pengguna tidak diubah namanya dari LDAP grup `%s'.\n" + +#: src/usermod.c:455 +#, c-format +msgid "%s: User not renamed in group `%s'.\n" +msgstr "%s: Pengguna tidak diubah namayna dalam grup `%s'.\n" + +#: src/usermod.c:558 +#, c-format +msgid "%s: Cannot copy directory %s to %s.\n" +msgstr "%s: Tidak dapat menyalin direktori %s ke %s.\n" + +#: src/usermod.c:565 +#, c-format +msgid "%s: Cannot rename directory %s to %s.\n" +msgstr "%s: Tidak dapat mengubah nama direktori %s ke %s.\n" + +#: src/usermod.c:1067 +#, c-format +msgid "%s: Account `%s' does not exist.\n" +msgstr "%s: Account `%s' tidak ada.\n" + +#: src/usermod.c:1175 src/usermod.c:1240 +#, c-format +msgid "%s: `%s' is primary group name.\n" +msgstr "%s: `%s' adalah nama grup utama.\n" + +#: src/usermod.c:1323 +#, c-format +msgid "%s: Account `%s' is currently in use.\n" +msgstr "%s: Account `%s' saat ini sedang digunakan.\n" + +#: src/usermod.c:1418 +#, c-format +msgid "%s: Shadow passwords required for -e and -f.\n" +msgstr "%s: Kata kunci bayangan dibutuhkan untuk -e dan -f.\n" + +#: src/usermod.c:1443 +#, c-format +msgid "%s: Cannot modify user in LDAP database without DN.\n" +msgstr "" +"%s: Tidak dapat memodifikasi pengguna dalam basis data LDAP tanpa DN.\n" + +#: src/usermod.c:1461 +#, c-format +msgid "%s: User not modified in LDAP database.\n" +msgstr "%s: Pengguna tidak memodifikasi basis data LDAP.\n" + +#: src/usermod.c:1780 src/usermod.c:1791 src/usermod.c:1817 +#, c-format +msgid "%s: Error: Cannot copy faillog entry: %s\n" +msgstr "%s: Error: tidak dapat menyalin masukan faillod: %s\n" + +#: src/usermod.c:1806 +#, c-format +msgid "%s: Error: Cannot copy lastlog entry: %s\n" +msgstr "%s: Error: Tidak dapat menyalin masukan lastlog: %s\n" + +#: src/vipw.c:58 +#, c-format +msgid "Usage: %s [-g|-p|-s]\n" +msgstr "Penggunaan: %s [-g|-p|-s]\n" + +#: src/vipw.c:66 +#, c-format +msgid "" +"%s - edit the password, group or shadow file\n" +"\n" +msgstr "" +"%s - ubah berkas kata kunci, grup atau shadow\n" +"\n" + +#: src/vipw.c:69 +msgid " -g, --group Edit the /etc/group file\n" +msgstr " -g, --group Ubah berkas /etc/group\n" + +#: src/vipw.c:70 +msgid " -p, --passwd Edit the /etc/passwd file\n" +msgstr " -p, --passwd Ubah berkas /etc/passwd\n" + +#: src/vipw.c:71 +msgid " -s, --shadow Edit the /etc/shadow file\n" +msgstr " -s, --shadow Ubah berkas /etc/shadow\n" + +#: src/vipw.c:164 +#, c-format +msgid "Cannot lock `%s': already locked.\n" +msgstr "Tidak dapat mengunci `%s': telah terkunci.\n" + +#: src/vipw.c:278 +#, c-format +msgid "%s: no changes made\n" +msgstr "%s: tidak dapat mengubah mode\n" + +#: src/vipw.c:318 +#, c-format +msgid "Warning: cannot create backup file: %m\n" +msgstr "Peringatan: tidak dapat membuat berkas jaga: %m\n" + +#~ msgid "cannot open socket: %s" +#~ msgstr "tidak dapat membuka socket: %s" + +#~ msgid "cannot enable socket to accept connections: %s" +#~ msgstr "tidak dapat mengaktifkan socket untuk menerima koneksi: %s" + +#~ msgid "handle_request: request received (Version = %d)" +#~ msgstr "handle_request: permintaan diterima (Versi = %d)" + +#~ msgid "cannot handle request version %d; current version is %d" +#~ msgstr "tidak dapat menangani permintaan versi %d; versi sekarang %d" + +#~ msgid "User %s: %s" +#~ msgstr "Pengguna %s: %s" + +#~ msgid "handle_request: exit (%d)" +#~ msgstr "handle_request: keluar (%d)" + +#~ msgid "while accepting connection: %s" +#~ msgstr "ketika menerima koneksi: %s" + +#~ msgid "Handshake has failed (%s)" +#~ msgstr "Jabat-tangan gagal (%s)" + +#~ msgid "client has closed the GNUTLS connection" +#~ msgstr "klien telah menutup koneksi GNUTLS" + +#~ msgid "cannot enable SSL encryption" +#~ msgstr "tidak dapat mengaktifkan enkripsi SSL" + +#~ msgid "locale length in request too long: %d" +#~ msgstr "panjang lokal dalam permintaan terlalu panjang: %d" + +#~ msgid "error while reading request locale: %s" +#~ msgstr "error ketika membaca permintaan lokal: %s" + +#~ msgid "data length in request too long: %d" +#~ msgstr "panjang data dalam permintaan terlalu panjang: %d" + +#~ msgid "error while reading request username: %s" +#~ msgstr "error ketika membaca permintaan nama pengguna: %s" + +#~ msgid "No username supplied" +#~ msgstr "Tidak ada nama pengguna yang diberikan" diff --git a/po/insert-header.sin b/po/insert-header.sin new file mode 100644 index 0000000..b26de01 --- /dev/null +++ b/po/insert-header.sin @@ -0,0 +1,23 @@ +# Sed script that inserts the file called HEADER before the header entry. +# +# At each occurrence of a line starting with "msgid ", we execute the following +# commands. At the first occurrence, insert the file. At the following +# occurrences, do nothing. The distinction between the first and the following +# occurrences is achieved by looking at the hold space. +/^msgid /{ +x +# Test if the hold space is empty. +s/m/m/ +ta +# Yes it was empty. First occurrence. Read the file. +r HEADER +# Output the file's contents by reading the next line. But don't lose the +# current line while doing this. +g +N +bb +:a +# The hold space was nonempty. Following occurrences. Do nothing. +x +:b +} diff --git a/po/nl.gmo b/po/nl.gmo new file mode 100644 index 0000000000000000000000000000000000000000..cee279a3ff6b60ed74db1137e3eb5a9437673857 GIT binary patch literal 63234 zcmb`Q37lkAb^l9Llo3Htke$cC&@(VK3%fIHJ<~J8I9odlpny=_UENc3cU4o>HO(L< ziV_nI8iU4t!F@wz(sAIGhnGr^esHPu@>AqnD*bdtsdOm#Gw@O1{oo_O1uILX z!@wg!`7Z_+f{z1_2CoE<2ls%A_XQwPm);4k13v}!feX$kl@@_#fJ?#4!SlhJga0Q% zk}Ulc6#da>mP*UOe(*eS3M8u1o55A!cfbq5BhT{qc7Y0a6L<{x7Vt#ypMv||;4Yo* z=_a7!y9&Grd>*Luz6kPH`XBy14m|6eQmG8qLAhTJUJQOc;A77%mAEZk4l4Zfzze{S zg38~Yz>C4v6hiUd2vWq-yFjv3x))Tu$MEkGa3{DLdmVxqbZ`Sm(xn!te7-HX?*mW6eG0_O!EFKm z5>&W%fGWp#K(bUijKE5N6R7+=15~^p3hv*4VzJYxWU^S=2I~2giTceDP^ebiW75VrdnXA^I6m@x2+8|BpfC^F)YG0ylvR!ATI7Dg7O&e0~a4 z{r?eEIaW}4O6OWo@w^ON0)7)*3?4Ax&rc6{C8%_60Tup(pu+tIyck>o^HcQFb)f3! z4v;D<{S*}cpSs@tcYtcA=YZm$cY`X|j{`ntgZH!bV1oZO;Bny7!DGQ!f(L;g0uKj2 z1ug);0V=*9gQ~~FV6Ica0q_KH98^5d29E~c2rdLa0iFWh1NMOj!90p*B`E)Ez{TLr zpvwDpP~q+aRo{m^-t)NvR60)p75@}?6!>iL2=KL_^7BDZ@&6E1c@Ev=`8pj``j>zS zI2GK_2Whg>2SK&tp8}q_+0(feRQ{d`DnGY_D(4r2`{$tQyg%SDsQlavE&<;L zD*s;xPX~V&@T9HozXeozCP2k^GpKg^0I2-^JE;09Z}a-u4vG)j;3DvLQ2hUufCmja zKVAgVWTk0P<@gAweBB$|2S35xXM=ivC8%=V3@V>*4EPoBc-(&mPXv$O?%^%~m*E}> zcq^##elpq!{|7wTpZ5ja3SNkR8&o;p1FC(#2VMj| z@@mH|pz?JKsQ7OOj|RUA9tZvcR6ZYZjmwAgK+!!Bd<^(BP<-)1Q2hIT@C5MNp#1L- z?qe$+ZWWl|UjapTQ^4Cm4iI#q%vt`S}B= zc6j8lr*kT}5cdX9^>i(G82CI;<-83%7W^=HBKQqZ;eQW48hq4<$8!p({Hz1jPLrVc z?N(6X-xB;k4JtoB2bG^kR2>sg;m;0u6{vjO463|u0#61%3Z4Z17)-#2jCy*D0&W78 z&+EWbz~_Ss_dZbV^=iO1y(*a)^@Z+G;{|Tu4EU0;ZT@H$`w}A5B4ITpC0v-y!9Q*+IHc;tRul0I+7O4LC z22lQA4({K8eYj5;clo^@JOlSrK(*J~LG|CeK(*TsK=r%dfNG}$C%nCn2Ss--cq+IJ z6yNOuRn9knYPZjU;*TGJs+T{4XMx8~`gk}9>iM%k)$47b+Wk|Y%KNY2V({U0=iil} z=&k^j@4o;Q?>j-&-}n zPY0g~s$6$~qW^ku{}x<{`9z-8crrhOi@0#y5*4=TMU1ozd!Jq@Z}ZUPhV?cfsdi{Lrn{osM%ingb7 zF8E;F>p}6~#E>PwEE+{_u1GoY_X^*$hc2MTJ%0#P_#c9ofQSC2*Z1WCCqcE(O`z)i{h;{yli&dOW$z~_K!mpj0f z;CKycJaV_Xhkn zcp~mU2lt83cKQKO{^Ov+JqHvY-wqxPej@mP2UI!!8$1s@?KxilVNm_)CQ#vC2Hy4{ z? z$Kbi(5zljb#}-ij&j&96KLwV-1OCqWc?GxycNJ7Syc-+@e*vxqFM7Vm_YCk%+#d#& zpI?HD!NdOE-K#*kuLKp}&7kV#E8s@(;9EIrzuM7A!Q1Ko3a?f8GR666}YVcLyD)2j?o)3NoR6QK{YR3x#PJ_zVTS4XH2jJtt zg|~S=uLRG={bEr0{X)QlUgPNufal^r1uh5Q1gagr2`XO)yw>Ac4qEwx`&HmYJpT^3 z20Zq4?tXH>SAxpN_d&&f)a#w^20_L1QgAK!1yJQW{0&|o8^PmoKMyN1(z#K(*sXK;`fL@chiT zdVEg;Ps9J20p9_hg8SRxdhpNS#o+q4c|6YoRZpJ+mG2*e3V-m=cX<77 z2UXq{xEQX{Ri5^tAy8_-1uE2fzdmOI>2XNm4D*d}b#e3L$oewSmkHOsnRiDoV z&j3FFif``&&juI1&+~OTxE%L1sC>LG;N773p!9xE_r!pM;4-|Q4vOFJ0F}<&py>Yu zs=bc=fb-XCQ0;g%xDp<1pN5M0}`vRW$F|Yp}pyF$T=YVek)!sh}?#F!G)87P&?x~>Sc^9a5{0XS| zkNAY+8t`J=4N&F2162OM3qB4!~nYfvU$ZfG2=I0Tu3{ce-3S7gTyz zf~uG2fa13|1plvss?P_1%Kevta$gCmKR*jpI&TLR@0UQ;^8x=9#zpX0+}D9B&n=+x z_aRW_z6Vseqd)EOZUPm44|qKIDp2A75mfkZf#Syl@ACYg10Ih1ir}t;i*VlxDxV(& zRjzvi{ux||`@f`O# zmyd(s0Pb5rrE@o^d_U;(9)1z1d|v`C1sefh4vPLW!TpEeUi1ZThn?VQJb!9%zbUxC z3?701pTHx*!@r1a7+eCL0{#j-5j^5cp6=P8>f=gK{Q9?`>hIIw8t@O`#o+2Mdp+I= zs{LOE9tD0d;N76oy$@7Be9+xqPsf6%3wbNpJwXIXwR?sQ7*bs-8~xmeZdHJ`VQ=@X_GYLDk<21HKD<6z(sA%I^=s zBfy7#+xyY6pz?Jtcrae280d?fC@pxX6Wpy=KW ziXZO^?q7pv;Xd%YUazY`rL!Bn7<>tMAoy+YaPUXqL%`pH=Yscxj{#SH&-1@N;FX~G zrwJYj-Ug~2KLDNsegixoJmmY1n?UjRUxVU<4}fZqAA%1BkNkl@KMquUn?aRpIN8j|cw%t_F|%q06!DpvpH1s(xPyitaA(1n^$)VDKS7^7=gtRJ&gUs+}$a z9|7J7ia-B4;Jd&LxW5Y?1D^6@Z^w(k1osu7!rur=zTO5}JAlgfuR*o*k^k!HtpHEN zeF>;=yFu0SEuiRL11kNGfU3`*fER(s-{boHRp1)jw}GmUdqAc8-=OOGdk3ig`fc#> z;KP3Ee6k%p7WZy&1Ncl(_5L~VFz{R8Ch$J+h2XhAW6lSD9#lM!`*&ml_)PF|;Ia3? zYv3;Mbnu_St>ACLe+Jk7+}ru!|M32E8u&c?H-jqgcR|(XFTpdxqkrM`wgv3NJqn6H zo*Ue^gR1YZf#Rnle(7?0J-8D0B&cw&0#63-3jX(j>Tk#Y%K36TsCs`cxD0#^cmeoj zQ1yD~e|o+y0UwFG397xH1}+BQ4_ZF~mG2{e?f#Dk)jlmy@xBjS4&EF5kNAzpdpRgR zy9qoMd=2<$@H3$J?R%iw>DQprJ><8Z-a1h2{1j02{px_90~g}{16T%+{hhb}#(;Z3 z<>$3v0^SX(|NRC$2|Vn-y#CGvRlikG>AW6PK0X`pC*Xr{pTxhnfcov?dLiyYj8 z*VDL~T>2e>|IL1D|9^@59o*d-=)V-hfv?2>bZ`<}0^R~Xi|btO{}$9wa%BVVKX9oI zJ__o0_5tt?*Esi!!N+m^w>@!Q{s8yS4{pINg!>=xCBg4h+^f0HA>5ns8|Hd>c=kT< zDO`sJx8RfE{)1p&$irpe!wCP+;6eC*kL#t}9}=E_6ZgM{`?b(r%>91^_f8Mu<`t=vBc{1Uhv+W*J>8@Rs3^>19TYUx$r(L5Uhhj8bA zXX5`G{5Nyy_h8)m{T*(}3jO{zJo`0xn0s0O3b&<2gsI~AG}mLeKQqwl`E&G--va#V zTyNuk8F*euN6&8OTFdqG5bkVH{qwxw<~IF3KKOkm_?#Hr_u>9gxc?>hHLmY)t-$XB zuCutlf_o|H9?11>?q7u86ST1ySRT(&V4rzp2&4*F3(5t{50GLfnVmC#>F3S zy(5HsE_fT)gSq|{|NFVl;nMGV2b0x@hx>>ZsFM^?hk|U_b1%fa=i(UPlL|}U(Y4kvW{yzmwvzJ**CcK z`vCYi;8O5M;1c4FzwZT_o4{vs{fq}?@O8nz1|A0ez4(8f`~MdLZUxulet&Qa)9r?b?(bt$8tS_>&^K6 z3zvQm1HTHMM7$p{ANU{q0siBG=4Sz)7x15W{z&NG9_R%R=UUJ87joo&$3k~!&i!@n zzd$@c41OQy{+Z$ai`+BZrN1LXdS?;GV(xzu+#+}ge(wR_jo(?|KY~vOm*IZ`*9iA3 zxgM=&T>AYxG=J&0rT^moU0kc6)$b&(t+@4D3qA<{+k<-z_%-}5z;7BH!TnEMALjZ8 z+^+Q#(;{GO|a{4T^Tz43RTejnpHjr%{E zi}(opYTO^=`Vag*4?Y6Fzv8~d{gL3pKzk)_=??n6g?s(J1|G-t{@{LbK!1uJ%gq?q z&G`R0JUb#j1Ye8a+qquB{iR$-2by1Ve+Ty$f_+^2tqadCai{&C;{R`h|6SZaU-#ty zcff(%pUb^|r-R?ceVRK<3Al{wy<8XJ|2D1`_xk-k*XOwI#_tratGWLKsNW^vg~Zk7 z{v7WAD)`$&{{24Qfc;z#59u!iufTl=*J|!R6v90Pd(~1tG3&xF5;&MXvvb{v!Ne#QhVvuE+h;TpY*nYzywc41S~Fja;vVHvVqp=1E-J z@&8Hi9OHf=mwv|+#~;J}!@>mbt8?7NyV?v7w>KJ-$=3GdQ0jA8qdA@@U$C_?lT_=| z)n-Dtq+Xp#rYf!0OrtrHj5eC2QCcuKQLVJ9Nvk?h9iC1q+%)$P;et})zeTO2Tpp@5 zDpR%OipubCqg|iAs`#`uJyNUB@^B()6JwtKit<1*RI87S)UQgeDA$w8n%!KVOjfR! z&rC8?X_{9psnsjP(^n-S*?cTdDNo#3Zr@lQxv{+CigM+u8_U(FcG8v0yQ>pZR*Vg` zJyq(U)=JE4qSl&@v6aj1R%NUzGNYmjb~l>S9%rp@eW+La?})W(xC3EefztM~Vka+(H<4rQz7^zaj zQ`O-bvae!(Y37mP&FXb+76ZHCY~Bh65I%o-`ss99-M zOT%=cw22F)Q{T4`Hkzk7THk0gKq^B~rVTSlGq|VuV;HPguh&>OR;z~?s@G4!0v^eL zsvp@uv%7{2>8MO=HsNNH&TV!+D9Vx5M9z1Y(!g(xkdaI?8BL*DyL$r!9u|TBTT)N8#A| zXl<-)LN4V$$~8J#ZHmSGxy2SjjH0oYrE+As-P>quq$gqd2RhT_G&=JesO+T*Mos_7 z+Q93(gi)SRIsMi9Mc`Sb zWnMfqD zpfzs{WYd2JpNqcI|M%_k~N=wxa-57-of^o7? z4Qn;-ZHrua0_}!XRy$re40A#W6NaHfNfmz7r3KcAE_b}$=DRLH5Bt!>>s(Y z&kAc(%rw^;AyENplkLge__(l8^>k;KXcj8ep?9II4jXBdy6G1yBqQyq2_L-|*BkY6 zyI#AlU0ssw+Bjf2X^=%mcN1M{VXWH)f95xnc~L@u|841~QVFPRu1kmXw0F_S&FXZ! z8Abye@)w`!6D$I|h)~$rH}e_pk`#o{u! za9w-EOc|4vaRzKtYC>uX+}aBlNIV2-f(6EX@`_?Br3bw5=LDCEYm)F?BurGWX~fv+Sny_=tgaqjmJw-#;6k2 zzo~^(l(QHdMAdYK%vv3lZq~reN=1rAD277ff+>ROB zLBozj!>nTt-0U)F+cG7W=y8 zA2z#l2fUB4&7xKxrC@?4V|b8Xp$o_ExS;qjFEWZxVt~R7u1F#QQDw>n<53GP zDrzGgDX2HNnj#ZJemYo;%;?fYt=aeXCPxJEV7fX+vG+=5W@S!1A%F5}wBUqIz zT+~`9T}-9~)5pYw`PmOMjYTbW{zz3}!KBe-j?p@Ln<2L8+7Rp#a^iFPz!sqq zvK(R4u^hP;6@v6T8(2x1>PkODJG~wSJXUjoVx$32sBMj;R~#fe+-}M&gqlkwz-)nR zZAHsgW|KvTr`oJFs0z$TCr)|xhY-<{;pt2H0|Eh%is7hEo35|;E@YM~JgCQ-W%Hp7vuYs*uwqg(~ z`U48#l8r^M1~zFGYJQ0hH>UPxMvR1>Nb32zSI$B+Wd>ChxtRGN*TQfhBgg#GAHfdX zWUgIJY|3cm5A$cSd8kcW)AYENw2BwUZn>8xwXwR&UCdLEaUO2oH4;KuPUaoR%&5V3 zY$l!u*c`cd(1K7hGy7e!Z1gG3TCyhTY&rT$voRq>q{;fYtbq~~#%BeAwH5}jS@LLy zK`R-hSEf}ufW`zTpzckyN26qC~@7T!5Wb^ouMkv9$ z?c29)pS5W#^}UlcWss7AcGx>rCmVFonp$RRf(jJHeN5G!8k_2A#!Q9hEMDpBw3x&?tKV6*_|IS7}QE5%@n_PW!ei4guwm5B#!UlBj zJCfNd8Y{evAl#cmhoUrBYzs1BoG2>w04%Rp>~wf&B)9EL=5KwNc-z zbi>90M06ZZT{16as8B;xU^9nQf=7WI2$Q8i_*H7wFuYj+S0#c)Bc9?7M@?pJ8Cm$?CjM#K7W{%DYC~M z(YiEFo3i1Xs@85_*S~Y!)m!>EZoYcQ;I?g>3z9n4j?6@Eme1#CE2EkT2{F=0vQTRG z!l2(TbtO+SH>Zu;;+Q5a$%=DUtOyxYG`ZQPOPcK2Y>x)}wvVkQ{Vwm2(01k~%50dIVK?)sNUJ?O%yvAMoCDzww++OOpY7YQfxYa5 zV0kp9W|c0PY_m5C10sXJHe1>jA=OzVDlGhkS+2&*r00xiN0HoGv?t+CY&tn{)yM1^ z`*KgMZD)gxe%h-MW{h!uCV%#mFzN4nz=oR2SOu{pyFxRRghi*Wp*KF-v2OeP#>ibz z&VPtZspm67?yCEU=WN^6hq@of%y)!qN4XP2n0BxDIs(W)dNEZivoXT^9STgVS~V+1 z_S~nTQFG}zI6D`cSoQ2XoA#v5M;zNPj<~sa_Bq~KYTZ;>CFT8&!gNQFaks=Bsb3=xY>QOOMtvQnafh*+f1^CZ%hiWF4b>QKQo$ zOsHp@VAQ5V8(bFb$NQ9HPi(YJ7DT-m6UInm*vv)9^1!8w%cD!e%t`cN+5}T$JeOU> zOh)CYW|h4s%@Rq#;SayZX3=9Bh}Eg+H6!i+gmXoJN*NH9mK8E1<@k2S#0o(2?Zv(5-IGeRsPT}*6)nNU8V zqB_XL(#4vDtI#^rNj5RKhz#NVvCN995$o}`X*;m2J!Xr>u+{I#(qs`6>ulgwa&DOp zx`A4KqN^+_8#+du!+V3sg3Vl-%%xMiT9`m&EGJbeCYLXEq?}!|-C$}}sy))+%poTb zCb0+hFsQTBNEU*OHq5PTF(GE7lcpU8Hmlia#AXUlA=vuYV(cFY2I3e4g&JR^?+!->cpt1G@W*`=@ny8*=u&&hxDqkZ~NKwZ(RO6pvD6VoN)R_H&rL<$)kiA471cAYy_0n0@$Mp7JDb^`@mNij z?(me#9?H~{NDSCX)7m>Zgi+Uuyg=PQM!OViT5Y1R<24{j(QTNa%pZ_Q%UzO*D{KFfkz)YbXIZ3lB6_nm3D*Y1#34^ZWDsBXEBPbvASZHd@4NlCJN!%0-$WFe9Cps zsm7!8H)~_Nr<28Nmyl_;XtV!~O@7Iy_IP`I*@B(gsK(!DlPOoLF*?nVR9$ToFeTe! z^Ef*LR2VH^DIpX|*2cBNlXsh#M{7;Am2BO%fRL>2P48W83b^fUSGX`2yc+n)3%gZ zhRrOJ-)bOR>JUY?u(iA4+ni^490dL833jCEz+VMYb<=D=O=zV^p@B#Qagz$8N!#{j zgvHVz6_l+=+DQ_*P`n!H7|7;`R2?C(Za&cbgYcRNIW|EmgHIT?DU%+AHy&~i@b_&K z)yXNgok(T6D2aZiKq)u!O83@g0s}oO^G-R|6vF(IV73bWVciK48#Yg+0j>2-+d>Ns zWYMZ%3hYv>K&om@@qGzwcV&vPS{AK9pGKDIW=j+4r)Hpm%HGDc_0z%d#?7kWY28&j zEYiLgpZHFE$@$^k4ecMkVr6;J$W^P75K?TWvB%7cY&>nU7K65utlPSC-F9OtQ3N)M zd6+GbZwBrRMGqnClq0|I!>shQ>?}{xrCX8M>_IYJU0ScRQqR063lG;6w>^f*Y{L}_ zLKOV1_K|OeL%LYGD#@g?&AChhTOF`W5cVJyEHk8$ z4_=rOtLoxoWy@DV7t3ztgRK}5=L%GODTR5tBS_0 zw`$myy;P)SO5XFHZVYQb{ze^0z(%cA2Vnw`Q~IMv^Tt2 zu4W8>a3X&=p2rGU3Eo;-PHB~y8_U) z%||aN_-O}=*+N+5Mc(pCUfkJ=D$KieThRz&nNStB^0Gh6dtKvYQrUx5%`z&kHzglB z=NLDyC|urc5qU?kB~D3bNO&D}c(;U|mEH~+(bUUAI)%@$vYutZV(;_*Y&?og4FPb@w)4mc(fBni;++_r_hZMJ6`2174}6_Y_O~PXpHo*O@~TA z!Ar5RdE1;R-x;jZI=ks@!zfv_jC8e~n|Ekx8n#K7!Z|wHbRypDTnT~x61l#9MTrn{IKo8B-;q+{5)cuMP%-qcbQOMRoZ3!P}2eo zhZPQ$h(;a`C=xsIzz>f~*6bK`-D{V2bYKHm#G8TPnNq0)NKQ{7C&tD zQ=FP*&8*p~MGZ}1Lf73Cn)p@|Yv{$rCMLg264xKINEHw3xHV=qtcDFIHPcV+{1}M| z76wtmJe5_ka4E|ucR_~>)1O7^chS@4Yr)VMJu@k#&Q3{&H5O*7Pw^C$T{<`|WI5g@ z))mqx9QSsX&U`yZ|3>t$a0ZS%@&`T0?eB?m0^R>bB*6f91uqA3Jeos#dRaKQOo`g5 zW_}!6ZmNG(XD)7}AUcfhigMv772G;N!!5-)LJ_Vg@44y<&DuJmiHB<`;X%_0bywBD zVObh(oE$m(#;D`stM!d}MZvi*N{x8pK?J&=LZ;|Y0zVDps%RATJWodNE6U*{1_ilJ z|JwSuhkxRfd8OYZ!01(1Y4ZWolYIO2E^>I2Tj@;b-*su`tlel9328m?mwxRo*zCEV zXTEGsJ$rW8-NB{`s*H?ZQEuvA)+n@O7`CtSWvp4^NyDfbnL;p`ZNUgzm@-`-?l}y> zXSw)qMC7`i0mr&Hs3Q+?US_WmTc92lnPu&|8_8@jJH>}LmRlXqGyY)J8MRbp&A*nM zR)6FTe_L5(;h+lL?vpu2JCnV!JVs`2ERQQNQG}trgRIyP9MMsox!U=;M+*|+RCfV6 zG7|aXr*e^wh3iPAd7~XHnQKlo8&m)m__F~~?(Y4dyI|`;s-{d?Bj|q`Mm293ZFAU$ z_A=$@vyH+Mtfr^ucRl4OqeaXuL3$%1M5I7IgPz4AW|3r6sZ7mDz?7J+Cbbr;wA}P0*RYqpwOwg4Fi39ANp9~yrgXg$3A5W^rHQV> z8pUkyrl!QhVWY%c`xEv}%s7Wtxsy)Esw7nwZ6srPtgYLFI#Hz*w%{?V;_XT0(UlwR zM(ncC&^oytdvPAl@Qxv(#`|C40HU5`#&Kw&($BLa!%Pbi7tb0dsL`@9%!gRh95u07 zkH~B@9GamybDWbTYqcYgLuQqyc)~~CpyHX486=!hTMXUPTA-TQzYtcLxgd17C~YxG z>~9wB>^Co=I=FVVNj7&CB~LfqU<%P}%*;t7I~Wn3aTc0G+ct|tgL$)E*CJX;TM{+h za1|@ed2L29GGfbrabJ$Be9~|=9f=bS21*?-h*`ueMPUz*)5e9k4qDl#JT)itr6t+G z6bErna=KSj$3je&@)R<_=y9<9*sNr}M6J1EQf3OzwO>OiDMy$d#lGDcjzsMG!T1m| zH5VCYe1x|d@}-K=w2}K7h&+b4c13$|l%5H>k})(p2E(Qr-_go0!d9s{HM~rMQylNh z7@>9D+=6{U6nm$fpo;9iXVqEfoWA0W6)PYtZ)f7H4SE^fit>tc%PY=FR<2le*5jN`D+%SD>>6qD zs)TGPYpQIMOLh$JZckL}oTNRLoIfP5iz)hag}LXl`ox6`HnTOS&1|N;vs#(dsuqUs z+( z8dpm_VAeN%!LFU_%jacu$|PI4%N*IoIVfVl^M-2E3ob8j@X4`qzqv8)r?x4DLAJ(L zCd%tM7n06gXE4Uuy5Nk}iQisOPfofZS-F~X#V=)&&Vdtb+pJeqAk9?|+Q~kQ(FP4a zy}Mlt;^3f5E6rNyLI-Vv$(t-i@V_(2Of_y&Td<*89p#j5=7P0qdxlryv2IMyG_)MB zhyUXG1)H>Wv&yERz+*aCC;rU(!kktIj^}m3_&gy7sSMzfF*9Aeb|h7QV`OBn9L^}`&DZH_jibur zF*F?|>UmswCvEP$a-=k8@xhc+oN$P8FpbV2`-08@(1w#3eeSp;tIu&6=VQ@1xty0C zF{qhrwkYfbqj;QqC`aD7SS|ZG=9o-Iu*Z##RauI_48M=#%;%HcjB&wfL-YZ(&gD|V8)9Ug>26pkX- z(WYK6I=kFw`3l;Yv@U(EZCS80#OXA=!B)d8#aa+qFLUzwoo`jYCVBQ=vl49;m&Fzj zKTo_HjI>c!tQW9elbwVvb0UUUMIVCZk3{#5ROm+}?^{;cvs$a~X;7F67^a>qW-wM2 zS{hn$>UB_hS6K86WKo54m-Z0z@^D6aXO*_?K>S##N@afBhM4rTvMgvgGkp?UI^HsL zc5`<5teA?UPEha2O$S9Nb`Qehq3Sw}{hW@dIw-QJItlHN^=dq19j*OZdZucO$yil8 zwk0ma8j%+{maoD4@U+j^2rptG6U82(k%=uzD3#I}I`dI9yqak-D;C8O0=lt8yl=IW z_JlM(>qwXc?S<`fHf>dh;ta#APi^q{!>RGP0;$hqJfs7OVAC?5T8{fi8WkNWIP_&$u^*Gd}eU`eDN4@`NPl)-|pQ527EhYfbKkW0<9 z*n-|}vFq4QfM-KT_9V-rOfl3#mC1Rp$RsD?2(FWLB*vonwSkw}&~(yQ-qGhWc$n>M zBb?X5)@c2#+onDu4f>LIdD=o^Jyia1%E1;kvNO}0{OTVkcvTtgEwf4uJ zpU(jaN~TIiWz{XN?|no(GfY``^0nh-5Ibf~?mSpLB|b70l#Rx?QggY1n~6h$0!rP5 z5iZuA<;_Y?gS#O1O3c(wg8Sr``Nwpv8mK~;bl6JTe42>P;8PG*I92a~-A5_B?B7fz z^rOnB>7!IJQP(TE)*{Oj4XRn{jygl+=X_NcPmC9b5T6a$EX0|b%jwoLysSp#YOahI zq=6RlRXjf4hsRcqzJplD*`z;>H$HbtWw2MX@n?vu91e;eOa9Nos={@EJi;Ijz_#O3 z-!^bj6Z%OyGFVHEi9v1nwGyaeVsqyXlpm^U;ul(NcPt+vXj};iO(#Rz)-8+G`2Yg= zDq7Hd3M}U{Nz40qTIqI^YoMUp#dd$r;MB`29|-27@$uhAd~FNa&v{- zGEGzVIZ>K{Ju-z@NrQT9dTTnCX0o=(u)U%QnKeI~>%|r_;^NWtoJv15L}yGE6KYzA(xWQdq4b(qz-kp|{6;b^1CQmB z{;QsC9-#xrP7_jifVDBj*g#(6FE_&FN-sT%_nnbBriE}Cy$@egb4r*n+$!J27GRYY z4so@Mgh}4r8l&ZM(SgF0OrT1zN6*LT2O3O_9t^sq)+IT^qk`xxo=LC$=9nU3h?YKu zg2XU|V6jR4Q;_Jk3U(N!3sHR4eg# zas>?@8pb%YyPR$sV>dDr3icyav2HRMXzmApcN}V;q=R3zt`mRE*rFv*=?i(y#lnTP zEgIjfSvt$UI$4goi3Fo&E0(9?srDwYka-+ctp&A0%*A8vT^fXuJBV5j6{7VR$bx=0 z9;Juc)3pjAGJV9uihslMA7Q)rH#{ovFUz=uN&A>JT`P{9@>lyUWs)wtg0#b2vvh>b z2C;dDkE~!N%`4LB=+!w0c1<%oqA2oX8Vx^xZ#y&^m^tgOVyET&ze1i8lDWol-I+ zf8IWe88usR>Pjt+ChRt6p+mwR1`DQlaws9EcOa-FG)We4IQ2P9mom=CWMxWHlySH; z@FI3of-H2-vXIK$luXhfoW@T*hm`5LJ(A4&rzvJ+zSp!o%K_~X*oT2$<+j3R`BM9I z=R2O!&w7*57o}|!t{O1YGIR#Xk_bYUlzIlt2+3%J(}A@Vo+p)Qw(OOrCzWV4$Da4X;hw6+O4mL-2lFO!)HA2t8c^fim$ZV{A;Hf=11Sgs> z8!selPc>r+qgM}(QW?|SwPIEF;=PO?G%V^&A{H5$+7u(T&#L&4VOo5M+qkvsLjv}G zlV%}i0o5_o`PuF=l|}N=HpWTcVj3;GQH>=P)(a_Cw*gEdgAh6M&Ay^34*4OY`x62A zaFr{Hs~&;VFAJy`ah_kPhrDg$FhV{(R35Z5jK7;c!~ZhG^O1$m70pvo9H= zc|8wi*bW(96U={wj}f><%@ku(_RxKGRxxucX+@?PS0_UR{o#`Y#sNb%6UBrV5BKc( zR1x(&;E+-GMz;+A(rkTcdC}-}w1)V{q3GPSGG;b;oJa1V`&G~8O z=wE0x9VKW??Pmi2xaGs^ zQtud-vB&ZD<187G?JZWucw>r1dIYWJOkszj`j0cj)Z9(qSt8kuZ6GV=At$zT)qxQu z<*=4%1bN2E5qce4H!up{_8_*Ad6JIJBlLV?tD}H3m(PXmnL|PrGnmTfIYOqb^}h?P zVSd)e>RnL?&mK1E!l>ko-8*=`wJ|5k;@Q>OJEqxsp|6FaTbeb+D!NMuZ%Ua(ojqD? zl>ickL;NP%<5B)Zd5ug(K8C?7Tlfn$LX*Xcclb4`FXn&SIKCCJ?rAYjh@@ZDU z+;)W&V2%S>8-7tc;ox;6Q>5`?d2vm%^{=CrICy%Ezm(t&LJpPgDC zYH+=FpVX;Z$M)RmAr4SWg^_19=2GffQU05tvwcXhT`aFLfMj+tK-&G|Sd*sEH9A=C zNpcK@s1=!K8&26h(k&8vB%Jk&9A{({K`aw-CX#wlGVipnIA|E}8Ij2-A8C6&PZxZw zy-CkDO-nTAG84BG^oRkOU0Bn!Xv{`sF$V=YEqPkv;sY73m`7K~(}UctG`3KfnHNGk z#f;4zC=T7S3+_+AzU&hZ^Gc{M`^v+-=oiKhJ@Bcx9<@DZp%&V=9v(nI=Yo0HL}z{F z*Syrg#m0-%yg4|?=Yc)gN8`S%Zn@_6N!;8Yen@M2R_@cZ-?O={>Ba=~3m=25oBP)w zR_EtGF7d6`PF5=8oL|ns;FHbV=O9dD>DqZm)Gn%`ERkLl3@j!@k&qoEgZ*2|qf$jo zi`6FP@Y;$x-%j>6B0dN+qs?TgdOMr{X4~qT&c^KX5R#z&eF%2ygnV79Igu-1%wwxz zK0Dgy3Sh`^CUP{8`b0W}_lC4RbSfbchfVYB8??SHMKY}eU)-0fnDIv17?P2*QO0p6 zM>D|UwCk$G#fKv1&{%iERr-EAwzu$Eh*YQK(H?0aT@QBgrUi3k%}MQx5xjB8*R7-) z$CbyBS4~F4=bKW+AwJ4|Lt=hIZTfYH@VTY^47ER_`ZiwW&_Eq+URjHT-1j1w^-=nT ziCm~Caf<^{nreI;;@sfw)Mmq+!EIN*hnT6r4NUZk#6fXR?Oq=DY^q00FfiY|)Rh>f zhg#v%BxIYML`7jfnnjE@4U{P#vJ<+ZVM01zd4;s*r(+a?m==<0E!iY}?v#23n@5N+ z%^caUWYR#fc>9wOVYm&KwY5)iRnq6*ykN*GP6BMzWL45dtanZ4M@&CTRi`Me zDif>2_PJPvHkXL%;tstHb#0uSSpS<}UBn=d(^z#?CaluE)+y^kW$@VED zrM_|zef{!zWIxQ@wC5LDWmR3^Vhb1-YBYEK(VxoIX z;m}}7M`z{>%ks&J#Y>7D8Rp$ZYV88s4|3j^qwVJvvqrfAQve-RBy9A24Z7rz?&BbXUH1YH|eN@5eQmVfL6wE`2Ytt8`Z_yHsDcZq~ zE?jM|Cl?f+OtBzl>0iz9unu4!;FzTrQk%6&q?YfHFatDO%Tu#=C~3wn^PcDJ&jg9L zs8Deh>4O|HD`ln2OiC0jER2<;ZstPJHrnZyy`h-St9<~>kv1}wqR=`{Xv%iF3`(t! zRZXq-r-xdgK3t8S3d0Y)lNnnx22ztMg>?3@rqZgl$^%<-bLUh6%D(%NCn>a@@*Bv+ z(zJGaqQ(>;{oF^`0gv55Ujtzc!EI_H&MF=;W^2a2jG||}HCg3rOL2RLRewhBwp^-5 zqzGo-#V&KU!RScXhv==z@@YP~xSFAD%IegUvLBly=#?d>$}%*Md;;W#>h8xV5Us@#O+< zjqZj>XJeLV?l~h+8lQbDL`y48wXm}ir+#V?JM7Ovy_%amp2oC4VN&7UosNGBq=sr& z2KYW{{ zlZX9#9BD;bqMAbTl}3$CtheMEHhWJDt+Ru%!dhy^uo-bwCbG1 zWSB*dA>MH;^DaNHCwXF_o7-1WRH!1mQy$kj@~sdvTd1>cvhY%|6^YH8?J-_1mL=Qz zt;?ybvF1k{m^EwJZZ=5Qt+TkZYIerX@}1v>iRRNE>&sY+viBOF%vNhg-^;?TU8C-? zgT#kC>b@8+@=j7D+oNkSDpOsgMJCB|-$mG2L}Lo;Ymly`nA*Z@k|_*3y?u>%A0J;C zz|Id->$nO=r}X117$1Cw&=}*qM22!ZbHIv5flbgNaj6owUt*|OXC{FS>(*^$@lzjR zsqseJ4b_R!z{eK$(skQ6ZQC}uroVstCF`&xF|ce{w`1)k8#nEgd%>mK_#BI(ShH@h zzkl;UGO%skW{Qyt6gD@|knDtvZ``QvweO1d7E$^(knyRMtZH+&Hf4n8KDeIVJ-P-F z63FZWEZVjalPL~iWFf3=X3?g?8w=l_YHh+^8EnPP7*P_0VAY`S%w9(fl&MtbTg_$kJUu}MwCXW>@kPIBgulg4N;Ub ze9L9KDeYGB;)C$L0GY3)i`dj6{gMm5SznPZn15pGK7uirb%UJalLfZ0&QhN&H%YFkIQBhq3JQ|WWrkL^{}-a|(xbuop`@ndf4 zbi2K6qsSP8KBL!O=MJ2achVIKU}^~6QQP|WMRPoQxz;f^aZZj{!vr~yZf2FR=}dqy@f|-4lT}$^xGol@KFunS<_YkZ z878}`E!%?>i`%10ibPgqZSKs8kRZbLBWzLj^$6&vWO(JPKQ(ek+{DVUCgrO&yZL}; z4OK7I`uMiPwd^|fu_d;!QFqyTb4eEoVoMfdx-{EQ!|-A9c3)d*lv{?I;*0MV*tuJJ zeoulfpz|i?#6Lx5i>%?0DK~=Y@oEi$%sJ@l#Z7JG zXoF3#J(6sg306czyq-j=kkPOyWU-5Nd*8$d((W(aWJ53Y&)Bpx>{f8&y?yaUdoVN@ z__jg=6MO(u`H*-0O~h-U9#b)wzV z%^%rAYvhbNH|E=Nbhh1ts*9m=L^r^Hi_T8u^1KoffFd@-mXEvb>WCe8QmmXFy z^LaEn5788~`S!5>{8T4?H77L=x{S=yP8L&Mdv9w=qzw$?9J9sWe2%uoIfFZCAvgoo z>E+^CWx0wo-o>t9{FsRV3zTJ%o#B-s*fcVJG$ndvcM#7bcKbe$y%nTQemWFI?^A{O zaAsRKJ1(jgO}3b~J}MKuN914XX*9I&ertyrT3_p_@@1%XS^r|F>NTNdj6f`pYmF#s zi*O-YCK_weSlZJwkj7_%p#D|K}6%)P>-@JeU1jsDl?2vkQ+Y*>t!lGLM%bl z#G1B_&Co-rTQ`bZg?=!J;K@wLaYQe;l~qUxKy|`ApK2@@*0o zqx7vX3fM`nR_O1mB6F9hv6C4&aX4E7&c8HC zXgkuPL$86JS#mgy(MMe~`iBqx(8#rE4n=C#^pd_rOuA~2_3izk&63L`6J^uJ)uD+B zMkR`$(G+{Htwdz(R(u%Q2Sa#9lBGfMZ)i|bz8Jek+S<6SEHl_)741qgt7#r>2)c06 zTj%zrHF|Qo+cB4YW8Bz&MYAIlj~rnpf1;@BQP@JZvcL$3er$29QfOI%B|gmzS+3Cs ziSjRA@yYm!1{T=T7OYjMGm<`%P6$b+fs0yQQb)UhShPw7n9PQlS=g)SCqSg%5hC|+ zgBIxtpo6qDebW*soq$xR#Q4Rb{h~BgL^_>Voww{qSPM(f7E`vf>W%xAv)3UIDXWql zS{Km#JSa_G&eQixA%_ra7fTRv+Q~k>+W=>u>8nz(81yl@3A+*4#1IFezaEQWpbKz zLW_acW31G*M*rZ(a%}q`L-Xe;%~o9=ursF?!9+y{j#&a)rctCh-i~Dhx=4KSM=ueG zV?$%)>ZY)04LADEu+SXVtd=YVchgE|%C4R(-uSH}A}M_B2qB_x9p%zYlj&8CZRuu? zpq|>Nk22qMMjlQ2Og~*oX17(QK`C%@_!hY&-=rF{~QuY*;kR`3CC6~GGi$dx$h+h9>mWlabkD;K2a`9S)n22i$n=uRT5=qTG_$5iqp=T)y=G5 zR!XiI@>iVa9hJVIFHtlfUm~IPS)Zw!= zag~1F*@_=tLd*ogm8%KdK-^Wzb_ zzR6^)H4m zPL?bEDol2k6DOfgRC z&R+h5QB_VI4$&}rYa+NR+mm6kBxpJeeVuf3+46iE#f%(761ubP9qbJ6FRR4Kr;Vq@ z4aA)RqW+p~DE1Z5K1~&QMbiYP-PL+-2SXVOU*ozH|e8_}>PVV9jW6G>TRK56jzK%LADQaq57@pb5`g9{!CNj^q4T8sc1HuPASs~R5;1CSFmie zOYfk(;Fn8G%6#ZuaT}JFyV{gpJ+f5HQTlQsh0uCydT8E$(zf;yuQFI9QG&irPo+Zs zOt7PwFCsCn=SmY-*NfCtUvoO-c%Q_!kzcQ$Q@84y3+BqlSX5qYan9pTXL`yg6JEZQ zRnYlM+LSRv8)(jl0vJV<-iN`WS^R1ihwAfrs$fo%WwYz6SsfINN`)<9JwBZkLeRlG w_)~qpXLw#4fk!&u91*#jfvma0ceLy?TJ+k&QeSv2fZ;gGF=~nWfy+w&AEZ)>*Z=?k literal 0 HcmV?d00001 diff --git a/po/nl.po b/po/nl.po new file mode 100644 index 0000000..d029f81 --- /dev/null +++ b/po/nl.po @@ -0,0 +1,3100 @@ +# Dutch translations for pwdutils. +# This file is distributed under the same license as the pwdutils package. +# +# Berichtvertalingen die met ### beginnen zijn in feite debug-meldingen +# en de bijbehorende msgids zouden niet in dit bestand moeten voorkomen. +# +# Benno Schulenberg , 2010. +msgid "" +msgstr "" +"Project-Id-Version: pwdutils-3.2.10\n" +"Report-Msgid-Bugs-To: kukuk@thkukuk.de\n" +"POT-Creation-Date: 2011-05-10 16:46+0200\n" +"PO-Revision-Date: 2010-07-06 10:49+0200\n" +"Last-Translator: Benno Schulenberg \n" +"Language-Team: Dutch \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Lokalize 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" + +#: lib/authentication.c:46 src/passwd.c:840 +#, c-format +msgid "%s: PAM Failure, aborting: %s\n" +msgstr "%s: PAM-fout -- gestopt: %s\n" + +#: lib/authentication.c:100 +#, c-format +msgid "Enter login(%s) password:" +msgstr "Geef het wachtwoord voor %s:" + +#: lib/call_script.c:68 src/vipw.c:89 +#, c-format +msgid "Cannot fork: %s\n" +msgstr "Kan geen nieuw proces starten: %s\n" + +#: lib/call_script.c:76 +#, c-format +msgid "waitpid (%d) failed: %s\n" +msgstr "waitpid(%d) is mislukt: %s\n" + +#: lib/check_name.c:70 +#, c-format +msgid "Can't compile regular expression: %s\n" +msgstr "Kan reguliere expressie niet compileren: %s\n" + +#: lib/chown_dir_rec.c:54 lib/copy_dir_rec.c:147 lib/group.c:389 +#: lib/user.c:495 lib/user.c:759 src/grpck.c:277 src/grpck.c:654 +#: src/pwck.c:284 src/pwck.c:554 src/pwck.c:916 src/pwconv.c:206 +#: src/useradd.c:564 src/useradd.c:1036 src/useradd.c:1111 src/vipw.c:295 +#, c-format +msgid "Cannot change owner/group for `%s': %s\n" +msgstr "Kan groep of eigenaar van '%s' niet wijzigen: %s\n" + +#: lib/copy_dir_rec.c:77 lib/group.c:369 lib/user.c:475 lib/user.c:739 +#: src/grpck.c:259 src/grpck.c:634 src/pwck.c:266 src/pwck.c:536 +#: src/pwck.c:896 src/pwconv.c:198 src/useradd.c:547 src/usermod.c:543 +#: src/vipw.c:189 +#, c-format +msgid "Can't create `%s': %m\n" +msgstr "Kan '%s' niet aanmaken: %m\n" + +#: lib/copy_dir_rec.c:99 +#, c-format +msgid "Cannot create directory `%s': %s\n" +msgstr "Kan map '%s' niet aanmaken: %s\n" + +#: lib/copy_dir_rec.c:113 lib/copy_dir_rec.c:199 lib/group.c:378 +#: lib/user.c:484 lib/user.c:748 src/grpck.c:267 src/grpck.c:643 +#: src/pwck.c:274 src/pwck.c:544 src/pwck.c:905 src/pwconv.c:215 +#: src/useradd.c:554 src/useradd.c:1046 src/useradd.c:1117 src/vipw.c:287 +#, c-format +msgid "Cannot change permissions for `%s': %s\n" +msgstr "Kan de toegangsrechten van '%s' niet wijzigen: %s\n" + +#: lib/copy_dir_rec.c:138 +#, c-format +msgid "Cannot create symlink `%s': %s\n" +msgstr "Kan symbolische koppeling '%s' niet maken: %s\n" + +#: lib/copy_dir_rec.c:185 src/vipw.c:230 src/vipw.c:238 +#, c-format +msgid "Cannot copy `%s': %s\n" +msgstr "Kan '%s' niet kopiëren: %s\n" + +#: lib/copy_dir_rec.c:215 +#, c-format +msgid "Warning: ignoring `%s', not a regular file\n" +msgstr "" + +#: lib/copy_xattr.c:51 lib/copy_xattr.c:69 +#, c-format +msgid "Cannot get attributes for `%s': %m\n" +msgstr "Kan eigenschappen van '%s' niet bepalen: %m\n" + +#: lib/copy_xattr.c:93 lib/copy_xattr.c:113 +#, c-format +msgid "Cannot get attribute %s of `%s': %m\n" +msgstr "Kan eigenschap %s van '%s' niet bepalen: %m\n" + +#: lib/copy_xattr.c:127 +#, c-format +msgid "SELinux not enabled, ignore attribute %s for `%s'.\n" +msgstr "" +"SELinux is niet ingeschakeld; eigenschap %s voor '%s' wordt genegeerd.\n" + +#: lib/copy_xattr.c:133 +#, c-format +msgid "Cannot set attribute %s for `%s': %m\n" +msgstr "Kan eigenschap %s van '%s' niet instellen: %m\n" + +#: lib/copy_xattr.c:154 +#, c-format +msgid "%s: Can't get context for `%s'" +msgstr "%s: Kan context van '%s' niet bepalen" + +#: lib/copy_xattr.c:161 +#, c-format +msgid "%s: Can't set context for `%s'" +msgstr "%s: Kan context voor %s niet instellen" + +#: lib/get_ldap_password.c:39 src/chpasswd.c:224 src/chsh.c:516 +#: src/passwd.c:881 +#, c-format +msgid "Enter LDAP Password:" +msgstr "Geef het LDAP-wachtwoord:" + +#: lib/group.c:305 src/groupadd.c:506 src/groupdel.c:365 src/grpck.c:820 +#, c-format +msgid "Cannot lock group file: already locked.\n" +msgstr "Kan groepsbestand niet vergrendelen: het is al vergrendeld.\n" + +#: lib/group.c:334 lib/group.c:409 lib/user.c:440 lib/user.c:514 +#: lib/user.c:704 lib/user.c:778 src/grpck.c:227 src/grpck.c:294 +#: src/grpck.c:599 src/grpck.c:674 src/pwck.c:234 src/pwck.c:301 +#: src/pwck.c:571 src/pwck.c:861 src/pwck.c:936 src/useradd.c:582 +#, c-format +msgid "Can't open `%s': %m\n" +msgstr "Kan '%s' niet openen: %m\n" + +#: lib/group.c:340 lib/user.c:446 lib/user.c:710 src/grpck.c:233 +#: src/grpck.c:605 src/grpunconv.c:225 src/pwck.c:240 src/pwck.c:510 +#: src/pwck.c:867 src/pwconv.c:224 src/pwunconv.c:172 src/useradd.c:538 +#: src/vipw.c:249 src/vipw.c:258 src/vipw.c:272 +#, c-format +msgid "Can't stat `%s': %m\n" +msgstr "Kan status van '%s' niet opvragen: %m\n" + +#: lib/group.c:435 lib/group.c:478 lib/group.c:492 lib/user.c:540 +#: lib/user.c:591 lib/user.c:605 lib/user.c:803 lib/user.c:873 src/grpck.c:703 +#: src/pwck.c:965 +#, c-format +msgid "Error while writing `%s': %m\n" +msgstr "Fout bij schrijven van '%s': %m\n" + +#: lib/group.c:503 +#, c-format +msgid "Group not found (and not deleted): %s\n" +msgstr "Groep niet gevonden (en niet verwijderd): %s\n" + +#: lib/group.c:511 lib/group.c:540 lib/user.c:623 lib/user.c:653 +#: lib/user.c:883 lib/user.c:912 src/grpck.c:715 src/grpck.c:723 +#: src/pwck.c:977 src/pwck.c:985 +#, c-format +msgid "Error while closing `%s': %m\n" +msgstr "Fout bij sluiten van '%s': %m\n" + +#: lib/group.c:520 lib/user.c:632 lib/user.c:893 +#, c-format +msgid "Error while writing to disk `%s': %m\n" +msgstr "Fout bij schrijven naar schijf '%s': %m\n" + +#: lib/group.c:530 lib/user.c:642 lib/user.c:903 +#, c-format +msgid "Error while syncing to disk `%s': %m\n" +msgstr "Fout bij synchroniseren naar schijf '%s': %m\n" + +#: lib/group.c:547 lib/user.c:661 lib/user.c:919 src/grpck.c:472 +#: src/grpck.c:730 src/pwck.c:468 src/pwck.c:734 src/pwck.c:992 +#, c-format +msgid "Warning: cannot create backup file `%s': %m\n" +msgstr "Waarschuwing: kan reservekopiebestand '%s' niet aanmaken: %m\n" + +#: lib/group.c:552 lib/user.c:666 lib/user.c:923 +#, c-format +msgid "Error while renaming `%s': %m\n" +msgstr "Fout tijdens hernoemen van '%s': %m\n" + +#: lib/group.c:693 lib/user.c:1094 +#, c-format +msgid "LDAP information update failed: %s\n" +msgstr "Bijwerken van LDAP-informatie is mislukt: %s\n" + +#: lib/group.c:702 +#, c-format +msgid "Cannot modify/add NIS group entries.\n" +msgstr "Kan NIS-groepsitems niet toevoegen/aanpassen.\n" + +#: lib/group.c:707 lib/user.c:1103 +#, c-format +msgid "Unknown service %d.\n" +msgstr "Onbekende dienst %d.\n" + +#: lib/libldap.c:1364 lib/libldap.c:1429 lib/libldap.c:1484 lib/libldap.c:1610 +#: lib/libldap.c:1752 lib/libldap.c:1992 +#, c-format +msgid "Authentication failure.\n" +msgstr "Authenticatie is mislukt.\n" + +#: lib/libldap.c:1760 +#, c-format +msgid "Cannot find base ou for new users.\n" +msgstr "Kan geen basis-OU voor nieuwe gebruikers vinden.\n" + +#: lib/libldap.c:1763 +#, c-format +msgid "Base DN for user account `%s' is \"%s\".\n" +msgstr "Basis-DN voor gebruiker '%s' is \"%s\".\n" + +#: lib/libldap.c:2000 +#, c-format +msgid "Cannot find base ou for new groups.\n" +msgstr "Kan geen basis-OU voor nieuwe groepen vinden.\n" + +#: lib/libldap.c:2003 +#, c-format +msgid "Base DN for group `%s' is \"%s\".\n" +msgstr "Basis-DN voor groep '%s' is \"%s\".\n" + +#: lib/logging.c:65 +#, c-format +msgid "" +"Cannot open logging plugin:\n" +"%s\n" +msgstr "" +"Kan logboek-plugin niet openen:\n" +"%s\n" + +#: lib/logging.c:81 lib/logging.c:99 +#, c-format +msgid "" +"Cannot find symbol `%s':\n" +"%s\n" +msgstr "" +"Kan symbool '%s' niet vinden:\n" +"%s\n" + +#: lib/logging.c:140 +#, c-format +msgid "Error setting up logging subsystem!\n" +msgstr "Fout tijdens initialisatie van logboeksubsysteem!\n" + +#: lib/parse_crypt_arg.c:87 +#, c-format +msgid "Can't open %s for reading: %s\n" +msgstr "Kan %s niet openen om te lezen: %s\n" + +#: lib/parse_crypt_arg.c:95 +#, c-format +msgid "Unable to obtain entropy from %s\n" +msgstr "Kan geen entropie verkrijgen uit %s\n" + +#: lib/parse_crypt_arg.c:110 +#, c-format +msgid "Unable to generate a salt, check your crypt settings.\n" +msgstr "Kan geen salt genereren; controleer uw cryptografie-instellingen.\n" + +#: lib/parse_crypt_arg.c:144 +#, c-format +msgid "No support for blowfish compiled in, using MD5.\n" +msgstr "Er is geen ondersteuning voor blowfish; MD5 wordt gebruikt.\n" + +#: lib/parse_crypt_arg.c:149 +#, c-format +msgid "No support for %s available, using DES.\n" +msgstr "Er is geen ondersteuning voor %s; DES wordt gebruikt.\n" + +#: lib/passwd_nisplus.c:306 +#, c-format +msgid "Could not determine hostname!\n" +msgstr "Kan hostnaam niet achterhalen!\n" + +#: lib/passwd_nisplus.c:322 +#, c-format +msgid "Can't find %s's secret key\n" +msgstr "Kan geheime sleutel van '%s' niet vinden.\n" + +#: lib/passwd_nisplus.c:338 lib/passwd_nisplus.c:359 +#, c-format +msgid "Could not get public key for %s!\n" +msgstr "Kan publieke sleutel van '%s' niet verkrijgen!\n" + +#: lib/passwd_nisplus.c:348 +#, c-format +msgid "Could not determine the NIS+ root server!\n" +msgstr "Kan de NIS+-hoofdserver niet bepalen!\n" + +#: lib/passwd_nisplus.c:366 +#, c-format +msgid "Could not create conversion key!\n" +msgstr "Kan geen conversiesleutel aanmaken!\n" + +#: lib/passwd_nisplus.c:378 +#, c-format +msgid "DES encryption failure\n" +msgstr "DES-versleuteling is mislukt\n" + +#: lib/passwd_nisplus.c:390 +#, c-format +msgid "rpc.nispasswd not running on %s?\n" +msgstr "rpc.nispasswd draait niet op %s?\n" + +#: lib/passwd_nisplus.c:411 +#, c-format +msgid "ERROR: password incorrect, try again\n" +msgstr "FOUT: onjuist wachtwoord; probeer het opnieuw\n" + +#: lib/passwd_nisplus.c:413 lib/passwd_nisplus.c:481 +#, c-format +msgid "" +"ERROR: %s\n" +" password not changed\n" +msgstr "" +"FOUT: %s\n" +" Wachtwoord is niet gewijzigd.\n" + +#: lib/passwd_nisplus.c:429 lib/passwd_nisplus.c:456 +#, c-format +msgid "DES decryption failure!\n" +msgstr "DES-ontsleuteling is mislukt!\n" + +#: lib/passwd_nisplus.c:514 +#, c-format +msgid "ERROR: Unknown error, don't know what happened\n" +msgstr "FOUT: onbekende fout; geen idee wat er gebeurd is\n" + +#: lib/passwd_nisplus.c:519 +#, c-format +msgid "NIS+ password information changed for %s\n" +msgstr "NIS+-wachtwoordinformatie voor %s is gewijzigd.\n" + +#: lib/passwd_nisplus.c:521 +#, c-format +msgid "NIS+ credential information changed for %s\n" +msgstr "NIS+-authenticatie-informatie voor %s is gewijzigd.\n" + +#: lib/passwd_nisplus.c:590 +#, c-format +msgid "NIS+ passwd table not found: %s\n" +msgstr "NIS+-wachtwoordentabel is niet gevonden: %s\n" + +#: lib/passwd_nisplus.c:606 +#, c-format +msgid "User not found in NIS+ table.\n" +msgstr "Gebruiker niet gevonden in NIS+-tabel.\n" + +#: lib/print_error.c:30 src/rpasswd.c:120 src/rpasswdd.c:139 +#, c-format +msgid "Try `%s --help' or `%s --usage' for more information.\n" +msgstr "Typ '%s --help' of '%s --usage' voor meer informatie.\n" + +#: lib/print_version.c:31 src/rpasswd.c:73 src/rpasswdd.c:90 +#, c-format +msgid "" +"Copyright (C) %s Thorsten Kukuk.\n" +"This is free software; see the source for copying conditions. There is NO\n" +"warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n" +msgstr "" +"Copyright (C) %s Thorsten Kukuk.\n" +"Dit is vrije software; zie de programmatekst voor de kopieervoorwaarden.\n" +"Er is GEEN garantie, zelfs niet voor VERKOOPBAARHEID of GESCHIKTHEID\n" +"VOOR EEN BEPAALD DOEL.\n" + +#: lib/remove_dir_rec.c:74 +#, c-format +msgid "Cannot remove file `%s': %s\n" +msgstr "Kan bestand '%s' niet verwijderen: %s\n" + +#: lib/remove_dir_rec.c:83 +#, c-format +msgid "Cannot remove directory `%s': %s\n" +msgstr "Kan map '%s' niet verwijderen: %s\n" + +#: lib/selinux_utils.c:80 +#, c-format +msgid "Couldn't get security context `%s': %s\n" +msgstr "Kan beveiligingscontext '%s' niet verkrijgen: %s\n" + +#: lib/selinux_utils.c:88 +#, c-format +msgid "Couldn't get default security context: %s\n" +msgstr "Kan de standaard beveiligingscontext niet verkrijgen: %s\n" + +#: lib/selinux_utils.c:97 +#, c-format +msgid "Couldn't set default security context to `%s': %s\n" +msgstr "Kan de standaard beveiligingscontext niet instellen op '%s': %s\n" + +#: lib/selinux_utils.c:117 +#, c-format +msgid "Couldn't reset default security context to `%s': %s\n" +msgstr "Kan de standaard beveiligingscontext niet terugzetten op '%s': %s\n" + +#: lib/user.c:81 +#, c-format +msgid "Can't find the NIS master server: %s\n" +msgstr "Kan de NIS-hoofdserver niet vinden: %s\n" + +#: lib/user.c:88 +#, c-format +msgid "rpc.yppasswdd not running on NIS master %s.\n" +msgstr "rpc.yppasswdd draait niet op NIS-hoofdserver %s.\n" + +#: lib/user.c:94 +#, c-format +msgid "rpc.yppasswdd running on illegal port on NIS master %s.\n" +msgstr "rpc.yppasswdd draait op ongeldige poort op NIS-hoofdserver %s.\n" + +#: lib/user.c:411 src/groupmod.c:434 src/pwck.c:1082 src/useradd.c:1630 +#: src/userdel.c:569 src/usermod.c:1373 +#, c-format +msgid "Cannot lock password file: already locked.\n" +msgstr "Kan het wachtwoordbestand niet vergrendelen: het is al vergrendeld.\n" + +#: lib/user.c:615 +#, c-format +msgid "User not found (and not deleted): %s\n" +msgstr "Gebruiker niet gevonden (en niet verwijderd): %s\n" + +#: lib/user.c:858 +#, c-format +msgid " Error while writing `%s': %m\n" +msgstr " Fout tijdens schrijven van '%s': %m\n" + +#: lib/user.c:982 +#, c-format +msgid "Error while changing the NIS data.\n" +msgstr "Fout tijdens wijzigen van NIS-gegevens.\n" + +#: lib/user.c:991 +#, c-format +msgid "Error while changing the NIS+ data.\n" +msgstr "Fout tijdens wijzigen van NIS+-gegevens.\n" + +#: src/chage.c:56 +#, c-format +msgid "" +"Usage: %s [-D binddn][-P path][-m mindays][-M maxdays][-d lastday][-I " +"inactive][-E expiredate][-W warndays] user\n" +msgstr "" +"Gebruik: %s [-D bindnaam] [-P pad] [-m minimaal_aantal_dagen] [-M " +"maximaal]\n" +" [-d laatste_dag] [-I inactiviteitstijd] [-E verloopdag]\n" +" [-W waarschuwingsdagen] gebruiker\n" + +#: src/chage.c:58 +#, c-format +msgid " %s -l user\n" +msgstr " %s -l gebruiker\n" + +#: src/chage.c:66 +#, c-format +msgid "" +"%s - change user password expiry information\n" +"\n" +msgstr "" +"%s - de verloopstijden van wachtwoorden aanpassen\n" +"\n" + +#: src/chage.c:70 src/chfn.c:112 src/chpasswd.c:70 src/chsh.c:65 +#: src/gpasswd.c:94 src/groupadd.c:64 src/groupdel.c:64 src/groupmod.c:63 +#: src/passwd.c:401 src/useradd.c:67 src/userdel.c:68 src/usermod.c:67 +msgid " -D binddn Use dn \"binddn\" to bind to the LDAP directory\n" +msgstr "" +" -D bindnaam deze naam gebruiken om met LDAP-directory te verbinden\n" + +#: src/chage.c:73 src/chfn.c:115 src/chpasswd.c:73 src/chsh.c:68 +#: src/passwd.c:403 src/pwconv.c:54 src/pwunconv.c:54 +msgid " -P path Search passwd and shadow file in \"path\"\n" +msgstr " -P pad 'passwd'- en 'shadow'-bestanden in dit pad zoeken\n" + +#: src/chage.c:76 src/chfn.c:88 src/chfn.c:123 src/chpasswd.c:79 src/chsh.c:74 +#: src/gpasswd.c:93 src/groupmod.c:77 src/passwd.c:400 src/usermod.c:91 +msgid " --service srv Use nameservice 'srv'\n" +msgstr " --service NS deze naamservice gebruiken\n" + +#: src/chage.c:77 src/chfn.c:86 src/chfn.c:124 src/chsh.c:75 +msgid " -q, --quiet Don't be verbose\n" +msgstr " -q, --quiet geen gedetailleerde uitvoer produceren\n" + +#: src/chage.c:78 src/chfn.c:89 src/chfn.c:125 src/chpasswd.c:80 src/chsh.c:76 +#: src/expiry.c:52 src/groupadd.c:74 src/groupdel.c:70 src/groupmod.c:78 +#: src/grpck.c:68 src/grpconv.c:43 src/grpunconv.c:63 src/newgrp.c:66 +#: src/pwck.c:68 src/pwconv.c:56 src/pwunconv.c:56 src/useradd.c:92 +#: src/userdel.c:74 src/usermod.c:96 src/vipw.c:72 +msgid " --help Give this help list\n" +msgstr " --help deze hulptekst tonen en stoppen\n" + +#: src/chage.c:79 src/chfn.c:90 src/chfn.c:126 src/chpasswd.c:81 src/chsh.c:77 +#: src/expiry.c:53 src/groupdel.c:71 src/grpck.c:69 src/grpconv.c:44 +#: src/grpunconv.c:64 src/newgrp.c:67 src/pwck.c:69 src/pwconv.c:57 +#: src/pwunconv.c:57 src/userdel.c:75 src/vipw.c:73 +msgid " -u, --usage Give a short usage message\n" +msgstr " -u, --usage een korte gebruikssamenvatting tonen\n" + +#: src/chage.c:80 src/chfn.c:91 src/chfn.c:127 src/chpasswd.c:82 src/chsh.c:78 +#: src/expiry.c:54 src/groupadd.c:76 src/groupdel.c:72 src/groupmod.c:80 +#: src/grpck.c:70 src/grpconv.c:45 src/grpunconv.c:65 src/newgrp.c:68 +#: src/pwck.c:70 src/pwconv.c:58 src/pwunconv.c:58 src/useradd.c:94 +#: src/userdel.c:76 src/usermod.c:98 src/vipw.c:74 +msgid " -v, --version Print program version\n" +msgstr " -v, --version programmaversie tonen en stoppen\n" + +#: src/chage.c:81 src/chfn.c:94 src/chfn.c:130 src/chpasswd.c:83 src/chsh.c:81 +#: src/passwd.c:409 +msgid "Valid services are: files, nis, nisplus, ldap\n" +msgstr "Geldige diensten zijn: files, nis, nisplus, ldap\n" + +#: src/chage.c:109 +#, c-format +msgid "Minimum:\t%ld\n" +msgstr "Minimum: %ld\n" + +#: src/chage.c:110 +#, c-format +msgid "Maximum:\t%ld\n" +msgstr "Maximum: %ld\n" + +#: src/chage.c:111 +#, c-format +msgid "Warning:\t%ld\n" +msgstr "Waarschuwing: %ld\n" + +#: src/chage.c:112 +#, c-format +msgid "Inactive:\t%ld\n" +msgstr "Inactief: %ld\n" + +#: src/chage.c:113 +#, c-format +msgid "Last Change:\t\t" +msgstr "Laatst gewijzigd: " + +#: src/chage.c:115 +#, c-format +msgid "Unknown, password is forced to change at next login\n" +msgstr "" +"Onbekend; wachtwoord dient gewijzigd te worden bij volgende aanmelding\n" + +#: src/chage.c:117 src/chage.c:123 src/chage.c:129 src/chage.c:135 +#, c-format +msgid "Never\n" +msgstr "Nooit\n" + +#: src/chage.c:120 +#, c-format +msgid "Password Expires:\t" +msgstr "Wachtwoord verloopt: " + +#: src/chage.c:126 +#, c-format +msgid "Password Inactive:\t" +msgstr "Inactiviteitsperiode van account (in dagen)" + +#: src/chage.c:133 +#, c-format +msgid "Account Expires:\t" +msgstr "Account vervalt: " + +#: src/chage.c:147 +msgid "Minimum Password Age" +msgstr "Minimumleeftijd voor wachtwoord (in dagen)" + +#: src/chage.c:154 src/chage.c:170 src/chage.c:186 +#, c-format +msgid "Input is no integer value\n" +msgstr "Invoer is geen geheel getal\n" + +#: src/chage.c:156 src/chage.c:172 src/chage.c:188 +#, c-format +msgid "Negative numbers are not allowed as input (except -1)\n" +msgstr "Negatieve getallen als invoer zijn niet toegestaan (behalve -1)\n" + +#: src/chage.c:163 +msgid "Maximum Password Age" +msgstr "Maximum leeftijd voor wachtwoord (in dagen)" + +#: src/chage.c:179 +msgid "Password Expiration Warning" +msgstr "Waarschuwingsdagen voor verlopen van wachtwoord" + +#: src/chage.c:195 +msgid "Password Inactive" +msgstr "Inactiviteitsperiode van account (in dagen)" + +#: src/chage.c:203 +msgid "Last Password Change (YYYY-MM-DD)" +msgstr "Datum van laatste wachtwoordwijziging (JJJJ-MM-DD)" + +#: src/chage.c:217 src/chage.c:237 +#, c-format +msgid "Invalid date\n" +msgstr "Ongeldige datum\n" + +#: src/chage.c:223 +msgid "Account Expiration Date (YYYY-MM-DD)" +msgstr "Vervaldatum van account (JJJJ-MM-DD)" + +#: src/chage.c:340 src/chfn.c:478 src/chsh.c:337 +#, c-format +msgid "Only root is allowed to specify another path\n" +msgstr "Alleen root mag een ander pad opgeven.\n" + +#: src/chage.c:370 src/chfn.c:439 src/chpasswd.c:171 src/chsh.c:320 +#: src/gpasswd.c:197 src/groupadd.c:376 src/groupdel.c:224 src/groupmod.c:300 +#: src/passwd.c:523 src/useradd.c:1403 src/userdel.c:454 src/usermod.c:978 +#, c-format +msgid "Service `%s' not supported.\n" +msgstr "Dienst '%s' wordt niet ondersteund.\n" + +#: src/chage.c:395 src/chfn.c:510 src/chpasswd.c:208 src/chsh.c:363 +#: src/chsh.c:370 src/expiry.c:247 src/gpasswd.c:230 src/groupadd.c:413 +#: src/groupdel.c:249 src/groupmod.c:333 src/grpck.c:806 src/grpconv.c:100 +#: src/grpunconv.c:197 src/newgrp.c:155 src/passwd.c:589 src/pwck.c:1068 +#: src/pwconv.c:170 src/pwunconv.c:144 src/rpasswd.c:491 src/rpasswdd.c:1339 +#: src/useradd.c:1511 src/userdel.c:479 src/usermod.c:1014 src/vipw.c:410 +#, c-format +msgid "%s: Too many arguments.\n" +msgstr "%s: Te veel argumenten.\n" + +#: src/chage.c:402 +#, c-format +msgid "%s: Do not include \"l\" with other flags\n" +msgstr "%s: Optie '-l' gaat niet samen met andere opties\n" + +#: src/chage.c:427 src/chfn.c:531 src/chsh.c:397 src/expiry.c:267 +#: src/gpasswd.c:265 src/groupadd.c:450 src/groupdel.c:278 src/groupmod.c:362 +#: src/passwd.c:656 src/useradd.c:1545 src/userdel.c:507 src/usermod.c:1048 +#, c-format +msgid "%s: Cannot determine your user name.\n" +msgstr "%s: Kan uw gebruikersnaam niet bepalen.\n" + +#: src/chage.c:446 src/chfn.c:566 src/chsh.c:431 src/userdel.c:527 +#, c-format +msgid "%s: User `%s' is not known to service `%s'.\n" +msgstr "%s: Gebruiker '%s' is niet bekend bij dienst '%s'.\n" + +#: src/chage.c:449 src/chfn.c:555 src/chfn.c:569 src/chsh.c:421 src/chsh.c:434 +#: src/passwd.c:675 src/passwd.c:696 src/userdel.c:530 +#, c-format +msgid "%s: Unknown user `%s'.\n" +msgstr "%s: Onbekende gebruiker '%s'.\n" + +#: src/chage.c:467 +#, c-format +msgid "Only an administrator is allowed to change aging information.\n" +msgstr "Alleen root mag verouderingsgegevens wijzigen.\n" + +#: src/chage.c:483 +#, c-format +msgid "This system does not support shadow accounts.\n" +msgstr "Het systeem ondersteunt geen schaduw-accounts.\n" + +#: src/chage.c:489 +#, c-format +msgid "This account does not have a shadow entry.\n" +msgstr "Dit account heeft geen schaduw-item.\n" + +#: src/chage.c:535 +#, c-format +msgid "You can only list your own aging information.\n" +msgstr "U kunt alleen uw eigen verouderingsinformatie inzien.\n" + +#: src/chage.c:542 src/expiry.c:306 src/passwd.c:1019 +#, c-format +msgid "%s: Failed to drop privileges: %s\n" +msgstr "%s: Het afgeven van rechten is mislukt: %s\n" + +#: src/chage.c:554 +#, c-format +msgid "No aging information available for %s.\n" +msgstr "Er is geen verouderingsinformatie beschikbaar voor %s.\n" + +#: src/chage.c:574 +#, c-format +msgid "Changing aging information for %s.\n" +msgstr "Aanpassen van verouderingsinformatie voor %s.\n" + +#: src/chage.c:580 src/chage.c:667 +#, c-format +msgid "Aging information not changed.\n" +msgstr "Verouderingsinformatie is niet gewijzigd.\n" + +#: src/chage.c:623 +#, c-format +msgid "Lastday is no date and no integer value >= -1\n" +msgstr "Laatste dag is geen datum en geen geheel getal >= -1.\n" + +#: src/chage.c:643 +#, c-format +msgid "Expiredate is no date and no integer value >= -1\n" +msgstr "Verloopdag is geen datum en geen geheel getal >= -1.\n" + +#: src/chage.c:652 +#, c-format +msgid "Error while parsing options.\n" +msgstr "Fout tijdens ontleden van opties.\n" + +#: src/chage.c:698 +#, c-format +msgid "Error while converting to shadow account.\n" +msgstr "Fout tijdens omzetten naar schaduw-account.\n" + +#: src/chage.c:716 +#, c-format +msgid "Error while changing aging information.\n" +msgstr "Fout tijdens aanpassen van verouderingsinformatie.\n" + +#: src/chage.c:726 +#, c-format +msgid "Aging information changed.\n" +msgstr "Verouderingsinformatie is gewijzigd.\n" + +#: src/chfn.c:71 +#, c-format +msgid "" +"Usage: %s [-f name] [-r room] [-w work_phone]\n" +" [-h home_phone] [-o other] [-q] [-u] [-v] [user]\n" +msgstr "" +"Gebruik: %s [-f volledige_naam] [-r kamernummer] [-w telefoon_werk]\n" +" [-h telefoon_thuis] [-o varia] [-q] [-u] [-v] [gebruiker]\n" + +#: src/chfn.c:79 src/chfn.c:109 +#, c-format +msgid "" +"%s - change user name and information\n" +"\n" +msgstr "" +"%s - gebruikersnaam en -informatie wijzigen\n" +"\n" + +#: src/chfn.c:81 src/chfn.c:117 +msgid " -f full-name Change your real name\n" +msgstr " -f naam uw echte naam wijzigen\n" + +#: src/chfn.c:82 +msgid " -r room Change your office room number\n" +msgstr " -r kamer uw werkkamernummer wijzigen\n" + +#: src/chfn.c:83 +msgid " -w work_phone Change your office phone number\n" +msgstr " -w nummer uw telefoonnummer op het werk wijzigen\n" + +#: src/chfn.c:84 +msgid " -h home_phone Change your home phone number\n" +msgstr " -h nummer uw telefoonnummer thuis wijzigen\n" + +#: src/chfn.c:85 +msgid " -o other Change the undefined portions of the GECOS field\n" +msgstr " -o varia andere delen van het GECOS-veld wijzigen\n" + +#: src/chfn.c:101 +#, c-format +msgid "" +"Usage: %s [-D binddn] [-P path] [-f name] [-o office] [-p office-phone]\n" +" [-h home-phone][-m other] [-q] [-u] [-v] [user]\n" +msgstr "" +"Gebruik: %s [-D bindnaam] [-P pad] [-f naam] [-o kamer] [-p telefoon_werk]\n" +" [-h telefoon_thuis] [-m varia] [-q] [-u] [-v] [gebruiker]\n" + +#: src/chfn.c:118 +msgid " -o office Change your office room number\n" +msgstr " -o kamer uw werkkamernummer wijzigen\n" + +#: src/chfn.c:119 +msgid " -p phone Change your office phone number\n" +msgstr " -p nummer uw telefoonnummer op het werk wijzigen\n" + +#: src/chfn.c:120 +msgid " -h home-phone Change your home phone number\n" +msgstr " -h nummer uw telefoonnummer thuis wijzigen\n" + +#: src/chfn.c:121 +msgid " -m other Change the undefined portions of the GECOS field\n" +msgstr " -m varia andere delen van het GECOS-veld wijzigen\n" + +#: src/chfn.c:165 +#, c-format +msgid "Enter the new value, or press ENTER for the default\n" +msgstr "" +"(Voer een nieuwe waarde in of druk op Enter voor de standaardwaarde.)\n" + +#: src/chfn.c:171 +msgid "Full Name" +msgstr "Volledige naam" + +#: src/chfn.c:173 +#, c-format +msgid "\tFull Name: %s\n" +msgstr "\tVolledige naam: %s\n" + +#: src/chfn.c:176 +msgid "Room Number" +msgstr "Kamernummer" + +#: src/chfn.c:178 +#, c-format +msgid "\tRoom Number: %s\n" +msgstr "\tKamernummer: %s\n" + +#: src/chfn.c:181 +msgid "Work Phone" +msgstr "Telefoon werk" + +#: src/chfn.c:183 +#, c-format +msgid "\tWork Phone: %s\n" +msgstr "\tTelefoon werk: %s\n" + +#: src/chfn.c:186 +msgid "Home Phone" +msgstr "Telefoon thuis" + +#: src/chfn.c:188 +#, c-format +msgid "\tHome Phone: %s\n" +msgstr "\tTelefoon thuis: %s\n" + +#: src/chfn.c:191 +msgid "Other" +msgstr "Varia" + +#: src/chfn.c:193 +#, c-format +msgid "\tOther: %s\n" +msgstr "\tVaria: %s\n" + +#: src/chfn.c:255 +#, c-format +msgid "%s: The characters '%s\"' are not allowed.\n" +msgstr "%s: De tekens '%s\"' zijn niet toegestaan.\n" + +#: src/chfn.c:261 src/chsh.c:204 +#, c-format +msgid "%s: Control characters are not allowed.\n" +msgstr "%s: Stuurtekens zijn niet toegestaan.\n" + +#: src/chfn.c:331 src/chsh.c:257 +#, c-format +msgid "%s: Don't know what I should do.\n" +msgstr "%s: Geen idee wat te doen.\n" + +#: src/chfn.c:377 src/chfn.c:395 src/chfn.c:407 src/chfn.c:451 src/chfn.c:460 +#: src/gpasswd.c:296 src/passwd.c:614 src/passwd.c:628 +#, c-format +msgid "%s: Permission denied.\n" +msgstr "%s: Toegang geweigerd.\n" + +#: src/chfn.c:586 src/chsh.c:451 src/passwd.c:712 +msgid "Unknown user context" +msgstr "Onbekende gebruikerscontext" + +#: src/chfn.c:588 +#, c-format +msgid "%s: %s is not authorized to change the finger information for %s.\n" +msgstr "" +"%s: %s is niet gerechtigd om de finger-informatie van %s te wijzigen.\n" + +#: src/chfn.c:601 +#, c-format +msgid "SELinux is in permissive mode, continuing.\n" +msgstr "SELinux is in gedoogmodus -- doorgegaan.\n" + +#: src/chfn.c:619 +#, c-format +msgid "You cannot change the finger information for `%s'.\n" +msgstr "U kunt de finger-informatie voor '%s' niet wijzigen.\n" + +#: src/chfn.c:626 +#, c-format +msgid "Changing finger information for %s.\n" +msgstr "Wijzigen van finger-informatie voor %s.\n" + +#: src/chfn.c:658 +#, c-format +msgid "%s: Invalid name: `%s'\n" +msgstr "%s: Ongeldige naam '%s'\n" + +#: src/chfn.c:666 +#, c-format +msgid "%s: Invalid room number: `%s'\n" +msgstr "%s: Ongeldig kamernummer '%s'\n" + +#: src/chfn.c:674 +#, c-format +msgid "%s: Invalid work phone: `%s'\n" +msgstr "%s: Ongeldig telefoonnummer '%s' voor werk\n" + +#: src/chfn.c:682 +#, c-format +msgid "%s: Invalid home phone: `%s'\n" +msgstr "%s: Ongeldig telefoonnummer '%s' voor thuis\n" + +#: src/chfn.c:690 +#, c-format +msgid "%s: `%s' contains illegal characters.\n" +msgstr "%s: '%s' bevat ongeldige tekens.\n" + +#: src/chfn.c:716 +#, c-format +msgid "Finger information not changed.\n" +msgstr "Finger-informatie is niet gewijzigd.\n" + +#: src/chfn.c:724 +#, c-format +msgid "Error while changing finger information.\n" +msgstr "Fout tijdens wijzigen van finger-informatie.\n" + +#: src/chfn.c:734 +#, c-format +msgid "Finger information changed.\n" +msgstr "Finger-informatie is gewijzigd.\n" + +#: src/chpasswd.c:59 +#, c-format +msgid "Usage: %s [-D binddn] [-P path] [-e] [-c des|md5|blowfish] [file]\n" +msgstr "" +"Gebruik: %s [-D bindnaam] [-P pad] [-e] [-c des|md5|blowfish] [bestand]\n" + +#: src/chpasswd.c:67 +#, c-format +msgid "" +"%s - update password entries in batch\n" +"\n" +msgstr "" +"%s - wachtwoorditems massaal aanpassen\n" +"\n" + +#: src/chpasswd.c:75 +msgid "" +" -c, --crypt Password should be encrypted with DES, MD5 or blowfish\n" +msgstr " -c, --crypt wachtwoord versleutelen met DES, MD5 of blowfish\n" + +#: src/chpasswd.c:77 +msgid " -e, --encrypted The passwords are in encrypted form\n" +msgstr " -e, --encrypted wachtwoorden zijn in versleutelde vorm\n" + +#: src/chpasswd.c:278 +#, c-format +msgid "%s: line %ld: missing new password\n" +msgstr "%s: regel %ld: nieuw wachtwoord ontbreekt\n" + +#: src/chpasswd.c:287 +#, c-format +msgid "%s: line %ld: unknown user %s\n" +msgstr "%s: regel %ld: onbekende gebruiker '%s'\n" + +#: src/chpasswd.c:318 src/gpasswd.c:425 +#, c-format +msgid "Cannot create salt for standard crypt" +msgstr "Kan geen salt genereren voor standaardversleuteling" + +#: src/chpasswd.c:334 src/gpasswd.c:460 +#, c-format +msgid "Cannot create salt for MD5 crypt" +msgstr "Kan geen salt genereren voor MD5-versleuteling" + +#: src/chpasswd.c:350 src/gpasswd.c:441 +#, c-format +msgid "Cannot create salt for blowfish crypt" +msgstr "Kan geen salt genereren voor blowfish-versleuteling" + +#: src/chpasswd.c:380 +#, c-format +msgid "%s: line %ld: cannot update password entry\n" +msgstr "%s: regel %ld: kan wachtwoorditem niet bijwerken\n" + +#: src/chpasswd.c:395 +#, c-format +msgid "%s: errors occurred, %ld passwords not updated\n" +msgstr "%s: er zijn fouten opgetreden; %ld wachtwoorden zijn niet bijgewerkt\n" + +#: src/chsh.c:54 +#, c-format +msgid "" +"Usage: %s [-D binddn] [-P path] [-s shell] [-l] [-q]\n" +" [--help] [--usage] [--version] [user]\n" +msgstr "" +"Gebruik: %s [-D bindnaam] [-P pad] [-s shell] [-l] [-q]\n" +" [--help] [--usage] [--version] [gebruiker]\n" + +#: src/chsh.c:62 +#, c-format +msgid "" +"%s - change login shell\n" +"\n" +msgstr "" +"%s - aanmeld-shell aanpassen\n" +"\n" + +#: src/chsh.c:70 +msgid " -l List allowed shells from /etc/shells\n" +msgstr " -l toegestane shells uit /etc/shells tonen\n" + +#: src/chsh.c:72 +msgid " -s shell Use 'shell' as new login shell\n" +msgstr " -s shell deze 'shell' als aanmeld-shell gebruiken\n" + +#: src/chsh.c:109 +#, c-format +msgid "No known shells.\n" +msgstr "Geen bekende shells.\n" + +#: src/chsh.c:177 +#, c-format +msgid "%s: Shell must be a full path name.\n" +msgstr "%s: shell moet een volledige padnaam zijn.\n" + +#: src/chsh.c:183 +#, c-format +msgid "%s: `%s' does not exist.\n" +msgstr "%s: '%s' bestaat niet.\n" + +#: src/chsh.c:189 +#, c-format +msgid "%s: `%s' is not executable.\n" +msgstr "%s: '%s' is niet uitvoerbaar.\n" + +#: src/chsh.c:199 +#, c-format +msgid "%s: '%c' is not allowed.\n" +msgstr "%s: '%c' is niet toegestaan.\n" + +#: src/chsh.c:212 +#, c-format +msgid "Warning: \"%s\" is not listed in /etc/shells.\n" +msgstr "Waarschuwing: '%s' staat niet in /etc/shells.\n" + +#: src/chsh.c:215 +#, c-format +msgid "%s: \"%s\" is not listed in /etc/shells.\n" +msgstr "%s: '%s' staat niet in /etc/shells.\n" + +#: src/chsh.c:217 +#, c-format +msgid "%s: Use -l option to see list.\n" +msgstr "%s: Gebruik optie '-l' om de lijst te zien.\n" + +#: src/chsh.c:453 +#, c-format +msgid "%s: %s is not authorized to change the shell of `%s'.\n" +msgstr "%s: %s is niet gerechtigd om de shell van '%s' te wijzigen.\n" + +#: src/chsh.c:466 src/passwd.c:728 +#, c-format +msgid "SELinux is in permissive mode, continuing\n" +msgstr "SELinux is in gedoogmodus -- doorgegaan.\n" + +#: src/chsh.c:484 +#, c-format +msgid "You cannot change the shell for %s.\n" +msgstr "U mag de shell voor '%s' niet wijzigen.\n" + +#: src/chsh.c:495 +#, c-format +msgid "You cannot change a restricted shell.\n" +msgstr "U mag een beperkte shell niet wijzigen.\n" + +#: src/chsh.c:501 +#, c-format +msgid "Changing login shell for %s.\n" +msgstr "Aanpassen van de aanmeld-shell voor '%s'.\n" + +#: src/chsh.c:545 +#, c-format +msgid "Enter the new value, or press return for the default.\n" +msgstr "" +"(Voer een nieuwe waarde in of druk op Enter voor de standaardwaarde.)\n" + +#: src/chsh.c:546 +msgid "Login Shell" +msgstr "Aanmeld-shell" + +#: src/chsh.c:554 +#, c-format +msgid "Shell not changed.\n" +msgstr "Shell is niet gewijzigd.\n" + +#: src/chsh.c:568 +#, c-format +msgid "Error while changing login shell.\n" +msgstr "Fout tijdens aanpassen van de aanmeld-shell.\n" + +#: src/chsh.c:578 +#, c-format +msgid "Shell changed.\n" +msgstr "Shell is gewijzigd.\n" + +#: src/expiry.c:40 +#, c-format +msgid "Usage: %s [-f]\n" +msgstr "Gebruik: %s [-f]\n" + +#: src/expiry.c:48 +#, c-format +msgid "" +"%s - check password expiration and enforce password change\n" +"\n" +msgstr "" +"%s - wachtwoordveroudering controleren en -wijziging afdwingen\n" +"\n" + +#: src/expiry.c:50 +msgid " -f, --force The caller is forced to change the password\n" +msgstr "" +" -f, --force de aanroeper wordt gedwongen het wachtwoord te wijzigen\n" + +#: src/expiry.c:100 +#, c-format +msgid "Age field for %s is wrong" +msgstr "Het leeftijdsveld voor %s is onjuist" + +#: src/expiry.c:121 +#, c-format +msgid "Your password has expired. Choose a new password." +msgstr "Uw wachtwoord is verlopen. Bedenk een nieuwe." + +#: src/expiry.c:139 +#, c-format +msgid "Your login has expired. Contact the system administrator.\n" +msgstr "Uw account is verlopen. Neem contact op met de systeembeheerder.\n" + +#: src/expiry.c:147 +#, c-format +msgid "Password changing requested. Choose a new password.\n" +msgstr "Er is om wachtwoordwijziging verzocht. Bedenk een nieuwe.\n" + +#: src/expiry.c:157 +#, c-format +msgid "Your password is inactive. Contact the system administrator.\n" +msgstr "Uw account is inactief. Neem contact op met de systeembeheerder.\n" + +#: src/expiry.c:162 +#, c-format +msgid "Your password has expired. Choose a new password.\n" +msgstr "Uw wachtwoord is verlopen. Bedenk een nieuwe.\n" + +#: src/expiry.c:171 +#, c-format +msgid "Your password will expire in %ld days.\n" +msgstr "Uw wachtwoord verloopt binnen %ld dagen.\n" + +#: src/expiry.c:174 +#, c-format +msgid "Your password will expire tomorrow.\n" +msgstr "Uw wachtwoord verloopt morgen.\n" + +#: src/expiry.c:176 +#, c-format +msgid "Your password will expire within 24 hours.\n" +msgstr "Uw wachtwoord verloopt binnen 24 uur.\n" + +#: src/gpasswd.c:63 src/passwd.c:796 +#, c-format +msgid "%s: error reading from stdin!\n" +msgstr "%s: Fout bij lezen van standaardinvoer!\n" + +#: src/gpasswd.c:80 +#, c-format +msgid "Usage: %s [-r|-l|-u] group\n" +msgstr "Gebruik: %s [-r|-l|-u] groep\n" + +#: src/gpasswd.c:87 +#, c-format +msgid "" +"%s - change group password\n" +"\n" +msgstr "" +"%s - groepswachtwoord wijzigen\n" +"\n" + +#: src/gpasswd.c:88 +msgid " -r Remove the password for this group\n" +msgstr " -r het wachtwoord van de groep verwijderen\n" + +#: src/gpasswd.c:89 +msgid " -l Locks the password entry for \"group\"\n" +msgstr " -l het wachtwoorditem van de groep vergrendelen\n" + +#: src/gpasswd.c:91 +msgid " -u Try to unlock the password entry for \"group\"\n" +msgstr " -u het wachtwoorditem van de groep ontgrendelen\n" + +#: src/gpasswd.c:96 +msgid " -P path Search group file in \"path\"\n" +msgstr " -P pad het bestand 'group' in dit pad zoeken\n" + +#: src/gpasswd.c:98 src/passwd.c:406 src/rpasswd.c:111 src/rpasswdd.c:130 +msgid " --help Give this help list\n" +msgstr " --help deze hulptekst tonen en stoppen\n" + +#: src/gpasswd.c:99 src/passwd.c:407 src/rpasswd.c:112 src/rpasswdd.c:131 +msgid " --usage Give a short usage message\n" +msgstr " --usage een korte gebruikssamenvatting tonen\n" + +#: src/gpasswd.c:100 src/passwd.c:408 src/rpasswd.c:113 src/rpasswdd.c:132 +msgid " --version Print program version\n" +msgstr " --version programmaversie tonen en stoppen\n" + +#: src/gpasswd.c:101 +msgid " --stdin Receive input from stdin instead of /dev/tty\n" +msgstr " --stdin standaardinvoer in plaats van /dev/tty gebruiken\n" + +#: src/gpasswd.c:102 +msgid "Valid services for -r are: files, nis, nisplus, ldap\n" +msgstr "Geldige diensten voor '-r' zijn: files, nis, nisplus, ldap\n" + +#: src/gpasswd.c:238 +#, c-format +msgid "%s: Group argument missing.\n" +msgstr "%s: Groepsargument ontbreekt.\n" + +#: src/gpasswd.c:277 +#, c-format +msgid "%s: Group `%s' is not known to service `%s'.\n" +msgstr "%s: Groep '%s' is niet bekend bij dienst '%s'.\n" + +#: src/gpasswd.c:280 src/groupdel.c:300 src/groupmod.c:384 src/useradd.c:220 +#: src/usermod.c:185 +#, c-format +msgid "%s: Unknown group `%s'.\n" +msgstr "%s: Onbekende groep '%s'.\n" + +#: src/gpasswd.c:314 src/passwd.c:909 src/usermod.c:1125 +#, c-format +msgid "Cannot unlock the password for `%s'!\n" +msgstr "Kan wachtwoord voor '%s' niet ontgrendelen!\n" + +#: src/gpasswd.c:336 src/passwd.c:936 src/usermod.c:1104 +#, c-format +msgid "Password for `%s' is already locked!\n" +msgstr "Wachtwoord voor '%s' is al vergrendeld!\n" + +#: src/gpasswd.c:348 +#, c-format +msgid "Changing the password for group %s.\n" +msgstr "Aanpassen van wachtwoord voor groep '%s'.\n" + +#: src/gpasswd.c:355 src/gpasswd.c:357 +msgid "New Password: " +msgstr "Nieuw wachtwoord: " + +#: src/gpasswd.c:366 +#, c-format +msgid "Password change aborted.\n" +msgstr "Wachtwoordwijziging is afgeblazen.\n" + +#: src/gpasswd.c:379 src/gpasswd.c:381 +msgid "Re-enter new password: " +msgstr "Nieuw wachtwoord nogmaals invoeren: " + +#: src/gpasswd.c:392 +#, c-format +msgid "Sorry, passwords do not match.\n" +msgstr "De twee wachtwoorden komen niet overeen.\n" + +#: src/gpasswd.c:400 +#, c-format +msgid "%s: Try again later.\n" +msgstr "%s: U kunt het later nog eens proberen.\n" + +#: src/gpasswd.c:448 +#, c-format +msgid "No support for blowfish compiled in. Using MD5\n" +msgstr "Er is geen ondersteuning voor blowfish; MD5 wordt gebruikt.\n" + +#: src/gpasswd.c:475 +#, c-format +msgid "%s: Error changing password.\n" +msgstr "%s: Fout tijdens aanpassen van wachtwoord.\n" + +#: src/gpasswd.c:484 +#, c-format +msgid "Password removed.\n" +msgstr "Het wachtwoord is verwijderd.\n" + +#: src/gpasswd.c:490 src/passwd.c:978 +#, c-format +msgid "Password changed.\n" +msgstr "Het wachtwoord is gewijzigd.\n" + +#: src/groupadd.c:54 +#, c-format +msgid "" +"Usage: %s [-D binddn] [-g gid [-o]] [-r] [-P path] [-p password] group\n" +msgstr "" +"Gebruik: %s [-D bindnaam] [-g GID [-o]] [-r] [-P pad] [-p wachtwoord] " +"groep\n" + +#: src/groupadd.c:62 +#, c-format +msgid "" +"%s - create a new group\n" +"\n" +msgstr "" +"%s - een nieuwe groep aanmaken\n" +"\n" + +#: src/groupadd.c:65 +msgid " -g gid Force the new groupid to be the given number\n" +msgstr " -g GID dit nummer gebruiken als nieuw groeps-ID\n" + +#: src/groupadd.c:67 src/groupmod.c:70 src/useradd.c:80 src/usermod.c:79 +msgid " -o Allow duplicate (non-unique) UID\n" +msgstr " -o dubbele (niet-unieke) UID toestaan\n" + +#: src/groupadd.c:68 src/groupdel.c:67 src/groupmod.c:71 src/grpck.c:61 +#: src/pwck.c:61 src/useradd.c:81 src/userdel.c:71 src/usermod.c:84 +msgid " -P path Search passwd, shadow and group file in \"path\"\n" +msgstr "" +" -P pad 'passwd'-, 'shadow'- en 'group'-bestanden in dit pad " +"zoeken\n" + +#: src/groupadd.c:70 src/groupmod.c:73 src/useradd.c:83 src/usermod.c:86 +msgid " -p password Encrypted password as returned by crypt(3)\n" +msgstr " -p code versleuteld wachtwoord (als met crypt(3))\n" + +#: src/groupadd.c:72 src/useradd.c:89 +msgid " -r, --system Create a system account\n" +msgstr " -r, --system een systeem-account aanmaken\n" + +#: src/groupadd.c:73 src/groupdel.c:69 src/useradd.c:91 src/userdel.c:73 +msgid " --service srv Add account to nameservice 'srv'\n" +msgstr " --service NS account aan deze naamservice toevoegen\n" + +#: src/groupadd.c:75 src/groupmod.c:79 src/useradd.c:93 src/usermod.c:97 +msgid " --usage Give a short usage message\n" +msgstr " --usage een korte gebruikssamenvatting tonen\n" + +#: src/groupadd.c:77 src/groupdel.c:73 src/useradd.c:95 src/userdel.c:77 +msgid "Valid services for --service are: files, ldap\n" +msgstr "Geldige diensten voor '--service' zijn: files, ldap\n" + +#: src/groupadd.c:257 +#, c-format +msgid "%s: Can't get unique gid in range %u - %u.\n" +msgstr "%s: Kan geen unieke GID verkrijgen in het bereik %u - %u.\n" + +#: src/groupadd.c:312 +#, c-format +msgid "%s: You are using an undocumented option (-f)!\n" +msgstr "%s: U gebruikt een ongedocumenteerde optie (-f)!\n" + +#: src/groupadd.c:320 src/groupadd.c:330 +#, c-format +msgid "%s: Invalid numeric argument `%s' for Group ID.\n" +msgstr "%s: Ongeldig numeriek argument '%s' voor groeps-ID.\n" + +#: src/groupadd.c:352 src/useradd.c:1328 src/usermod.c:925 +#, c-format +msgid "%s: Invalid characters in password `%s'.\n" +msgstr "%s: Ongeldige tekens in wachtwoord '%s'.\n" + +#: src/groupadd.c:398 +#, c-format +msgid "%s: You cannot use --gid and --preferred-gid at the same time.\n" +msgstr "%s: Opties '--gid' en '--preferred-gid' gaan niet samen.\n" + +#: src/groupadd.c:419 src/groupdel.c:255 src/groupmod.c:339 src/useradd.c:1517 +#: src/userdel.c:485 src/usermod.c:1020 +#, c-format +msgid "%s: Too few arguments.\n" +msgstr "%s: Te weinig argumenten.\n" + +#: src/groupadd.c:425 +#, c-format +msgid "%s: You cannot use -f with -o.\n" +msgstr "%s: Opties '-f' en '-o' gaan niet samen.\n" + +#: src/groupadd.c:474 +#, c-format +msgid "%s: GID %u is not unique, using another one.\n" +msgstr "%s: GID %u is niet uniek; een andere wordt gebruikt.\n" + +#: src/groupadd.c:484 src/groupmod.c:398 +#, c-format +msgid "%s: GID %u is not unique.\n" +msgstr "%s: GID %u is niet uniek.\n" + +#: src/groupadd.c:495 src/groupmod.c:411 +#, c-format +msgid "%s: Invalid group name `%s'.\n" +msgstr "%s: Ongeldige groepsnaam '%s'.\n" + +#: src/groupadd.c:513 src/groupmod.c:421 +#, c-format +msgid "%s: Group `%s' already exists.\n" +msgstr "%s: Groep '%s' bestaat al.\n" + +#: src/groupadd.c:555 +#, c-format +msgid "%s: Cannot add group to LDAP database without DN.\n" +msgstr "%s: Kan zonder DN geen groep aan LDAP-databank toevoegen.\n" + +#: src/groupadd.c:572 +#, c-format +msgid "%s: Group not added to LDAP database.\n" +msgstr "%s: Groep is niet aan LDAP-databank toegevoegd.\n" + +#: src/groupadd.c:604 +#, c-format +msgid "%s: GROUPADD_CMD fails with exit code %d.\n" +msgstr "%s: GROUPADD_CMD is mislukt met afsluitwaarde %d.\n" + +#: src/groupdel.c:54 +#, c-format +msgid "Usage: %s [-D binddn] [-P path] group\n" +msgstr "Gebruik: %s [-D bindnaam] [-P pad] groep\n" + +#: src/groupdel.c:61 +#, c-format +msgid "" +"%s - delete a group\n" +"\n" +msgstr "" +"%s - een groep verwijderen\n" +"\n" + +#: src/groupdel.c:130 src/groupdel.c:147 +#, c-format +msgid "%s: GID `%u' is primary group of `%s'.\n" +msgstr "%s: GID '%u' is primaire groep van '%s'.\n" + +#: src/groupdel.c:297 src/groupmod.c:381 src/useradd.c:214 src/usermod.c:179 +#, c-format +msgid "%s: Group `%s' not found in service `%s'.\n" +msgstr "%s: Groep '%s' niet gevonden in dienst '%s'.\n" + +#: src/groupdel.c:310 +#, c-format +msgid "%s: Cannot remove user's primary group.\n" +msgstr "%s: Kan de primaire groep van een gebruiker niet verwijderen.\n" + +#: src/groupdel.c:325 +#, c-format +msgid "%s: Cannot delete group from LDAP database without DN.\n" +msgstr "%s: Kan zonder DN geen groep uit LDAP-databank verwijderen.\n" + +#: src/groupdel.c:342 +#, c-format +msgid "%s: Group not deleted from LDAP database.\n" +msgstr "%s: Groep is niet uit LDAP-databank verwijderd.\n" + +#: src/groupdel.c:355 +#, c-format +msgid "%s: GROUPDEL_PRECMD fails with exit code %d.\n" +msgstr "%s: GROUPDEL_PRECMD is mislukt met afsluitwaarde %d.\n" + +#: src/groupdel.c:373 +#, c-format +msgid "%s: Error deleting group `%s'.\n" +msgstr "%s: Fout tijdens verwijderen van groep '%s'.\n" + +#: src/groupdel.c:397 +#, c-format +msgid "%s: GROUPDEL_POSTCMD fails with exit code %d.\n" +msgstr "%s: GROUPDEL_POSTCMD is mislukt met afsluitwaarde %d.\n" + +#: src/groupmod.c:54 +#, c-format +msgid "Usage: %s [-g gid [-o]] [-n new_name] group\n" +msgstr "Gebruik: %s [-g GID [-o]] [-n nieuwe_naam] groep\n" + +#: src/groupmod.c:61 +#, c-format +msgid "" +"%s - modify a group entry\n" +"\n" +msgstr "" +"%s - een bestaande groep aanpassen\n" +"\n" + +#: src/groupmod.c:65 +msgid " -g gid Change the groupid to the given number\n" +msgstr " -g GID dit nummer gebruiken als nieuw groeps-ID\n" + +#: src/groupmod.c:67 src/useradd.c:76 +msgid " -k skeldir Specify an alternative skel directory\n" +msgstr " -k raammap deze map als voorbeeldgeraamte gebruiken\n" + +#: src/groupmod.c:69 +msgid " -n name Change group name.\n" +msgstr " -n naam nieuwe naam voor de groep\n" + +#: src/groupmod.c:75 +msgid " -A user Add the user to the group entry\n" +msgstr " -A gebruiker deze gebruiker aan de groep toevoegen\n" + +#: src/groupmod.c:76 +msgid " -R user Remove the user from the group entry\n" +msgstr " -R gebruiker deze gebruiker uit de groep verwijderen\n" + +#: src/groupmod.c:81 src/usermod.c:99 +msgid "Valid services are: files, ldap\n" +msgstr "Geldige diensten zijn: files, ldap\n" + +#: src/groupmod.c:245 +#, c-format +msgid "%s: invalid numeric argument `%s' for Group ID.\n" +msgstr "%s: Ongeldig numeriek argument '%s' voor groeps-ID.\n" + +#: src/groupmod.c:271 +#, c-format +msgid "%s: invalid characters in password `%s'.\n" +msgstr "%s: Ongeldige tekens in wachtwoord '%s'.\n" + +#: src/groupmod.c:467 +#, c-format +msgid "%s: Cannot modify group in LDAP database without DN.\n" +msgstr "%s: Kan zonder DN geen groep in LDAP-databank aanpassen.\n" + +#: src/groupmod.c:485 +#, c-format +msgid "%s: Group not modified in LDAP database.\n" +msgstr "%s: Groep is in LDAP-databank niet aangepast.\n" + +#: src/grpck.c:51 +#, c-format +msgid "Usage: %s [-P path] [-q|-r]\n" +msgstr "Gebruik: %s [-P pad] [-q|-r]\n" + +#: src/grpck.c:59 +#, c-format +msgid "" +"%s - check integrity of group file\n" +"\n" +msgstr "" +"%s - integriteit van groepsbestand controleren\n" +"\n" + +#: src/grpck.c:63 src/pwck.c:63 +msgid " -q, --quiet Don't print warnings, only errors\n" +msgstr " -q, --quiet geen waarschuwingen, alleen fouten tonen\n" + +#: src/grpck.c:64 src/pwck.c:64 +msgid " -r, --read-only Run in read-only mode, don't make changes\n" +msgstr " -r, --read-only bestand enkel lezen, niet wijzigen\n" + +#: src/grpck.c:66 +msgid " -s, --sort Sort the group file, no checks are done\n" +msgstr " -s, --sort groepsbestand sorteren, zonder controles\n" + +#: src/grpck.c:78 src/pwck.c:78 +#, c-format +msgid "No\n" +msgstr "Nee\n" + +#: src/grpck.c:222 src/pwck.c:229 +#, c-format +msgid "Checking `%s'\n" +msgstr "Controleren van '%s'\n" + +#: src/grpck.c:337 src/grpck.c:384 +#, c-format +msgid "Invalid group entry.\n" +msgstr "Ongeldig groepsitem.\n" + +#: src/grpck.c:338 src/pwck.c:346 src/pwck.c:616 +#, c-format +msgid "Delete empty line? " +msgstr "Lege regel verwijderen? " + +#: src/grpck.c:356 +#, c-format +msgid "Invalid group entry with comment.\n" +msgstr "Ongeldig groepsitem met commentaar.\n" + +#: src/grpck.c:357 src/grpck.c:385 src/grpck.c:402 src/grpck.c:418 +#: src/pwck.c:365 src/pwck.c:381 src/pwck.c:397 src/pwck.c:413 src/pwck.c:635 +#: src/pwck.c:650 src/pwck.c:666 src/pwck.c:682 src/pwck.c:700 +#, c-format +msgid "Delete line `%s'? " +msgstr "Regel '%s' verwijderen? " + +#: src/grpck.c:401 +#, c-format +msgid "Invalid group name `%s'.\n" +msgstr "Ongeldige groepsnaam '%s'.\n" + +#: src/grpck.c:417 +#, c-format +msgid "Duplicate group entry\n" +msgstr "Duplicaat groepsitem\n" + +#: src/grpck.c:445 +#, c-format +msgid "Group `%s': unknown user `%s'\n" +msgstr "Groep '%s': onbekende gebruiker '%s'\n" + +#: src/grpck.c:451 +#, c-format +msgid "Group `%s': Duplicate user entry `%s', already primary group.\n" +msgstr "Groep '%s': duplicaat gebruikersitem '%s'; is al de primaire groep.\n" + +#: src/grpck.c:812 src/pwck.c:1074 +#, c-format +msgid "%s: -s and -r are incompatibile.\n" +msgstr "%s: Opties '-s' en '-r' gaan niet samen.\n" + +#: src/grpconv.c:33 src/grpunconv.c:51 src/pwconv.c:44 src/pwunconv.c:44 +#, c-format +msgid "Usage: %s\n" +msgstr "Gebruik: %s\n" + +#: src/grpconv.c:40 +#, c-format +msgid "" +"%s - convert to shadow group\n" +"\n" +msgstr "" +"%s - omzetten naar schaduwgroep\n" +"\n" + +#: src/grpconv.c:105 +#, c-format +msgid "%s: /etc/gshadow is not supported by this system.\n" +msgstr "%s: Bestand /etc/gshadow wordt niet ondersteund op dit systeem.\n" + +#: src/grpunconv.c:58 +#, c-format +msgid "" +"%s - convert from shadow groups\n" +"\n" +msgstr "" +"%s - omzetten uit schaduwgroep\n" +"\n" + +#: src/grpunconv.c:61 +msgid " -P path Search group and gshadow file in \"path\"\n" +msgstr " -P pad 'group'- en 'gshadow'-bestanden in dit pad zoeken\n" + +#: src/grpunconv.c:219 +#, c-format +msgid "%s: No gshadow file found.\n" +msgstr "%s: Geen 'gshadow'-bestand gevonden.\n" + +#: src/grpunconv.c:243 src/pwconv.c:243 src/pwconv.c:267 src/pwunconv.c:190 +#, c-format +msgid "Cannot create backup file `%s': %m\n" +msgstr "Kan geen reservekopiebestand '%s' aanmaken: %m\n" + +#: src/grpunconv.c:266 src/pwunconv.c:214 +#, c-format +msgid "Error while moving password for `%s'.\n" +msgstr "Fout tijdens verplaatsen van wachtwoord voor '%s'.\n" + +#: src/newgrp.c:52 +#, c-format +msgid "Usage: %s [-l|-c command] [group]\n" +msgstr "Gebruik: %s [-l|-c opdracht] [groep]\n" + +#: src/newgrp.c:60 +#, c-format +msgid "" +"%s - change the effective group id\n" +"\n" +msgstr "" +"%s - het effectieve groeps-ID wijzigen\n" +"\n" + +#: src/newgrp.c:63 +msgid " -l, --login reinitialize environment as if logged in\n" +msgstr " -l, --login omgeving herinitialiseren als bij aanmelden\n" + +#: src/newgrp.c:65 +msgid " -c command Execute `command' with new group\n" +msgstr " -c opdracht deze opdracht met nieuwe groep uitvoeren\n" + +#: src/newgrp.c:161 +#, c-format +msgid "%s: -l and -c are exclusive\n" +msgstr "%s: opties '-l' en '-c' sluiten elkaar uit\n" + +#: src/newgrp.c:167 +#, c-format +msgid "%s: -c requires a group argument\n" +msgstr "%s: optie '-c' vereist een groepsargument\n" + +#: src/newgrp.c:174 +#, c-format +msgid "%s: Unknown user.\n" +msgstr "%s: Onbekende gebruiker.\n" + +#: src/newgrp.c:195 +#, c-format +msgid "%s: bad group `%s'.\n" +msgstr "%s: Ongeldige groep '%s'.\n" + +#: src/newgrp.c:218 src/newgrp.c:313 +#, c-format +msgid "%s: calling getgroups failed: %s\n" +msgstr "%s: aanroepen van getgroups() is mislukt: %s\n" + +#: src/newgrp.c:271 +#, c-format +msgid "%s: failure to get group entry for %d.\n" +msgstr "%s: Kan geen groepsitem voor %d verkrijgen.\n" + +#: src/newgrp.c:281 +msgid "Password: " +msgstr "Wachtwoord: " + +#: src/newgrp.c:284 +#, c-format +msgid "%s: password incorrect.\n" +msgstr "%s: Wachtwoord is onjuist.\n" + +#: src/newgrp.c:351 +#, c-format +msgid "%s: too many groups, not added.\n" +msgstr "%s: Te veel groepen; er is geen toegevoegd.\n" + +#: src/newgrp.c:358 +#, c-format +msgid "%s: calling setgroups failed: %s\n" +msgstr "%s: aanroepen van setgroups() is mislukt: %s\n" + +#: src/newgrp.c:365 src/newgrp.c:380 +#, c-format +msgid "%s: calling setgid failed: %s\n" +msgstr "%s: aanroepen van setgid() is mislukt: %s\n" + +#: src/newgrp.c:374 +#, c-format +msgid "%s: calling initgroups failed: %s\n" +msgstr "%s: aanroepen van initgroups() is mislukt: %s\n" + +#: src/newgrp.c:389 +#, c-format +msgid "%s: calling setuid failed: %s\n" +msgstr "%s: aanroepen van setuid() is mislukt: %s\n" + +#: src/newgrp.c:401 +#, c-format +msgid "Cannot change to directory %s: %s\n" +msgstr "Kan niet naar map %s gaan: %s\n" + +#: src/newgrp.c:439 +#, c-format +msgid "%s: execl failed: %s\n" +msgstr "%s: execl() is mislukt: %s\n" + +#: src/pam_rpasswd.c:219 src/pam_rpasswd.c:223 src/pam_rpasswd.c:330 +#: src/pam_rpasswd.c:334 src/rpasswd.c:211 src/rpasswd.c:214 src/rpasswd.c:297 +#: src/rpasswd.c:300 +#, c-format +msgid "error while reading request: %s" +msgstr "fout tijdens lezen van verzoek: %s" + +#: src/pam_rpasswd.c:220 src/rpasswd.c:212 src/rpasswd-client.c:58 +#: src/rpasswd-client.c:71 src/rpasswd-client.c:82 src/rpasswd-client.c:108 +#: src/rpasswd-client.c:121 +msgid "Peer has closed the TLS connection" +msgstr "Andere computer heeft TLS-verbinding gesloten" + +#: src/pam_rpasswd.c:235 src/pam_rpasswd.c:344 +#, c-format +msgid "error while allocating memory: %m" +msgstr "fout bij reserveren van geheugen: %m" + +#: src/pam_rpasswd.c:242 src/rpasswd.c:223 src/rpasswd.c:312 +#, c-format +msgid "error while reading request data: %s" +msgstr "fout tijdens lezen van verzoeksgegevens: %s" + +#: src/pam_rpasswd.c:296 src/rpasswd.c:269 src/rpasswd.c:358 +#, c-format +msgid "Cannot send input back to server: %s\n" +msgstr "Kan invoer niet terugzenden naar server: %s\n" + +#: src/pam_rpasswd.c:331 src/rpasswd.c:298 +msgid "wrong data received" +msgstr "onjuiste gegevens ontvangen" + +#: src/pam_rpasswd.c:352 +#, c-format +msgid "error while reading request data: %m" +msgstr "fout tijdens lezen van verzoeksgegevens: %m" + +#: src/pam_rpasswd.c:403 +#, c-format +msgid "Cannot send input back to server: %m\n" +msgstr "Kan invoer niet terugzenden naar server: %m\n" + +#: src/pam_rpasswd.c:565 +#, c-format +msgid "SLP: Found Server on %s, port %s (%s)\n" +msgstr "SLP: Server gevonden op %s, poort %s (%s)\n" + +#: src/pam_rpasswd.c:568 +#, c-format +msgid "SLP: Found Server on %s, port %s\n" +msgstr "SLP: Server gevonden op %s, poort %s\n" + +#: src/pam_rpasswd.c:574 +#, c-format +msgid "SLP: Found Server on %s (%s)\n" +msgstr "SLP: Server gevonden op %s (%s)\n" + +#: src/pam_rpasswd.c:577 +#, c-format +msgid "SLP: Found Server on %s\n" +msgstr "SLP: Server gevonden op %s\n" + +#: src/passwd.c:210 +#, c-format +msgid "Unable to initialize BioAPI framework, BioAPI error #:%x.\n" +msgstr "Kan BioAPI-systeem niet initialiseren (BioAPI-fout %x).\n" + +#: src/passwd.c:220 +#, c-format +msgid "Unable to parse UUID (BioAPI error #:%x) : %s\n" +msgstr "Kan UUID niet ontleden (BioAPI-fout %x): %s\n" + +#: src/passwd.c:241 +#, c-format +msgid "Unable to load BioAPI BSP with UUID of %s, BioAPI error #%x.\n" +msgstr "Kan BioAPI-BSP met UUID %s niet laden (BioAPI-fout %x).\n" + +#: src/passwd.c:252 +#, c-format +msgid "" +"Unable to attach default device to BioAPI BSP with UUID of %s, BioAPI error #" +"%x.\n" +msgstr "" +"Kan standaardapparaat niet aanhechten aan BioAPI-BSP met UUID %s (BioAPI-" +"fout %x).\n" + +#: src/passwd.c:278 +#, c-format +msgid "Unable to create BIR database directory, \"%s\"\n" +msgstr "Kan BIR-databankmap '%s' niet aanmaken.\n" + +#: src/passwd.c:291 +#, c-format +msgid "" +"Unable to create BSP-specific subdirectory in BIR database directory, \"%s" +"\"\n" +msgstr "Kan geen BSP-specifieke submap in BIR-databankmap '%s' aanmaken.\n" + +#: src/passwd.c:306 +#, c-format +msgid "" +"Unable to write biometric identification record, \"%s\": BioAPI error #%x\n" +msgstr "" +"Kan biometrisch identificatierecord '%s' niet schrijven (BioAPI-fout %x).\n" + +#: src/passwd.c:318 +#, c-format +msgid "Unable to open BIR for writing, \"%s\"\n" +msgstr "Kan BIR '%s' niet openen om te schrijven.\n" + +#: src/passwd.c:349 +#, c-format +msgid "Unable to enroll user %s using BSP with UUID of %s, BioAPI error #%x.\n" +msgstr "" +"Kan gebruiker '%s' niet aannemen via BSP met UUID %s (BioAPI-fout %x).\n" + +#: src/passwd.c:367 +#, c-format +msgid "Usage: %s [-f|-g|-s|-k[-q]] [account]\n" +msgstr "Gebruik: %s [-f|-g|-s|-k[-q]] [account]\n" + +#: src/passwd.c:368 +#, c-format +msgid " %s [-D binddn] [-n min] [-x max] [-w warn] [-i inact] account\n" +msgstr "" +" %s [-D bindnaam] [-n minimum] [-x maximum] [-w waarschuwtijd]\n" +" [-i inactiviteit] account\n" + +#: src/passwd.c:369 +#, c-format +msgid " %s {-l|-u|-d|-S[-a]|-e} account\n" +msgstr " %s {-l|-u|-d|-S[-a]|-e} account\n" + +#: src/passwd.c:371 +#, c-format +msgid " %s --bioapi [account]\n" +msgstr " %s --bioapi [account]\n" + +#: src/passwd.c:373 +#, c-format +msgid " %s --stdin [account]\n" +msgstr " %s --stdin [account]\n" + +#: src/passwd.c:380 src/rpasswd.c:93 src/rpasswdd.c:114 +#, c-format +msgid "" +"%s - change password information\n" +"\n" +msgstr "" +"%s - wachtwoordinformatie wijzigen\n" +"\n" + +#: src/passwd.c:382 +msgid " -f Change the finger (GECOS) information\n" +msgstr " -f finger-informatie wijzigen (GECOS-veld)\n" + +#: src/passwd.c:384 +msgid " -s Change the login shell\n" +msgstr " -s aanmeld-shell wijzigen\n" + +#: src/passwd.c:385 +msgid " -g Change the group password\n" +msgstr " -g groepswachtwoord wijzigen\n" + +#: src/passwd.c:386 +msgid " -k Change the password only if expired\n" +msgstr " -k wachtwoord alleen wijzigen indien verlopen\n" + +#: src/passwd.c:387 +msgid " -q Try to be quiet\n" +msgstr " -q proberen stil te zijn (geen uitvoer produceren)\n" + +#: src/passwd.c:388 +msgid " -S Show the password attributes\n" +msgstr " -S wachtwoordeigenschappen tonen\n" + +#: src/passwd.c:389 +msgid " -a Only with -S, show for all accounts\n" +msgstr " -a alle accounts tonen (alleen samen met '-S')\n" + +#: src/passwd.c:390 +msgid " -d Delete the password for the named account\n" +msgstr " -d wachtwoord van genoemd account verwijderen\n" + +#: src/passwd.c:391 +msgid " -l Locks the password entry for \"account\"\n" +msgstr " -l wachtwoorditem van genoemd account vergrendelen\n" + +#: src/passwd.c:392 +msgid " -u Try to unlock the password entry for \"account\"\n" +msgstr " -u wachtwoorditem van genoemd account ontgrendelen\n" + +#: src/passwd.c:393 +msgid " -e Force the user to change password at next login\n" +msgstr "" +" -e wachtwoordwijziging afdwingen bij volgende aanmelding\n" + +#: src/passwd.c:394 +msgid " -n min Set minimum field for \"account\"\n" +msgstr " -n min-tal minimum aantal dagen tussen wachtwoordswijzigingen\n" + +#: src/passwd.c:395 +msgid " -x max Set maximum field for \"account\"\n" +msgstr " -x max-tal maximum aantal dagen tussen wachtwoordswijzigingen\n" + +#: src/passwd.c:396 +msgid " -w warn Set warn field for \"account\"\n" +msgstr " -w opletdagen aantal waarschuwingsdagen voor wachtwoordverloop\n" + +#: src/passwd.c:398 +msgid " --bioapi Authentication token is handled via BioAPI\n" +msgstr " --bioapi authenticatie-token wordt afgehandeld via BioAPI\n" + +#: src/passwd.c:405 +msgid " --stdin Read new password from stdin (root only)\n" +msgstr "" +" --stdin nieuw wachtwoord van standaardinvoer lezen (alleen voor " +"root)\n" + +#: src/passwd.c:597 +#, c-format +msgid "%s: User argument missing\n" +msgstr "%s: Gebruikersargument ontbreekt\n" + +#: src/passwd.c:690 +#, c-format +msgid "%s: User `%s' is not known to service `%s'\n" +msgstr "%s: Gebruiker '%s' is niet bekend bij dienst '%s'.\n" + +#: src/passwd.c:715 +#, c-format +msgid "%s: %s is not authorized to change the password of %s\n" +msgstr "%s: %s is niet gerechtigd om het wachtwoord van %s te wijzigen.\n" + +#: src/passwd.c:744 +#, c-format +msgid "%s: Permission denied\n" +msgstr "%s: Toegang geweigerd.\n" + +#: src/passwd.c:753 +#, c-format +msgid "You cannot change the shadow data for `%s'.\n" +msgstr "U kunt de schaduwgegevens voor '%s' niet wijzigen.\n" + +#: src/passwd.c:781 +#, c-format +msgid "%s: -P flag not supported in this mode!\n" +msgstr "%s: Optie '-P' is in deze modus niet mogelijk!\n" + +#: src/passwd.c:811 +#, c-format +msgid "Changing password for %s.\n" +msgstr "Aanpassen van het wachtwoord voor '%s'.\n" + +#: src/passwd.c:960 +#, c-format +msgid "Error while changing password expiry information.\n" +msgstr "Fout tijdens aanpassen van gegevens over wachtwoordverloop.\n" + +#: src/passwd.c:962 +#, c-format +msgid "Error while changing password.\n" +msgstr "Fout tijdens aanpassen van wachtwoord.\n" + +#: src/passwd.c:974 +#, c-format +msgid "Password expiry information changed.\n" +msgstr "Gegevens over wachtwoordverloop zijn aangepast.\n" + +#: src/passwd.c:976 +#, c-format +msgid "Password deleted.\n" +msgstr "Wachtwoord is verwijderd.\n" + +#: src/passwd.c:1038 +#, c-format +msgid "passwd: Cannot execute %s" +msgstr "passwd: Kan %s niet uitvoeren" + +#: src/pwck.c:51 +#, c-format +msgid "Usage: %s [-P path] [-q|-r|-s]\n" +msgstr "Gebruik: %s [-P pad] [-q|-r|-s]\n" + +#: src/pwck.c:59 +#, c-format +msgid "" +"%s - check integrity of password files\n" +"\n" +msgstr "" +"%s - integriteit van wachtwoordbestanden controleren\n" +"\n" + +#: src/pwck.c:66 +msgid " -s, --sort Sort the password file, no checks are done\n" +msgstr " -s, --sort wachtwoordbestand sorteren, zonder controles\n" + +#: src/pwck.c:345 src/pwck.c:380 +#, c-format +msgid "Invalid password entry.\n" +msgstr "Ongeldig wachtwoorditem.\n" + +#: src/pwck.c:364 +#, c-format +msgid "Invalid password entry with comment.\n" +msgstr "Ongeldig wachtwoorditem met commentaar.\n" + +#: src/pwck.c:396 src/pwck.c:665 +#, c-format +msgid "Invalid account name `%s'.\n" +msgstr "Ongeldige accountnaam '%s'.\n" + +#: src/pwck.c:412 +#, c-format +msgid "Duplicate password entry\n" +msgstr "Duplicaat wachtwoorditem\n" + +#: src/pwck.c:431 +#, c-format +msgid "User `%s': unknown group `%u'\n" +msgstr "Gebruiker '%s': onbekende groep '%u'.\n" + +#: src/pwck.c:440 +#, c-format +msgid "User `%s': directory `%s' does not exist.\n" +msgstr "Gebruiker '%s': map '%s' bestaat niet.\n" + +#: src/pwck.c:449 +#, c-format +msgid "User `%s': shell `%s' is not executable.\n" +msgstr "Gebruiker '%s': shell '%s' is niet uitvoerbaar.\n" + +#: src/pwck.c:506 +#, c-format +msgid "Checking `%s'.\n" +msgstr "Controleren van '%s'.\n" + +#: src/pwck.c:615 src/pwck.c:649 +#, c-format +msgid "Invalid shadow entry.\n" +msgstr "Ongeldig item in schaduwbestand.\n" + +#: src/pwck.c:634 +#, c-format +msgid "Invalid shadow entry with comment.\n" +msgstr "Ongeldig item met commentaar in schaduwbestand.\n" + +#: src/pwck.c:681 +#, c-format +msgid "Duplicate shadow entry\n" +msgstr "Duplicaat item in schaduwbestand\n" + +#: src/pwck.c:699 +#, c-format +msgid "No matching password file entry.\n" +msgstr "Geen overeenkomend item in wachtwoordbestand.\n" + +#: src/pwck.c:714 +#, c-format +msgid "User `%s': last password change in the future.\n" +msgstr "Gebruiker '%s': laatste wachtwoordwijziging is in de toekomst.\n" + +#: src/pwconv.c:51 +#, c-format +msgid "" +"%s - convert to shadow account\n" +"\n" +msgstr "" +"%s - omzetten naar een schaduw-account\n" +"\n" + +#: src/pwconv.c:307 +#, c-format +msgid "Orphaned entry '%s' removed from shadow database.\n" +msgstr "Verweesd item '%s' is verwijderd uit schaduwbestand.\n" + +#: src/pwconv.c:316 +#, c-format +msgid "Error while deleting `%s' shadow account.\n" +msgstr "Fout tijdens verwijderen van schaduw-account '%s'.\n" + +#: src/pwconv.c:343 +#, c-format +msgid "%s: Error trying to get data for `%s'\n" +msgstr "%s: Fout tijdens verkrijgen van gegevens over '%s'.\n" + +#: src/pwconv.c:365 src/pwconv.c:388 src/pwconv.c:419 src/pwconv.c:435 +#, c-format +msgid "Error while converting `%s' to shadow account.\n" +msgstr "Fout tijdens omzetten van '%s' naar schaduw-account.\n" + +#: src/pwconv.c:466 +#, c-format +msgid "Error while renaming temporary shadow file: %m\n" +msgstr "Fout tijdens hernoemen van tijdelijk schaduwbestand: %m\n" + +#: src/pwconv.c:491 +#, c-format +msgid "Error while renaming temporary password file: %m\n" +msgstr "Fout tijdens hernoemen van tijdelijk wachtwoordbestand: %m\n" + +#: src/pwunconv.c:51 +#, c-format +msgid "" +"%s - convert from shadow account\n" +"\n" +msgstr "" +"%s - omzetten uit een schaduw-account\n" +"\n" + +#: src/pwunconv.c:166 +#, c-format +msgid "%s: No shadow file found.\n" +msgstr "%s: Geen schaduwbestand gevonden.\n" + +#: src/rpasswd.c:85 +#, c-format +msgid "Usage: %s [-4|-6][-a][-f config-file][-h hostname][-p port][-v][name]\n" +msgstr "" +"Gebruik: %s [-4|-6] [-a] [-f configuratiebestand] [-h hostnaam]\n" +" [-p poort] [-v] [naam]\n" + +#: src/rpasswd.c:95 +msgid " -4 Use IPv4 only\n" +msgstr " -4 alleen IPv4 gebruiken\n" + +#: src/rpasswd.c:96 +msgid " -6 Use IPv6 only\n" +msgstr " -6 alleen IPv6 gebruiken\n" + +#: src/rpasswd.c:98 +msgid " -a Admin mode, special admin password is required\n" +msgstr "" +" -a beheerdersmodus; speciaal beheerderswachtwoord is vereist\n" + +#: src/rpasswd.c:100 +msgid " -f config-file Specify a different config file\n" +msgstr " -f bestand te gebruiken configuratiebestand\n" + +#: src/rpasswd.c:101 +msgid " -h hostname Specify the remote server\n" +msgstr " -h hostnaam te gebruiken server\n" + +#: src/rpasswd.c:102 +msgid " -p port Specify port remote server is listening on\n" +msgstr " -p poort de poort waar de server op luistert\n" + +#: src/rpasswd.c:104 +msgid " -r level Specify level of SSL certificate checks\n" +msgstr " -r niveau het niveau van SSL-certificaatcontroles\n" + +#: src/rpasswd.c:107 +msgid " --no-slp Don't use SLP to find a server\n" +msgstr " --no-slp geen SLP gebruiken om een server te vinden\n" + +#: src/rpasswd.c:109 +msgid " -v, --verbose Be verbose, print SSL connection data\n" +msgstr "" +" -v, --verbose meer uitvoer produceren, SSL-verbindingsgegevens tonen\n" + +#: src/rpasswd.c:150 +#, c-format +msgid "Warning: cannot turn echo off\n" +msgstr "Waarschuwing: kan echo niet uitschakelen\n" + +#: src/rpasswd.c:515 +#, c-format +msgid "SLP: Found Server on %s, port %s" +msgstr "SLP: Server gevonden op %s, poort %s" + +#: src/rpasswd.c:518 +#, c-format +msgid "SLP: Found Server on %s" +msgstr "SLP: Server gevonden op %s" + +#: src/rpasswd.c:554 +#, c-format +msgid "Go away, you do not exist!" +msgstr "Ga weg, u bestaat niet!" + +# This error message is issued if no size was specified on the command +# line. Exactly two are required. +#: src/rpasswd.c:568 +#, c-format +msgid "No server specified\n" +msgstr "geen server opgegeven\n" + +#: src/rpasswd-client.c:57 src/rpasswd-client.c:60 +#, c-format +msgid "error while sending start request: %s\n" +msgstr "fout tijdens verzenden van startverzoek: %s\n" + +#: src/rpasswd-client.c:70 src/rpasswd-client.c:73 +#, c-format +msgid "error while sending locale data: %s\n" +msgstr "fout tijdens verzenden van taalregionaam: %s\n" + +#: src/rpasswd-client.c:81 src/rpasswd-client.c:84 +#, c-format +msgid "error while sending username: %s\n" +msgstr "fout tijdens verzenden van gebruikersnaam: %s\n" + +#: src/rpasswd-client.c:107 src/rpasswd-client.c:110 src/rpasswd-client.c:120 +#: src/rpasswd-client.c:123 +#, c-format +msgid "error while sending string: %s\n" +msgstr "fout tijdens verzenden van tekenreeks: '%s'\n" + +#: src/rpasswd-client.c:318 +msgid "Searching a server...\n" +msgstr "Zoeken van een server...\n" + +#: src/rpasswd-client.c:323 +#, c-format +msgid "Error opening SLP handle: %i.\n" +msgstr "Fout bij openen van SLP-descriptor: %i.\n" + +#: src/rpasswd-client.c:334 +msgid "No service found with SLP.\n" +msgstr "Geen dienst gevonden met SLP.\n" + +#: src/rpasswd-client.c:353 +msgid "Error while searching for SLP description.\n" +msgstr "Fout tijdens zoeken naar SLP-omschrijving.\n" + +#: src/rpasswd-client.c:372 +#, c-format +msgid "" +"\n" +"Please select a server:\n" +msgstr "" +"\n" +"Kies een server:\n" + +#: src/rpasswd-client.c:378 +#, c-format +msgid " (port %s)" +msgstr " (poort %s)" + +#: src/rpasswd-client.c:388 +#, c-format +msgid "Enter number of choice [1-%d]: " +msgstr "Voer het gewenste nummer in [1-%d]: " + +#: src/rpasswd-client.c:458 +msgid "parsing config file" +msgstr "ontleden van configuratiebestand" + +#: src/rpasswd-client.c:501 src/rpasswd-client.c:504 +msgid "Trying entry:" +msgstr "Proberen van item:" + +#: src/rpasswd-client.c:543 +#, c-format +msgid "Entry \"%s\" is not valid!\n" +msgstr "Item \"%s\" is ongeldig!\n" + +#: src/rpasswd-client.c:547 +#, c-format +msgid "Entry \"%s\" is not valid, ignored!\n" +msgstr "Item \"%s\" is ongeldig -- genegeerd!\n" + +#: src/rpasswd-client.c:560 +msgid "Bad entries found.\n" +msgstr "Ongeldige items gevonden.\n" + +#: src/rpasswd-client.c:565 +msgid "No entry found.\n" +msgstr "Geen items gevonden.\n" + +#: src/rpasswd-client.c:575 +msgid "No entry found." +msgstr "Geen items gevonden." + +#: src/rpasswd-client.c:609 +msgid "Hostname or service not known for specified protocol\n" +msgstr "Hostaam of dienst is niet bekend voor opgegeven protocol\n" + +#: src/rpasswd-client.c:623 +#, c-format +msgid "bad port: %s\n" +msgstr "ongeldige poort: %s\n" + +#: src/rpasswd-client.c:648 src/rpasswd-client.c:657 +#, c-format +msgid "Trying %s port %d...\n" +msgstr "Proberen van %s poort %d...\n" + +#: src/rpasswd-client.c:663 +#, c-format +msgid "Trying %s...\n" +msgstr "Proberen van %s...\n" + +#: src/rpasswd-client.c:677 +#, c-format +msgid "connect to address %s: %s\n" +msgstr "verbinden met adres %s: %s\n" + +#: src/rpasswd-client.c:732 src/rpasswd-client.c:1028 +msgid "Server certificate info:\n" +msgstr "Servercertificaatinfo:\n" + +#: src/rpasswd-client.c:742 +#, c-format +msgid " Certificate is valid since: %s" +msgstr " Certificaat is geldig sinds: %s" + +#: src/rpasswd-client.c:744 +#, c-format +msgid " Certificate expires: %s" +msgstr " Certificaat verloopt op: %s" + +#: src/rpasswd-client.c:750 +#, c-format +msgid " Certificate public key: %s" +msgstr " Openbare sleutel: %s" + +#: src/rpasswd-client.c:756 +#, c-format +msgid " Certificate version: #%d\n" +msgstr " Certificaatversie: #%d\n" + +#: src/rpasswd-client.c:761 src/rpasswd-client.c:1034 +#, c-format +msgid " DN: %s\n" +msgstr " DN: %s\n" + +#: src/rpasswd-client.c:765 src/rpasswd-client.c:1041 +#, c-format +msgid " Issuer's DN: %s\n" +msgstr " DN van certificaatuitgever: %s\n" + +#: src/rpasswd-client.c:846 +#, c-format +msgid "Handshake failed: %s\n" +msgstr "Handshake is mislukt: %s\n" + +#: src/rpasswd-client.c:869 +#, c-format +msgid "TLS certificate error: %s\n" +msgstr "TLS-certificaatfout: %s\n" + +#: src/rpasswd-client.c:880 +#, c-format +msgid "" +"%s connection using %s-%s (%s)\n" +"\n" +msgstr "" +"%s-verbinding met gebruik van %s-%s (%s)\n" +"\n" + +#: src/rpasswd-client.c:898 +msgid "TLS authentication error: server certificate issuer is unknown.\n" +msgstr "TLS-authenticatiefout: uitgever van servercertificaat is onbekend.\n" + +#: src/rpasswd-client.c:906 +msgid "TLS authentication error: server certificate is NOT trusted.\n" +msgstr "TLS-authenticatiefout: servercertificaat wordt NIET vertrouwd.\n" + +#: src/rpasswd-client.c:917 +msgid "TLS authentication error: server certificate not yet activated.\n" +msgstr "TLS-authenticatiefout: servercertificaat is nog niet geactiveerd.\n" + +#: src/rpasswd-client.c:925 +msgid "TLS authentication error: server certificate expired.\n" +msgstr "TLS-authenticatiefout: servercertificaat is verlopen.\n" + +#: src/rpasswd-client.c:960 +#, c-format +msgid "error loading default verify locations: %s\n" +msgstr "fout tijdens laden van standaard controlelocaties: %s\n" + +#: src/rpasswd-client.c:968 +#, c-format +msgid "error setting default verify path: %s\n" +msgstr "fout tijdens instellen van standaard controlepad: %s\n" + +#: src/rpasswd-client.c:1003 +#, fuzzy +msgid "Unable to get certificate from peer.\n" +msgstr "Kan geen entropie verkrijgen uit %s\n" + +#: src/rpasswd-client.c:1017 +#, c-format +msgid "" +"SSL connection using %s\n" +"\n" +msgstr "" +"SSL-verbinding met gebruik van %s\n" +"\n" + +#: src/rpasswd-client.c:1022 +msgid "Server does not have a certificate?\n" +msgstr "Server heeft geen certificaat?\n" + +#: src/rpasswdd.c:102 +#, c-format +msgid "" +"Usage: %s [-4] [-6] [-d] [-c certificate] [-k privatekey] [-p port]\n" +" [--slp [--slp-timeout timeout] [--slp-descr description]]\n" +msgstr "" +"Gebruik: %s [-4] [-6] [-d] [-c certificaat] [-k privésleutel] [-p poort]\n" +" [--slp [--slp-timeout wachttijd] [--slp-descr omschrijving]]\n" + +#: src/rpasswdd.c:105 +#, c-format +msgid "Usage: %s [-4] [-6] [-d] [-c certificate] [-k privatekey] [-p port]\n" +msgstr "" +"Gebruik: %s [-4] [-6] [-d] [-c certificaat] [-k privésleutel] [-p poort]\n" + +#: src/rpasswdd.c:116 +msgid " -4 Use IPv4\n" +msgstr " -4 IPv4 gebruiken\n" + +#: src/rpasswdd.c:117 +msgid " -6 Use IPv6\n" +msgstr " -6 IPv6 gebruiken\n" + +#: src/rpasswdd.c:118 +msgid " -c certificate Specify alternate certificate file\n" +msgstr " -c bestand bestand dat certificaten bevat\n" + +#: src/rpasswdd.c:119 +msgid " -k privatekey Specify alternate file with private key\n" +msgstr " -k bestand bestand dat privé-sleutel bevat\n" + +#: src/rpasswdd.c:121 +msgid " -d Run in debug mode\n" +msgstr " -d debug-informatie tonen\n" + +#: src/rpasswdd.c:122 +msgid " -p port Port on which the server should listen\n" +msgstr " -p poort de poort waar de server op luistert\n" + +#: src/rpasswdd.c:125 +msgid " --slp Register at local SLP server\n" +msgstr " --slp bij lokale SLP-server registreren\n" + +#: src/rpasswdd.c:126 +msgid " --slp-timeout Set timeout for re-registration\n" +msgstr " --slp-timeout wachtduur voor herregistratie instellen\n" + +#: src/rpasswdd.c:127 +msgid " --slp-descr Set a description shown to SLP clients\n" +msgstr "" +" --slp-descr omschrijving instellen die aan SLP-cliënten getoond wordt\n" + +#: src/rpasswdd.c:710 +#, c-format +msgid "Please authenticate as %s on %s" +msgstr "Meld u aan als %s op %s" + +#: src/rpasswdd.c:749 +#, c-format +msgid "" +"\n" +"Now enter the new password for %s" +msgstr "" +"\n" +"Geef het nieuwe wachtwoord voor %s" + +#: src/rpasswdd.c:770 +#, c-format +msgid "setresuid failed on server: %s" +msgstr "setresuid() is mislukt op server: %s" + +#: src/rpasswdd.c:813 +msgid "Password not changed" +msgstr "Wachtwoord is niet gewijzigd." + +#: src/rpasswdd.c:816 +msgid "Password changed" +msgstr "Wachtwoord is gewijzigd." + +#: src/rpasswdd.c:1349 +msgid "already running" +msgstr "wordt al uitgevoerd" + +#: src/useradd.c:54 src/usermod.c:55 +#, c-format +msgid "Usage: %s ...\n" +msgstr "Gebruik: %s ...\n" + +#: src/useradd.c:61 +#, c-format +msgid "" +"%s - create a new user\n" +"\n" +msgstr "" +"%s - een nieuwe gebruiker aanmaken\n" +"\n" + +#: src/useradd.c:63 src/usermod.c:64 +msgid " -c comment Set the GECOS field for the new account\n" +msgstr " -c opmerking het GECOS-veld van het account instellen\n" + +#: src/useradd.c:65 +msgid " --show-defaults Print default values\n" +msgstr " --show-defaults huidige standaardwaarden tonen\n" + +#: src/useradd.c:66 +msgid " --save-defaults Save modified default values\n" +msgstr " --save-defaults de gegeven waarden als standaardwaarden opslaan\n" + +#: src/useradd.c:68 src/usermod.c:69 +msgid " -d homedir Home directory for the new user\n" +msgstr " -d thuismap de thuismap van de nieuwe gebruiker\n" + +#: src/useradd.c:69 src/usermod.c:70 +msgid " -e expire Date on which the new account will be disabled\n" +msgstr " -e vervaldag de datum waarop het account vervalt\n" + +#: src/useradd.c:71 src/usermod.c:72 +msgid "" +" -f inactive Days after a password expires until account is disabled\n" +msgstr "" +" -f inactief aantal dagen na wachtwoordverloop voordat account vervalt\n" + +#: src/useradd.c:73 src/usermod.c:74 +msgid " -G group,... List of supplementary groups\n" +msgstr "" +" -G groep,... lijst van andere groepen waar gebruiker lid van moet zijn\n" + +#: src/useradd.c:74 src/usermod.c:75 +msgid " -g gid Name/number of the users primary group\n" +msgstr " -g GID naam/nummer van de primaire groep van de gebruiker\n" + +#: src/useradd.c:78 +msgid " -m Create home directory for the new user\n" +msgstr " -m een thuismap voor de nieuwe gebruiker aanmaken\n" + +#: src/useradd.c:85 +msgid " -u uid Force the new userid to be the given number\n" +msgstr " -u UID dit nummer gebruiken als gebruikers-ID\n" + +#: src/useradd.c:87 +msgid " -U umask Umask value used for creating home directory\n" +msgstr " -U umask waarde van 'umask' bij aanmaken van thuismap\n" + +#: src/useradd.c:90 src/usermod.c:88 +msgid " -s shell Name of the user's login shell\n" +msgstr " -s shell naam van de aanmeld-shell\n" + +#: src/useradd.c:186 +#, c-format +msgid "%s: Invalid numeric argument `%s' for group ID.\n" +msgstr "%s: Ongeldig numeriek argument '%s' voor groeps-ID.\n" + +#: src/useradd.c:196 src/usermod.c:160 +#, c-format +msgid "%s: Group `%u' not found in service `%s'.\n" +msgstr "%s: Groep '%u' niet gevonden in dienst '%s'.\n" + +#: src/useradd.c:202 src/usermod.c:166 +#, c-format +msgid "%s: Unknown group `%u'.\n" +msgstr "%s: Onbekende groep '%u'.\n" + +#: src/useradd.c:301 +#, c-format +msgid "%s: Unknown group `%s' in %s.\n" +msgstr "%s: Onbekende groep '%s' in %s.\n" + +#: src/useradd.c:316 +#, c-format +msgid "%s: Invalid home directory `%s' in %s.\n" +msgstr "%s: Ongeldige thuismap '%s' in %s.\n" + +#: src/useradd.c:335 +#, c-format +msgid "%s: Invalid numeric argument `%s' for `INACTIVE' in %s.\n" +msgstr "%s: Ongeldig numeriek argument '%s' voor \"INACTIVE\" in %s.\n" + +#: src/useradd.c:358 +#, c-format +msgid "%s: Expiredate `%s' is no date and no integer value >= -1 in %s.\n" +msgstr "%s: Verloopdag '%s' is geen datum en geen geheel getal >= -1 in %s.\n" + +#: src/useradd.c:374 +#, c-format +msgid "%s: Invalid shell `%s' in %s.\n" +msgstr "%s: Ongeldige shell '%s' in %s.\n" + +#: src/useradd.c:388 +#, c-format +msgid "%s: Skel directory \"%s\" in %s does not exist.\n" +msgstr "%s: Geraamtemap '%s' in %s bestaat niet.\n" + +#: src/useradd.c:449 +#, c-format +msgid "%s: Invalid value `%s' for option CREATE_MAIL_SPOOL in %s.\n" +msgstr "%s: Ongeldige waarde '%s' voor optie CREATE_MAIL_SPOOL in %s.\n" + +#: src/useradd.c:465 +#, c-format +msgid "%s: Invalid numeric argument `%s' for `UMASK' in %s.\n" +msgstr "%s: Ongeldig numeriek argument '%s' voor \"UMASK\" in %s.\n" + +#: src/useradd.c:913 +#, c-format +msgid "%s: Can't get unique uid in range %u - %u.\n" +msgstr "%s: Kan geen unieke UID verkrijgen in het bereik %u - %u.\n" + +#: src/useradd.c:987 +#, c-format +msgid "%s: Can't stat `%s': %m\n" +msgstr "%s: Kan status van '%s' niet opvragen: %m\n" + +#: src/useradd.c:1018 +#, c-format +msgid "" +"%s: No group named \"mail\" exists, creating mail spool with mode 0600.\n" +msgstr "" +"%s: Er bestaat geen groep \"mail\"; mailopslag wordt aangemaakt met modus " +"0600.\n" + +#: src/useradd.c:1026 +#, c-format +msgid "%s: Can't create mail spool for user %s.\n" +msgstr "%s: Kan mailopslag voor gebruiker '%s' niet aanmaken.\n" + +#: src/useradd.c:1095 src/usermod.c:520 +#, c-format +msgid "%s: Cannot create directory `%s'.\n" +msgstr "%s: Kan map '%s' niet aanmaken.\n" + +#: src/useradd.c:1100 src/usermod.c:525 src/usermod.c:549 +#, c-format +msgid "%s: Warning: chown on `%s' failed: %m\n" +msgstr "%s: Waarschuwing: 'chown %s' is mislukt: %m\n" + +#: src/useradd.c:1103 src/usermod.c:528 +#, c-format +msgid "%s: Warning: chmod on `%s' failed: %m\n" +msgstr "%s: Waarschuwing: 'chmod %s' is mislukt: %m\n" + +#: src/useradd.c:1126 +#, c-format +msgid "%s: Copying of skel directory failed.\n" +msgstr "%s: Kopiëren van geraamtemap is mislukt.\n" + +#: src/useradd.c:1136 +#, c-format +msgid "%s: Warning: home directory already exists, not modifying it.\n" +msgstr "%s: Waarschuwing: de thuismap bestaat al; wordt niet veranderd.\n" + +#: src/useradd.c:1197 +#, c-format +msgid "%s: Reading of `%s' was not successful.\n" +msgstr "%s: Lezen van '%s' was niet succesvol.\n" + +#: src/useradd.c:1226 src/usermod.c:798 +#, c-format +msgid "%s: Invalid comment `%s'.\n" +msgstr "%s: Ongeldig commentaar '%s'.\n" + +#: src/useradd.c:1243 src/usermod.c:812 +#, c-format +msgid "%s: Invalid home directory `%s'.\n" +msgstr "%s: Ongeldige thuismap '%s'.\n" + +#: src/useradd.c:1264 src/usermod.c:836 +#, c-format +msgid "%s: Expiredate `%s' is no date and no integer value >= -1.\n" +msgstr "%s: Verloopdag '%s' is geen datum en geen geheel getal >= -1.\n" + +#: src/useradd.c:1280 +#, c-format +msgid "%s: Invalid numeric argument `%s' for `-f'.\n" +msgstr "%s: Ongeldig numeriek argument '%s' voor '-f'.\n" + +#: src/useradd.c:1299 +#, c-format +msgid "%s: Skel directory `%s' does not exist.\n" +msgstr "%s: Geraamtemap '%s' bestaat niet.\n" + +#: src/useradd.c:1341 src/usermod.c:935 +#, c-format +msgid "%s: Invalid shell `%s'.\n" +msgstr "%s: Ongeldige shell '%s'.\n" + +#: src/useradd.c:1350 src/useradd.c:1374 +#, c-format +msgid "%s: Invalid numeric argument `%s' for User ID.\n" +msgstr "%s: Ongeldig numeriek argument '%s' voor gebruikers-ID.\n" + +#: src/useradd.c:1364 +#, c-format +msgid "%s: Invalid numeric argument `%s' for `-U'.\n" +msgstr "%s: Ongeldig numeriek argument '%s' voor '-U'.\n" + +#: src/useradd.c:1425 +#, c-format +msgid "%s: You cannot use --uid and --preferred-uid at the same time.\n" +msgstr "%s: Opties '--uid' en '--preferred-uid' gaan niet samen.\n" + +#: src/useradd.c:1576 +#, c-format +msgid "%s: Writing of `%s' was not successful.\n" +msgstr "%s: Schrijven van '%s' was niet succesvol.\n" + +#: src/useradd.c:1604 src/usermod.c:1335 +#, c-format +msgid "%s: UID %u is not unique.\n" +msgstr "%s: UID %u is niet uniek.\n" + +#: src/useradd.c:1616 src/usermod.c:1349 +#, c-format +msgid "%s: Invalid account name `%s'.\n" +msgstr "%s: Ongeldige account-naam '%s'.\n" + +#: src/useradd.c:1637 src/usermod.c:1360 +#, c-format +msgid "%s: Account `%s' already exists.\n" +msgstr "%s: Account '%s' bestaat al.\n" + +#: src/useradd.c:1721 +#, c-format +msgid "%s: Error: Cannot clear old faillog entry: %s\n" +msgstr "%s: Fout: kan oud 'faillog'-item niet wissen: %s\n" + +#: src/useradd.c:1734 +#, c-format +msgid "%s: Error: Cannot clear old lastlog entry: %s\n" +msgstr "%s: Fout: kan oud 'lastlog'-item niet wissen: %s\n" + +#: src/useradd.c:1748 +#, c-format +msgid "%s: Cannot add user to LDAP database without DN.\n" +msgstr "%s: Kan zonder DN geen gebruiker aan LDAP-databank toevoegen.\n" + +#: src/useradd.c:1765 +#, c-format +msgid "%s: User not added to LDAP database.\n" +msgstr "%s: Gebruiker is niet aan LDAP-databank toegevoegd.\n" + +#: src/useradd.c:1793 src/usermod.c:397 src/usermod.c:635 src/usermod.c:1563 +#, c-format +msgid "%s: ERROR: Cannot find group `%s' anymore!\n" +msgstr "%s: FOUT: Kan groep '%s' niet meer vinden!\n" + +#: src/useradd.c:1797 src/usermod.c:1567 src/usermod.c:1667 +#, c-format +msgid "%s: Cannot find group `%s' in service `%s', ignored.\n" +msgstr "%s: Kan groep '%s' niet vinden in dienst '%s -- genegeerd.\n" + +#: src/useradd.c:1813 src/usermod.c:1583 +#, c-format +msgid "%s: Cannot add user to groups stored in LDAP database without DN.\n" +msgstr "" +"%s: Kan zonder DN geen gebruiker aan groepen in LDAP-databank toevoegen.\n" + +#: src/useradd.c:1821 src/useradd.c:1839 src/useradd.c:1856 src/usermod.c:1591 +#: src/usermod.c:1610 src/usermod.c:1628 +#, c-format +msgid "%s: User not added to LDAP group `%s'.\n" +msgstr "%s: Gebruiker is niet toegevoegd aan LDAP-groep '%s'.\n" + +#: src/useradd.c:1908 +#, c-format +msgid "%s: USERADD_CMD fails with exit code %d.\n" +msgstr "%s: USERADD_CMD is mislukt met afsluitwaarde %d.\n" + +#: src/userdel.c:54 +#, c-format +msgid "Usage: %s [-D binddn] [-P path] [-r [-f]] user\n" +msgstr "Gebruik: %s [-D bindnaam] [-P pad] [-r [-f]] gebruiker\n" + +#: src/userdel.c:61 +#, c-format +msgid "" +"%s - delete a user and related files\n" +"\n" +msgstr "" +"%s - een gebruiker en bijbehorende bestanden verwijderen\n" +"\n" + +#: src/userdel.c:63 +msgid " -r Remove home directory and mail spool\n" +msgstr " -r thuismap en mailopslag verwijderen\n" + +#: src/userdel.c:65 +msgid " -f Force removal of files, even if not owned by user\n" +msgstr "" +" -f bestanden ook verwijderen als ze niet van gebruiker zijn\n" + +#: src/userdel.c:175 src/userdel.c:194 +#, c-format +msgid "%s: directory `%s' is in use by `%s'.\n" +msgstr "%s: Map '%s' is in gebruik door '%s'.\n" + +#: src/userdel.c:262 src/usermod.c:1663 +#, c-format +msgid "%s: ERROR: cannot find group `%s' anymore!\n" +msgstr "%s: FOUT: Kan groep '%s' niet meer vinden!\n" + +#: src/userdel.c:279 src/usermod.c:652 src/usermod.c:1683 +#, c-format +msgid "" +"%s: Cannot remove user from groups stored in LDAP database without DN.\n" +msgstr "" +"%s: Kan zonder DN geen gebruiker uit groepen in LDAP-databank verwijderen.\n" + +#: src/userdel.c:287 src/userdel.c:306 src/usermod.c:664 src/usermod.c:687 +#: src/usermod.c:1691 src/usermod.c:1710 src/usermod.c:1728 +#, c-format +msgid "%s: User not removed from LDAP group `%s'.\n" +msgstr "%s: Gebruiker is niet verwijderd uit LDAP-groep '%s'.\n" + +#: src/userdel.c:327 src/usermod.c:709 +#, c-format +msgid "%s: User not removed from group `%s'.\n" +msgstr "%s: Gebruiker is niet verwijderd uit groep '%s'.\n" + +#: src/userdel.c:537 +#, c-format +msgid "%s: account `%s' is currently in use.\n" +msgstr "%s: Account '%s' is op dit moment in gebruik.\n" + +#: src/userdel.c:559 +#, c-format +msgid "%s: USERDEL_PRECMD fails with exit code %d.\n" +msgstr "%s: USERDEL_PRECMD is mislukt met afsluitwaarde %d.\n" + +#: src/userdel.c:587 src/userdel.c:605 +#, c-format +msgid "%s: `%s' is not owned by `%s', not removed.\n" +msgstr "%s: '%s' is niet van '%s'; wordt niet verwijderd\n" + +#: src/userdel.c:593 src/userdel.c:615 +#, c-format +msgid "%s: warning: can't remove `%s': %s" +msgstr "%s: Waarschuwing: kan '%s' niet verwijderen: %s" + +#: src/userdel.c:625 +#, c-format +msgid "%s: directory `%s' not removed.\n" +msgstr "%s: Map '%s' is niet verwijderd.\n" + +#: src/userdel.c:637 +#, c-format +msgid "%s: error deleting user `%s'.\n" +msgstr "%s: Fout tijdens verwijderen van gebruiker '%s'.\n" + +#: src/userdel.c:659 +#, c-format +msgid "%s: USERDEL_POSTCMD fails with exit code %d.\n" +msgstr "%s: USERDEL_POSTCMD is mislukt met afsluitwaarde %d.\n" + +#: src/usermod.c:62 +#, c-format +msgid "" +"%s - modify a user account\n" +"\n" +msgstr "" +"%s - een gebruikers-account aanpassen\n" +"\n" + +#: src/usermod.c:77 +msgid " -l login Change login name.\n" +msgstr " -l naam de nieuwe aanmeldnaam\n" + +#: src/usermod.c:78 +msgid " -m Move home directory to the new path\n" +msgstr " -m de thuismap naar nieuwe locatie verplaatsen\n" + +#: src/usermod.c:80 +msgid " -A group,... List of groups the user should be added to\n" +msgstr "" +" -A groep,... lijst van groepen waaraan gebruiker toegevoegd moet " +"worden\n" + +#: src/usermod.c:82 +msgid " -R group,... List of groups the user should be removed from\n" +msgstr "" +" -A groep,... lijst van groepen waaruit gebruiker verwijderd moet " +"worden\n" + +#: src/usermod.c:89 +msgid " -u uid Change the userid to the given number\n" +msgstr " -u UID dit nummer gebruiken als nieuw gebruikers-ID\n" + +#: src/usermod.c:92 +msgid " -L Locks the password entry for \"user\"\n" +msgstr " -L het wachtwoorditem van de gebruiker vergrendelen\n" + +#: src/usermod.c:94 +msgid " -U Try to unlock the password entry for \"user\"\n" +msgstr " -U het wachtwoorditem van de gebruiker ontgrendelen\n" + +#: src/usermod.c:149 src/usermod.c:853 src/usermod.c:948 +#, c-format +msgid "%s: Invalid numeric argument `%s'.\n" +msgstr "%s: Ongeldig numeriek argument '%s'.\n" + +#: src/usermod.c:416 +#, c-format +msgid "%s: User not renamed in LDAP group `%s'.\n" +msgstr "%s: Gebruiker is niet hernoemd in LDAP-groep '%s'.\n" + +#: src/usermod.c:433 +#, c-format +msgid "%s: User not renamed from LDAP group `%s'.\n" +msgstr "%s: Gebruiker is niet hernoemd uit LDAP-groep '%s'.\n" + +#: src/usermod.c:455 +#, c-format +msgid "%s: User not renamed in group `%s'.\n" +msgstr "%s: Gebruiker is niet hernoemd in groep '%s'.\n" + +#: src/usermod.c:558 +#, c-format +msgid "%s: Cannot copy directory %s to %s.\n" +msgstr "%s: Kan map %s niet kopiëren naar %s.\n" + +#: src/usermod.c:565 +#, c-format +msgid "%s: Cannot rename directory %s to %s.\n" +msgstr "%s: Kan map %s niet hernoemen naar %s.\n" + +#: src/usermod.c:1067 +#, c-format +msgid "%s: Account `%s' does not exist.\n" +msgstr "%s: Account '%s' bestaat niet.\n" + +#: src/usermod.c:1175 src/usermod.c:1240 +#, c-format +msgid "%s: `%s' is primary group name.\n" +msgstr "%s: '%s' is de primaire groepsnaam.\n" + +#: src/usermod.c:1323 +#, c-format +msgid "%s: Account `%s' is currently in use.\n" +msgstr "%s: Account '%s' is op dit moment in gebruik.\n" + +#: src/usermod.c:1418 +#, c-format +msgid "%s: Shadow passwords required for -e and -f.\n" +msgstr "%s: Voor opties '-e' en '-f' zijn schaduwwachtwoorden vereist.\n" + +#: src/usermod.c:1443 +#, c-format +msgid "%s: Cannot modify user in LDAP database without DN.\n" +msgstr "%s: Kan zonder DN geen gebruiker in LDAP-databank aanpassen.\n" + +#: src/usermod.c:1461 +#, c-format +msgid "%s: User not modified in LDAP database.\n" +msgstr "%s: Gebruiker is in LDAP-databank niet aangepast.\n" + +#: src/usermod.c:1780 src/usermod.c:1791 src/usermod.c:1817 +#, c-format +msgid "%s: Error: Cannot copy faillog entry: %s\n" +msgstr "%s: Fout: kan 'faillog'-item niet kopiëren: %s\n" + +#: src/usermod.c:1806 +#, c-format +msgid "%s: Error: Cannot copy lastlog entry: %s\n" +msgstr "%s: Fout: kan 'lastlog'-item niet kopiëren: %s\n" + +#: src/vipw.c:58 +#, c-format +msgid "Usage: %s [-g|-p|-s]\n" +msgstr "Gebruik: %s [-g|-p|-s]\n" + +#: src/vipw.c:66 +#, c-format +msgid "" +"%s - edit the password, group or shadow file\n" +"\n" +msgstr "" +"%s - 'passwd'-, 'group'- of 'shadow'-bestand bewerken\n" +"\n" + +#: src/vipw.c:69 +msgid " -g, --group Edit the /etc/group file\n" +msgstr " -g, --group het bestand /etc/group bewerken\n" + +#: src/vipw.c:70 +msgid " -p, --passwd Edit the /etc/passwd file\n" +msgstr " -p, --passwd het bestand /etc/passwd bewerken\n" + +#: src/vipw.c:71 +msgid " -s, --shadow Edit the /etc/shadow file\n" +msgstr " -s, --shadow het bestand /etc/shadow bewerken\n" + +#: src/vipw.c:164 +#, c-format +msgid "Cannot lock `%s': already locked.\n" +msgstr "Kan '%s' niet vergrendelen: het is al vergrendeld.\n" + +#: src/vipw.c:278 +#, c-format +msgid "%s: no changes made\n" +msgstr "%s: geen wijzigingen gemaakt\n" + +#: src/vipw.c:318 +#, c-format +msgid "Warning: cannot create backup file: %m\n" +msgstr "Waarschuwing: kan geen reservekopiebestand aanmaken: %m\n" + +#~ msgid "cannot open socket: %s" +#~ msgstr "### kan socket niet openen: %s" + +#~ msgid "cannot enable socket to accept connections: %s" +#~ msgstr "### kan socket geen verbindingen laten accepteren: %s" + +#~ msgid "handle_request: request received (Version = %d)" +#~ msgstr "### handle_request(): verzoek ontvangen (versie = %d)" + +#~ msgid "cannot handle request version %d; current version is %d" +#~ msgstr "" +#~ "### kan verzoek voor oude versie %d niet behandelen; huidige versie is %d" + +#~ msgid "User %s: %s" +#~ msgstr "### Gebruiker %s: %s" + +#~ msgid "handle_request: exit (%d)" +#~ msgstr "### handle_request(): exit (%d)" + +#~ msgid "while accepting connection: %s" +#~ msgstr "### tijdens accepteren van verbinding: %s" + +#~ msgid "Handshake has failed (%s)" +#~ msgstr "### handshake is mislukt (%s)" + +#~ msgid "client has closed the GNUTLS connection" +#~ msgstr "### cliënt heeft GNUTLS-verbinding gesloten" + +#~ msgid "cannot enable SSL encryption" +#~ msgstr "### kan SSL-versleuteling niet inschakelen" + +#~ msgid "locale length in request too long: %d" +#~ msgstr "### taalregiolengte in verzoek is te lang: %d" + +#~ msgid "error while reading request locale: %s" +#~ msgstr "### fout tijdens lezen van taalregioverzoek: %s" + +#~ msgid "data length in request too long: %d" +#~ msgstr "### gegevenslengte in verzoek is te lang: %d" + +#~ msgid "error while reading request username: %s" +#~ msgstr "### fout tijdens lezen van gebruikersnaamverzoek: %s" + +# This error message is issued when a command which requires a list +# of user names is not given any name on the command line. +#~ msgid "No username supplied" +#~ msgstr "### geen gebruikersnaam opgegeven" diff --git a/po/pl.gmo b/po/pl.gmo new file mode 100644 index 0000000000000000000000000000000000000000..9f45fb8c971971a775d329ce8dfec677335850a9 GIT binary patch literal 62519 zcmb`w37ni&mHyvuC_#`#P(b7*5RyPD2|I)}Bq0QnPMbv_7@@kW(y8=PO;uN#Zqad2 zbktEt(Q!i^#}P*aHAZnAam8Vr8D(%Aaa@s6bVf1wo5A(}ea^Y}U8<@(9p+!3e*1af z`<}a>d+xdCF7Njaec~H?_+9$=o}Ooc&pWiI=ddUA^xSfSTzh(cy0oX~Y2eSmgTY6^ z1Hd__^zt2Rssd9(WA66I8fw013Kh7q|-iA~+wMb81h|Jn&R-5qKqd z9(Yr5|2#;PJwF9Sf8=RBJ&VER;Mw39NKifR1DApKgBO5DobKUm2IcQY@F?&$@L2Fm z;rS=wx#tXzHvtviR`5dbwV>krD#%~YANh90+=Jtc4y)blOiMc_9BKI5#O9&UTC z1m*v=;Q8QZK&9{Z;6>oMWJ2NI0FuR?4}&DB=O>`TJ&J#qf}6l|!MB6QgZ~aHoqqtA zgGM}qGK=YpRDPXHeP=Y#vh zJPPL&Q0~`)3&5K|<@W=i{QVqMc^`C{r*kQ&c%B0){4wyE;48ty!FPj7&nG~I{{v9@ zdD`Wku9HE}uGO5aOCrRNS%`TS~l{spM=IB1=} zUmkD(RC;a#7lOBgO8+;(lfmBvJg(Q>*MZ8s?%(J9cp*rY^^Akc$EQK1>nGv)sn7A}GeEt69;kfY1S*~H4R{}T49|Z8 zj|Gp};Qr1B7xP>Rcr&Q{em>wYz~ww2vC-wwm7wbP4PXiU74(!vbzXLoH{5tq7@V`N&^MGqzKAa7T?ke!<;EO@= z#T!BK@5jJrgWmz={%CkUy6pazfeG$qP;@s2d>5$neHJ_%{1vEj*stI7xfm4RTnVZ? zUI88teiT$V{|+iW{|l-f4jk}!P6X%jyc$$F?Ent}UkfUq?*fkoKLs8OehZZU{{asJ z53YDPCxA-NDp2(_0*c>m2Ic>@;C?r#^!x%;dJd>MCZPPE5pXN0bln6hzkd%N4}Jzb z4*U_AfKS}!@y!c(IjD4A2c7`F4wSz;LDkoHz=Og63GbgW=4J!Tv8_u_d`);B2URXNf(iHm za3T0r@J#Sga6fQq%i}o!A4Q z#1}HA0XKt}fbRn3|EJ(G@Yol5{98cf@6Djf`IDgh{{XxceA=IRd0!cD1XTUp2&&va z28y3Q53U671#be6c(KQO3wSZlKL&Z#bK;*n|J({9s(Zc(s$4I)(e>FXNE7Y31AG>E z>`T1d&I7mc{5(+Q`UOz_?gJNrzXeq;^Iz(Ga6Wi6&)0&g_ZvXTmG^>bFW&;64L**< zD&GmH=S#o@tb!_smj(PNcm~f8fGYQ+Ugq&G2)G$k`??WSIJbc+pL;-s^L6k<@Ch$> zzB>t2x}Oi80KN)Ty?h8f1^hX9DtOFacs=!j^Lc&^DEd1=@yGq3%Hzqe@N_)`6#vWv z_5LDI@eYH>fj5Kl|IvWo0gvVRPvQC4S33PlQ0_yZ{JjbkAKw8U34SiP-w!Gue*n)0 zPkNQ-e*jc_x)GGWw}FkvA%{WL)7)1(U!4uk;dvdX_IxF%b~OZ^1l|a$ecl18KEDJi ze?J5j{_nv{!NXtU_4s^nA{%*C#ZJy6;Sy<=#8GdA(c=Dt#lM()%~ync$DX3&Epq@#if8 zUk56@e+171e+{kzm%QEmx4?6G{y3;|eFU5bp7Rb*_ch=Wp5Fn=|G$Fbn*-kI>DvgZ z9Bu+tub%+LKYsvK&I|s=>9&IB@cdd(>AnY4xKDkT*Xwzpo~OWG@HTKU_$a9G7W}Qt znT_CuJih{z`#qq-eFR(vE`GPCvlj4HQ2F{XD860rcmDo*Q04GZQ1$dX@G@}zdpx}j zQ1AZ^dmvm4pcZNzt`o( zW#F+qSHJ{(DX4tE2b90BgR0;C|K8Ji5m@4R7+e9q6;wHVFW~;~bGp+5UJD+>`@aNF z0B-}20KW<<+y_DN(=oSsztRUPJtN>!@YUdn;AcR|v!8&MfQP={%ke7k44(fQOu&Bz zPX_-BoDUv(yUVBLpx$o<&jw!vDqSB7_zh6>d%z38qwjFO-2$%V`K90n@Lq5Mc)|yq zejTWMv_SFa?ck;0&p@T))DL?4pAU-eCh#Qi)1dhNKf&|C<3Hr}Uk2s>c2N2M4Y&k6 zahIp(xuBk33@V%tf#Q$*!A0PnfXRow9M^#=zY*{h@C~5ye|Nw?fr{ts-HtU-<@;7} zCHO;dA$a0PJp4XT{PRLk;oSmSy96)d`GAi)->n6$-a)17HgGZct$_R8>GgdEsC;Yy zRbDRy74G{$@yq?7(%HKpZxE%MbpvvW);ML$g;9PLtr@Vb$3MySY zz{9}TgHH!<1(p6!fhzYOgy%y(?ctpX>ixB#;=c(z3VeUSyFr!z4+Hl6gQx#kQ0@I{ zQ2BZrD7x=}M}m(AJnS>>UIOL5Hau?wm7beGmH(aKao|ru@!Oocy#AJf=kZ(v<$f!u z^7&BB=8GBdGd3?(@#) ztH5J<-U=$6F9h}egP_X$KJXdf??9#JurGN0%R!}c43zuZ!t*@=9|0Bav0rq)x)4E$C zjo?Axt)SxhD0m|H4N&R+J*aTzf7$EpLQwCo0u}FzL8WUq_$=@NQ0aKwKf1g+9-PPX zT2SvBU;@4tR6aihik}|G>y6_4`Lq@h$ylFQ+YF!t;wjxxX{uJ)r7! z52$n=_b*;15|mu2|OJ91gP|U6+8s|Id~}e2k?II;D7aSegP&tANo}f?=)}$ z&(8oclo0{S;JtJn-MVAGr)ve18F+489jsIo$^?1^*Cm@qHftHQ;>Q zUjv>B-U+H)eg@73pY(Mv_XS|W^IA~tbOcm6ycb*oehoYc?D>ZKI~f#T_k!Ys26#4j z8>saB7%YJYe$)BvTu}9P6}SxiGf?^aB&c}44?Yci%D23no(Znzc_}D=*Mo}x9iZ}k z4|ovx8}KafiQo46Jr5N9dN2W7;9=ljgYtJ9cntW>@ct1{;U50)-fk`emHw@u%IW2x z_~6~(q2TvHmD{gD<>T=0IDhqlhx6PIDqYuuPX}KP9thq7o&nwlD*PXSO3$48U7nu_ z?#FWrd@6VY_(bp(pvvbppu+zccm((_;rRhj>HjULe9rr>*Y`P~vH9pD8# ze-~8!9sM7kt_wlM*8){OQ=szkX7FI}y`b{{aqyYoS3uR*1K=UxBj73Ee&2KYvq7bM z4XFBPfJ)z+!~5I8C-eLdp!ncRpyb^{pz?Xh_q`nEgW}uM!PCG&Q1$&b@LAw};4$E@ zK-J4ZKk)pY0xJHiK=I*?;IZI`K&Ag{pz{AS@M!SBAG-gApwhV(d;UJO31GiivNy%(97p^@LZlZfa1s3fU37! zz{|i7fG+_b1?B&R|LN)Y3ixiGpZ-(#|8a09&yRqMz@eYH|2Knw#`BNCx!}MMPw$1G_+=1OeY_>Oe;8ExeFs$dkAf=q6My03m95}Bo?j12E`1z43H< zfQS8;^ZV(b-VcB(|C>SO_nzQ>KX?w$2mH5(y9yM4Oo8I}w}LCc_k#<;UxH_YNB+{~ z@CH!n|10of@blmT@JYXN`o-X7JYNZ_-ro%#0p10we7*_J0Ureq2A}w_>w$-Z7x26k zRDIXM6T#a+g@13r--5^SeEhFn?ymw>4m&}$r+0xR@b2*Z2&ndQ_!};CCI@i@6$H`W=q@O@3?tf64O)xw|>g ze=Yh0-+}wd;0U-7d^PxTuCuuROHe=Y?P{L?m+NHiKLhG_#^d1~t|9Ihfah@i!QPNQ z@Z(&s3(taA1_>f%doD-^%sxT>r@hi}bt`Jd$_)U_a0K-)Xq-!F?^4eox?8zrW)7AN{uH zFT=ZEgNFpS(*g?S;in4T&GmHdPYd*V_bUD4HwU*-uG_g^44xh0(Yrgi)Q*1<{G99>~asl2-x{OjOvHFU4%{!mcs6W8%> zgy&Cz@%MY4cX0hZ4tImE1mDATA=fId4P5&D5AVLkrQgTFSAdJaAA$=BJO2J7(A)^V zl4&*rLde+t)OddH>TL(r(N*YE#v|6#6W z(CT*_S1-@{tpFc~`yJu=V(=TdpO4!(SmF6gT%Y3lYo1>L>i1EQZaDq@Ezco%>x1>; zZ@Esz@h7}XxYl#sirZ`SlHUb99|isf)bB2?leqt#JrN#$|Ayzgxc&>be*q7`?Pc6I zxjzD&8)%=$vvdOeZsT6RZ-CF@`dD~=b3lK~xQ&}ZuA6ZGQ+RiHd``787^#2CfkNdN@*Y9NTyF9DU*Dv8( z%=J;O3vs`ltI557ujl$_u7AVr1g>ki{~V~_rQijG)#Cn4?q3$%?Ir*IC*FX|xti#8%;7xV-@|ozaC<7aiRbv+$jwDu!@*%r2x~ph2XcLt>krUh zi2Iwke-796JpVKo#!)^p$@%L=p{)UHb!QuDd65Muj>9>&UJ=~u_*iQ#v&h=s3t_I%= zZU-m1^gEU7ZCpq5yc&EQcqRA{*S~Y=cMMkp_j%wmg1^hb{|@&LgFoWhpZN593-@p5 z8sqBYs&ah~_sh8MZ&qKLak~dW7pqJf9feFAum2x8u2<&ijLK`w{p6&)0BGah18A8faGqdnj@UrZQ>g8H5BVE<3S{hZ+bueiLI`(s1A zUk~p4MS7l(;d&>}eZg%x&+iCy|AN~~xIc>PCDG6Rm$Zh5liu=3by+g6Ij3j;OY0-m zq;GqDG&-yw-(GEmmmBK!k)*dZ(x19qQEv?8$>;ReCz9&uc(sw>FBz>)BxB`fbE4j; zB-`o@;^>*vH(V_@t4XsuTpbus%G@+|65yPk#DDXeNvYIdtCz=W$<^h7fqH9nd~5M- zbG%X;o#y3m(jvq>{ne$FNq=p$QW@QvTwNMXMrw9*eKJzMUM>^KM7d#3wWKy$9vI)6 zglO}jyr49EL#cH`sd7VU*xX}H!LkD--H zt!8Z8eceW*H`D1!26Ww=^N zcGk+t#kKnKzBTSSO-mY6XL?Gd(R!&F(wrnK>!b6PkZQ7VZ67ft+bFlRjyzb^S8ad_ zZ0t;u&5(}5KGAVLuJZ$38Y=N`s18yButj-18LkhMhb;oH`jos>sWt~1O6|s~IKv)m zW0qTrXhL~5e*?oc3Icvr8Ik(Zcx|LwZ;iXh_#lRBR7(wux?zPDd>H#E9)26DUE&1YOalr5%;#tTWyrQ5^Q~2vZPYoxnz8N(!Hk@ubB5% z`Lv3rD%yU1joRpVGS;XMHp(MOcx8c}?gZh#Dr8OH&eLajW%;r9XLj>?<_xbgugjCc zM!hw*Xz}931hSUORc_6#X>DJvP>kIgt|a}{q+F@MqT_W7e7UvJ82R!FFOU}IgBsSo z1tdw*@RExy*!?JzmC{8U!1j<6nrJfE++MCAAGg(p z#WTrVQSa5~Y^g12v{fS7$9UZ5qUg<%s=Do#&<$P7ar$a+R7dJNsdzOGE29mCs^4I* zv)Z>d)UEzE#!@xhh%hiuX?>K(#~Zc&)_B#0!sY_`CMp-!XpJIyhKl~W*5l@+HBxR4 zg)lbT{m$}m%UIMqvVlewfigOnY*&X_UAv`wqj*e3}8LdCz+_hSf!1sBykXutxU%qx+%}|K#~m9M@CeA{8n9G9iTXpYlGW- z4?;b%)s{sxkPK8Cbt}(E2(N#*KC!LV+-^y* z9Hynb5>0}{D#o-((&?>?T~cq*K`KE}rVY?Z)48YVqZ=HpUa!7zur?Y(s9rw?3wR(aRs6{QiS0FHNLyi2 zI#fPFwNh)A`|0{U0F`c5f}3*1(M-w&Og^*M6p%N_ZE31?v%=G<2~V)b#KWN#3JZg;J6>cJ~Xz$aQdL@4Xb^5)WMUC?8_tCb~y$B<&_WUKNdJge%k9g-vV)x&*=yUvmht7^F$+b2JsS z;!=^c^&`WDbef6<=hY`@L``)2Vfarfrxmw5SafaPX4GARV00y9Up!j%MsFs>LSjR4 zx|8Z-u_sEblF~J*wb9x*Jz;ICicH#BYt%=rM=3W|?9dI8$sia<3dOKO9dEU*+wCrs ziyqgZhqQYO4a$e9-#LTHpEO*tsW8; zpf=JP$@PzO3q?-_|V`v{Q7iX=r_ILOK;LhMC0(Pceq85u~}MR1(_j1@7|>E)q`j8 zv*kz|ylq$Zl2M&Z7;L7Gj`MvJ3|mE^}~QyJDt{k@657 zwkb6sHhFGN!UYl!L7HHJahJTJ*bFIh$aNDg#!TW`2AVF819`6+a<1c?5BEsPbD}OD zHZz!=Z=uakXc`hm9Ud&vK6-5Dw%lOP12@{(BsS_sb(i(Wi%`ZW5|zKHg%p&t7#u{= zbok6_9hGic&#gjf&2Ge15P^>+fLt%sN?P5OCn+y8=uSm{Mcpa$I-Tm&Qjw)boxK=z zc8WN(=_I*0ZQqNeSKwI}#1k_BoJa zz3rxAg}$Lf)SAUKhHo}HET}W}Yb$c2%b;z`l-xtZ%e_I4FuJCWnzhjZvpcsDjJ5jd zvB8&MFqiZROVRcr)3^ zlLmkchUwvhv(nWvlLF*xp} zZ3!M*V@R@G(aUG8ilRT7^q0p6wtFB9^rPTwAqNH#6D62`0gcrNmL+rNHRnnflPSUU zF)?9&^utJFUQ>-fQk9u7sW%v7v=7mPX(PwOHiDSfoP7|n(8RWyIh$q7*3Zk&wKVY% z+x&S0^V1~z057~L^(EVe%Y&9>*{bQA$qTtQkuer9oAo zz`_A1KqymC_4PCLu}Kve%K|X#K-i3EkY$^DZ-{>DRM0; zcv>?egk41wF%-WNgQG@N+OgxXVI&$Hl z1)*eS_Pb)fUgxQcdO#&vk>p+a4tHf<*P9@X#ohj*0EGjy3d5Hjb~&bW-7dA@=|YU1CkQb=Tm9pa@Taf zH1Pv0jA$fvO`uR%D0Dvm>FTWbcRKRna&vs|-D`zSFc%#h>qQ< zOXfv%6{?6bOefPG1Kto|H|pH0Yv;ABXD&3Iw%&X7hV`5KmaklS&5Cs^t$dr#%XDMv zWMJ=kQIZ(x%2jKx>07^X)4q^zSTzf3o3gb^>Dt+@&fbUqTg}RrROF>!%zZ|!mb#5a zIMxr$KuS@~jx;JJSVfzvmqL^ZBCZuEO8pKp?no74M7YR| zRvo3`JMVWmhln;XHc?{3xD30Q4@H`-fdQ7|G36WxH@a;gHvDYehIQ;E?*vQRQfg-D zl93i`qc9-S`D?MIEfG?gMWVvQUl`@8zf8K0h&C3*J{#sG)L?5QzE4(%ja*s|7)k-Xk@OFm+)2vp_ijlqdVQAD` zx^~Xa#U@rg`OcH}sjLY4Y$Gm?8FB(Y>X3~ktRL>+HZ46;N5y#3 z-mwHEGFlihM+z;l*b52fC{^QhA?UR_`03+-LUq<2KxRgWS)_@HZ7>tcB@|Q}nOM45 zl5iDTXFA9x1Q(IPzrU7QQ6*w6-WF{KmbKR`(HOAutt?9BF|f`$Zbj#o>7W~^)`vUt zqP(GF#4)^Ah%DHQrAb^mw5x>yM8Acr zD~)6!$Y{gZ$|e(HGTLccp<}a>jYe#S@MMCee@*)SN-z+|5XjU(oyI;8CC+$M5u8=L zLD={$)KXZTV2Q^@>osiUA#JTEnt;tJ;PW*rWlUIb6~EHDb)}Un7Z!;a?C;;RoVAqM zT2pi-TIU3dhz5BhZpd5qJvSPIcfJ!Bx45&JvT$Q1 zLKXAsxGz1+z0(9=@0yL&sBOZ~C_e7tajN0nO#v`!M|>CTYv9G95os_ znO!(UZY18GG+VhWojK}Cn98M@X-y@aT%u_dwE_=5H0Z40jLEU1ngkgeZh_14fWc`L@dD6Fh!=^PWHm_a2A?e$^0qgH7OSl#!n*4GpM6_Wsi{!T| z$fi0(kxguEulq9RX(fmF>jTTc^eDN?8-5>6CuSWNM-N|-8OmBi?HJ%_X2lcHc=fJW7&yR zrVEqkW(t&2Bd2t2Z6+|#vohzDV@)BEt87?!&C~)a*2G(y3dK*yuqrT}@isSt)1s$-=`mg>A24GFxzkf)E9Nv(@j* z7}79&ZI-Et3aUd|rlGYFc8bjDD06aiI+C=OZDmtoLDk;8O!q#>3Y(bR3(d)0iH7So ztri+D{f-xECKSJuO^1Yvd1g{}A1VcD=}BD6S6k#`WwzQv z=avsCO8KnV^mxpOD?MFbv!<9OI@%+X#b-Kyk}3sCzj!&fHM%Xa z&B@ULQJTWcCdTfy)49?xpT79EOBmVgEnOmG#l1}Z&gr>?#Iz|6*@&yl%bZ9gXX*I_ zJ*(?Ud7?bINJ~2qirxcjHPLZBtJBHKWl1KTZOmm7*vf!ug0KduV3{F~y!XP8SVb3K zD_K4Zx^(! zSJ|{;V~X@C<9or|luu`lDK0aVVH8VCefI^ z(mttz-W{5c$pQ`AjMj>jb&fJy8e18&I%{SGI)@`)RvkfMH?=jut^jl_^U($cKkZ-v zO9-oMu`D`7Ml33X!(-3YPcMb1>={Ah{|c2)0_~f&j>S3QJ1zPM!Kz&SIFx7WE3RB3aNFS(s@9H8Q1=xDQP(bIgq1k&d?0SEY8g z)7l15vZxv9YMa(>)X+36lkN%U=xC8M_2!!Z@gVbzOnE&Us_X{WmgjtC33@|zicinR zRcmXbt?QL)nX7{>&UZpEv94hs?rwr^Q-iLEo* zXy(a~jcMGc_25g!rwfj~Hrn7s@k|qLN-%8%DMgG)TieoV2}{k8%LI_BZSj;NPD_!q ztgnUbaFWTKfE3=OGgRBPDW#mJywHiHJ6x+~suE7uVJmF)L6OJO=N#Y34GTVc)L7tu zEi|xjOq%jue3s)X4V|kREiDW7gnW8rr`EX@`|1sb>s`NzaVm==9*b}7>=D-neQjT( zSAk5*h9=z#ohYV1f8a&PvwB!FAw~0jd+oI8BSssx6Q-o0irU61>cuuOTA(JGQq^%y z^Q9d6qwOl2Z~c&#u;#mM_a@nfN9X5?aTbBOYyQcE`m&zQ)($l+z;IaRP>E>d;eaBs z6EFPmsN~{}eXe_L)`|{n0Q1-x7~WZ-u+{2%(vXE1mULgdW`m6r%|e};Nf+4&z8m?* zzEV(m2Vmm<)Q4ozY{ROKvM|}t{8DN7g!aDYU=WiE9hh31Ecu8&nHhZd2bU>QJJrmOL(2{Ix3;I^ z1~Q_<=&mjmj#A-S2WYsZn1_&st4lk#Uae7ETQKo(Ek)dCI-%~W`Zpj;!wn;qGj51F zF0Pv2m{ky*`=ZzgCmuwg`!QsS4khr@K(P9tg*w*5(4XtI$(Ps;VC0I>Q z&#!vQQAUfHTY|JBA_OE)K7yXcB4&YPRHViX5oV$wHP7`u-`*9NrD2(GP+gP^SIT2E z5-=oYsY$KLEG;)($<^&;ySB>>ItIzD8Od$`V@lU8k}$drR+{)!n4_3(Z)!?B5Ee?z zv_4_)#PoAmmD}lbtV&X4(nd0t*IK&WrxR6r!V)}2RqUQr8eO^3YQzo;4YiY7u@}eT zbnh46+M@5S)&iBxzWK1i%z2@~MQMvkVqcSJXTNz4)xfo? zO|rQoD|x!{Izxy?ePTu;*}(|#)YH)%TDDju8q6E5QB9)tXi1`m8?Iu7F|Um%Dixdl zi|cY+<&%c1;Yb{4&{67mLChj%DGFH2 zCr=>*j9v%ZkBv%ZOVpexBqgTsUh6d!lTw7~QS959;7G)(AB+znQ8STo#z)xAkk3^N zriI*BN8};Ixhv{}qx4M3^%z65VlXVK@fEGCB5d|F#s(HkaEjx78Y9%Mn_I9ih+=Zg z2|6f{;BgU|wY(y6E~vN$*M_GI4ca|Y;jm1$d{ohsEqKI=c%obzA43gVFt4((Fri|r z{H&NY+R*X4m;oF09V|&Kt*Mlr>u2UJOU5QDEsphTCZ{bvb@3@n=WM7dC8c#ul&jLk zt-)q#Q+-*&0+H6xMdRBI7qi;2Z~dmy3JGS0Go_U%K+BR-m!5J;Y3UiIQe8hUmNqbO)&jkZZfR-hS^OnS&tA54sncmDp|purBTcqS$cA!Rd8pN&TwEV) zHK&sEuItAlx&5NC;Yx|62d(QD*BgTu%vsCAoEBr5(xz&8WLeTzM_zAF&ch09!6;77 z7al2%4PPWl-dya9SdfQ<)y1RL@eAgxTeEIeRv4!&UOGpD22((3)8rVL($@DSW5bLg z&y}{oAaMNrH5=EL&OZB$b4sUX#EOyS-6f9k;%pQ#<=Oo;juhB`%}DK`q=tS!HBoC0 zQIr~e?!SqZ72BxE3Ib=sPHPb*MQGs%(v1fd!R^1VMuhFu{AsHcaRjaw1)5q_c9FS*Al<{IR zp9eJ5a4>k9nq&(apt2xFQan0jYp6WT{_qe!ClL~N>N7iwd^1v;(vT-BaItTBO376n z4B1iSoKR5k9FHJRa-KPgj1`weDQ^Q)dFH<9tvs5A5y-)GC*Zm z!qor>Kuw^Wkm$IQ)SV})JMQF&;bg)17)6b{%-LeGIT4(Kp_=0j%i{|#n z;yXPKon+hclJ-D!68dzUF*O5Yw3-}B@KE?50H>knSYxxjGKrSD(#E^-M)5rKK1n1i z@iHssI0l_UFacqeQ#=g4ud%1UoYX66{g%`4r?21QiRcVE$Ln`K7*0ti2e1i}jQ%1S z$Mh|3Y-Oxyx&R`}(o#IyocW6W;uLpz5&ifGOBdPmqPc+`l9!>s&*s7hCU=B03){jo zp*O`r=^WH!V%iEt96QmR;)ur~ou;i0))K>s>0@=iLSnL=4vQB?e{FOv&!_YexVx;b zcLh(HB%0h-qpc;VX5O0Pndy_9agB5qGi426>P#Pnfw%xJN-WM>CUtDR?@7Wxqh zlF*^0u@=3ooT`;~TdW+tPrXSN)ykZd(;S~f{7zzwpwq3W-mh`>kCeJNLf}XpG|3V2 zma)C(Fq}}UwDG%Ql1 zp@OPAtVoInrEgJw%0*=?%TOyGx8B8Pu25WtsGkoKcC8(lxN0#*mS#YiRB%H~YI52LP${h4zd;dUD#$Fo{WG=0;p`ONR$B z4ibnWOdC_oI<>436c1v*VsfIsyJeawSw>TYQ{b68 zyg~qZuCbylp2Hr}>G4U7dq?dC-^e{NGn(S^=FZwq69kj4xY1yCVM!a9>UWi`=sj0m zqh$#R{4${3QARDZX|pU$@!bv&IV4t;@z=``tE>~*895E^-h+S%w7I^+3wTi6>Ae-6 zS5+nvpFtF5XR=!id{Uq~oHo;tQ;VXdHyXofktMA*R`g@>p}}GK8qGtMQl1PwT^ z)eptI8Ww8D_1GQNJBMq=D-8TB2SaGyt%0d)#u}3odlAF*#v(;Linu%;WfegntL)%) z;*C7tCdnajjY@PDb3EhN)10ZamHHSAh+@y6g7!C7pV(a=qW_rreD=L4S{eHnquqYnqCYAWo^+HuY~PjuD{!k7FYMx3?pvx; z6DT5*-!>$iU|4}DV^JzjsEZn?`l;?EmsC>xhxY7fi$o%#r8iht=#u(tElSXGrenGG zRx0pp_hK0f`j^MHCD*})7rEYVqOk`%Bz59lwdpL`+3rEKSU|CAJkhDpDI}ZOPOa7o zzdr7n^`Wpe>Wbrb4Y-=STNtq(w5+!Kas5o;a9DHZ8J$6%T07`CB$6hB8NkC(QwXDo zZi3Wb8ENrw_Z8@us2Dj_iSEAf5NBfCHC&reZ|t5FetO>fmJw=sN6>eyKbe%GX!VXJ z-^E8Sj549IbQmHdVX5i6st>dC$5i0{-49iQ&*EwBnc~;ko)|9;p~H_3sbLIEjjL^0 zC zHmW80Nb^;bL%_SS>%kfVUej`@EZFow-r69$Q>rUAJMR z;R6~8Fe|!T9nQ`ttWw?G)obzG_gRfjGhzD}JZD{F@#yzZb#1CyPEU5x+^+N$1L>ml zX^LYyr4QXY7lD;z@kIH3w6?{Q;`P-CH0;)0lKadGjL>=4G_rOJvJGs=h^r~7{U|oT z7>b`apD8$))jMon#& zkDiYhgkLW5E~eILJ8YdqA4c<@KAV5?6Y7JznZ7k-7xVeFPBOgcG5EX&5!j1 z#T6>9f{5#KMm+~eOkkHNPYi_Fl4OQ6>bLMoR5zbav7=pyGj&FTJ+sK5(V%5b-f0Rb z+@vW1%=MV-WGv52kJf%POzLJhM*GP0cZ_jMVcI`dFvdhbt6@xXGJPw^lXELb}!+!vTis(SPo3k_O?x`MxxZX zTHuIQ>YS@Wn1X4|UFawhk(dB$j2+FE9m}MeA6#4KrqlDajTpn57bHIIMf4JQz0J^H zyZXqMY0mN?iGxas>a1lr4!>+QS zOyq~H3|V|-hgq16l>GtN9H&hF=v*f-jdvC$C*==&ZHP5@3G-RHm zFuB%O8!6>>!hV{~{6IaVi4~SQbsEzvWsyyCVm3yh9tmZ9oF{=5eU!6^$!L)OQYuK9(0?adg^{=oLTi^ z^2m0)Y5pZx!;XP3;bd6->UX@LP|N(Bo-#$;-tJfisrNkmFgA&{jwWucT* zMbgP>$mw0NK&ED09`&JyOoyx+F$+wtU~(~p#Rkm8hXPj$X!=r*DonBKaZxg5p9PS_ zi>D4|naJs5F^w29tej?1X$9YbK9^EbGV7q!ol#7A-&5W(nQG* z=c2%SfLPFJWm4~Od0OvVM$4ENbO@Pj_n5ojB!pm2Bu620xwDW6(!k7CD;H#ZjhS!O zvD6;wNQrtsM3TNLFeST}R2q}+s5CvXm9e5@gq7K>km#>H7=pO?-S1kNZ-Ww`#v7lG zl`2jM-GCD-F`oaKi3>_{Zb~c0oPSTz!(^H-pff2PnOM-Z$C$|FTe>C~MI9I?3Q*6g zeB`slod47$I;aUC&YFu0542kz+pmT$`{q##&)Ynf3o&N0z%`$}#?hB^(iyJJB629H+4_(tU`!I6d`M!pf`=&y%h-ZjB_i2UM`^mnrAYr`E$qe6Fcr1SZ zj|JW}sXpEAQ)$z2ftHTAJ%1+tEK+rejFuYKQ>83aAJZz`&aX2}TRM@ok#}JcwZd}7 zb@Au|3E2}q)G*3z9R4wD6qaqFjCD)_X&fKAGt>-h4*9P)yhh-+o7Kow}dw+loo zX{uh%e71qXI7f=73(t1B3Cs;SQ6cRMm5o`gW=lNBs=HYLf-=Rz$6X=R%Y!U3P1R1W zOI4Ft+TAGAgtig6y6oR>P(He=%3Jy;ISyV*NNm)5wADvtX0Ixm2)aO|+DmwE`b7HGhVU7r$L#;HX%oGy1~BzNolsCK ziY=@Cb;xsv$Mj1O;SK6|x^T0tlT?uT*CELDwDht}MR9IMN-L|`VksAc%T(MDTu#67 z`rbTy4_T&Y9yygI%L1#4#6!6-Ra2(C*ea`O6q0G_z0uQR z#rhos;LZY4+Jd%(Ju(cQ+9PXATL*nET|PnEk+5k3o`yOYRHcn6_aw1BMYHypOWNiM z%#ZPt6TygN#g>GJ4(WtZH67KN6;qpBPu)$lnoSS` zEAw{k{``Hql+yy#&gYcXjguo(($8hSi5;xi`mt_tJNd0NhThH z{|T+RWL(WBqSJ3f=&6nCf(0R?)+s5rEYZj4dn0Ern$|zgCS;NNH!5aHtva8cG_rhF zm^6R5GFsc^9?LRx^l42-Q4-$wceUu`rAaQZ0&!TQGVR`;V1LrI@vgDj?#V>eg&9FR zfqj{UGH45!(Foiu$CM5qTJ8}``gbm-F9W^FTQqD_U2)RNjP$8>01snzQxInuCT2w0 z*QEAs?8Np+j9m5|3?(r%>&U_n7B?|?R&!p+#ZX*VPa*9NU0aTVK->H1BpSmMp{*9u zz~1KZJOYJeGAtHAsQf7@WTthg4S9RDZZo!4415ycxs15oRy-k-QI8v^I@U%n*uXD- z7UObj&SB94=jO435V>4su!_FJft%aq4b%H(Mz~NTM(5CpSttVV#bB z;v#Dek;M=e;VU57yL7%bY%^2s7a6NiZ|&r)T$sL+r{a#o2TjRYW|rR6(KMqhA*nl~ zR@-W&^4Ui()>rPuPo~&DxI_ZnyBYEk_XN_+L$x?-rEPpdyP`0eri<+TQzBUwq%Sa2 zH#18+O`*^VO_z^p(wC8{u#uOB83YiGvaK#=pe%&h3RBs$t>dtf@WIgQsMU$VQB$^b z+3Qs7ctmW*!fvD)4~x&#uXuRqkF2826|L(dISTLp+5^vAT_ReT8>P9}YGgNSb3A67 z3lZ=A8zb6`?|YdwilO%~Rh%#UXba7`vhZ<^QjO^qn-@2cu*#%3dUW8@61va`~p-^|!8A zGiT-cWFro%RxbbGRms}T7biGezP|VJ4XZX;cq>+|z3++w?`D!&Ya4A(gD?4{Dl@)q zn^CvjJ>3bq^@%4JNXP1?U54(}KTF~wa$d7Qm`akczEOf#DuJ&VVJ!qBYlegmH~F|r zdv}!joz6p$H?da_eMD#lvxtyEAuP#>?aU~L(RF(oVw;*xXzf7|cC?Ms+T-RzIu$m1 zdLiW~+TQD^E)z3sO=9{}>h42)*(5mHqvamAzIxboqT@C=qA1&n-ucFtV0L(kOUZp| zobn7SbJg%nP0qAOl*c&P?pn8oK&~iH)L6+jLdR;e`&uZYEniNah7=WU4v6&AKXPVF zJ5fP<=r6T+WpG&*?o(;JfUlk`)4?%1IfQOhGF0b>q&xbuFP;P<6$(`J$87fu274{` zZ#bJ|ub%Cs=7MM1<`t?4vm*P*J~vIJ?*q;By0BgaTGQ3Z zs4df_my*>&Vu(F36O*jFvg45L%P0lPRzo{$BzK{ey1}TkI?~Fzwf3M>UNga*gU8MKX zh0;Jqg=O~YLnTgp{|0XYfSxv0WeSgeV@qyu_BNN|K7Tvz2%4^r}5}d24ni zt}YgzDt+BZ^?5B;q0m&x6AwHWn0wU)X7Kkt7Q4; zQXPlykk|KGhS-p9nv(Bv=Y))SOr&Y&zSzwKd6x<_kJ3D+UzO3D6aU1I0kY_+t>Z>5 zNspVTj!?RJ|82A#Z`D5Y#+eQR$qaM^Uk@^?n2fZ0INmU4li*aOZH|^dm^D2dU9;wK zuE^$D^scj}*P~OgEIRD^E9;XmZBAhhgF2rr>(&-4j84}Os!15kEAR*v1an$k z^@@0gLmRY2HSHgx@xpo^=VNI^G6|<=8MMU}_E(WyoBGujjL@ejOJOxXW81g}FnnBw z1W%+!OoESu(Kf}GVr=p(d|GDT$T!&r;p{9OeOHDdPZa#9xM@*$7>dcYd$&)^m@k!p zyre539^&ILY}s${`6~246BG798PpCt_lQ<*^Tx$ZGK9Q_9qMX_s2eibD)KgkEhzD+ z#oP6JNL}Do!~4vEugSo`lGdiwnbo^NFE1mtdro`1_Gc)zl<(SQ)eDhyS_@-w(i_es z^y3D#9m&}>4Kw7l!NxsBlfVG%yucMoyEQ{ za%|o$&&hJ{dE>)E_rF+Dz61{qK@P&q!*&y*+noRr(jTBygZs|iB^R1(^MIX#er2T_dIcURv zFnOvUvvW2Q=7#m5qr$s(7fa+a>z&==Rxu`KdMuhx=y^H7WS6ZAlu^Y#OcOp*GG*T^ zDWN+k)_zU4hd2Ih8aOFV5qC@;<(Dn-ft2`BlrCQA+*13zWV3x&CNtUZH6Z4f(nCj! zn{p(ca;;PW&pu0ZB>G&9&2WY(EJ{ALgUOz)JqTvOv{qtsR8&Zo#i=rCYi*c8H?cfF<7 z$AG5a(Lrj}5K*`=P^*$%I=`kZzV+h`r#stD=Zb}s>{0_8Bg&0_R&OwD=b!xJHU*by zzHj3v8R$6T{J~i|3rlW(W)9~f&lHrtWRVKmy@eDkzkq+sCP4bB8<}(zM(#T|vb*R5 zH|=T2f8$0oVd0QEzD%;6@=8w_<2hs_eCCEXouS1uRTX!7XsI5i|Jse>+=qbjC*mpK za8y(JDHAJ_v3SawpLf9=uSo5THJ!Z{PG*yvpJ%1J{AW(0Wu3q>^GHY0O`F;DyEy4; z(b@Y&aQSFfY3lZs9Gv&^nVdA%Sr@D9L{b=YErDqA`73^`C44o<*JhWMQr|LP*JoB{ z3@XnS@!L70HJD4E&KYWQW;XW~o$qaS03Oz;SEZ-sc9mIW;?^`AuHd}h8nhbI@EM{s z;~iNk@M8FqPFrp}Nc?j%ZB*^-XQ!?2*`Xq^16GW^(AsR9K+2TedCxbcweud|IZE@< zS%Lc2PJ5EtKerwB~AKXzpo~G8akM6VuW#8S2r?{$VTdj9Snfv&T zafQa!Y!&3hwP4Z>-M>AV_7u&YNc;|BDQ!8sQqW?t8_?4?r*><*VmEK0J!NtDct{(? zZBeK+9eP;ETY%`Be=DI~fiOZa_dewSmtU^@|U6kR71oXuv ze!-?Oj(Mi=J)Ic{x_wBeom}b_y+QmM&|ZT#`UVTY(qwdtWqoE&2sX8_7TPA&R7Rn! zgBcBjMccs_fnKCxVmRuPzAB@A6%$%>*w4R@K2cPdKIrh|XP2QB>!UuHUxJZ3w%|Nt zm^~&Q3-@3+3C@mz%^66$*>rl-%=sXVMKxi1&A#|EIbB7=tvHgQ0@e>i?QLTL;f_4f_(%s3c65 za(lOkdX=12uRLtN z$C$R}SYfp*GLt)`%Em92J_gpL&8&Pisn@e6Y)%tm7E~Jr7J^AFo!7jLMOx1nNta^C zJcKZ{5P~x-XC&QSet1Ch^)nKwN6qg<3e*}<#kpH1O>9*i&4uHjvm>9=?+RrS!&muh zO>6t7g%B#vN^WH9{IXDiz~%tcLp?ckgMNoV;mP7BhO!`OLB7hBeS2b4S*^M)Ir31l p?+xKk@-3bHQ}WzwG-aC&dkWtkYNz(1t)tPgTQFPTOs!UX{y(a2$^QTV literal 0 HcmV?d00001 diff --git a/po/pl.po b/po/pl.po new file mode 100644 index 0000000..ae5baf6 --- /dev/null +++ b/po/pl.po @@ -0,0 +1,3101 @@ +# Polish translation for pwdutils. +# Copyright (C) 2004, 2005, 2006, 2007, 2009, 2010 Free Software Foundation, Inc. +# This file is distributed under the same license as the pwdutils package. +# Jakub Bogusz , 2004-2010. +# +msgid "" +msgstr "" +"Project-Id-Version: pwdutils 3.2.10\n" +"Report-Msgid-Bugs-To: kukuk@thkukuk.de\n" +"POT-Creation-Date: 2011-05-10 16:46+0200\n" +"PO-Revision-Date: 2010-07-07 08:00+0200\n" +"Last-Translator: Jakub Bogusz \n" +"Language-Team: Polish \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=ISO-8859-2\n" +"Content-Transfer-Encoding: 8bit\n" + +#: lib/authentication.c:46 src/passwd.c:840 +#, c-format +msgid "%s: PAM Failure, aborting: %s\n" +msgstr "%s: Niepowodzenie PAM, zakoñczenie: %s\n" + +#: lib/authentication.c:100 +#, c-format +msgid "Enter login(%s) password:" +msgstr "Has³o logowania(%s):" + +#: lib/call_script.c:68 src/vipw.c:89 +#, c-format +msgid "Cannot fork: %s\n" +msgstr "Nie mo¿na wykonaæ fork: %s\n" + +#: lib/call_script.c:76 +#, c-format +msgid "waitpid (%d) failed: %s\n" +msgstr "waitpid (%d) nie powiod³o siê: %s\n" + +#: lib/check_name.c:70 +#, c-format +msgid "Can't compile regular expression: %s\n" +msgstr "Nie mo¿na skompilowaæ wyra¿enia regularnego: %s\n" + +#: lib/chown_dir_rec.c:54 lib/copy_dir_rec.c:147 lib/group.c:389 +#: lib/user.c:495 lib/user.c:759 src/grpck.c:277 src/grpck.c:654 +#: src/pwck.c:284 src/pwck.c:554 src/pwck.c:916 src/pwconv.c:206 +#: src/useradd.c:564 src/useradd.c:1036 src/useradd.c:1111 src/vipw.c:295 +#, c-format +msgid "Cannot change owner/group for `%s': %s\n" +msgstr "Nie mo¿na zmieniæ w³a¶ciciela/grupy pliku `%s': %s\n" + +#: lib/copy_dir_rec.c:77 lib/group.c:369 lib/user.c:475 lib/user.c:739 +#: src/grpck.c:259 src/grpck.c:634 src/pwck.c:266 src/pwck.c:536 +#: src/pwck.c:896 src/pwconv.c:198 src/useradd.c:547 src/usermod.c:543 +#: src/vipw.c:189 +#, c-format +msgid "Can't create `%s': %m\n" +msgstr "Nie mo¿na utworzyæ `%s': %m\n" + +#: lib/copy_dir_rec.c:99 +#, c-format +msgid "Cannot create directory `%s': %s\n" +msgstr "Nie mo¿na utworzyæ katalogu `%s': %s\n" + +#: lib/copy_dir_rec.c:113 lib/copy_dir_rec.c:199 lib/group.c:378 +#: lib/user.c:484 lib/user.c:748 src/grpck.c:267 src/grpck.c:643 +#: src/pwck.c:274 src/pwck.c:544 src/pwck.c:905 src/pwconv.c:215 +#: src/useradd.c:554 src/useradd.c:1046 src/useradd.c:1117 src/vipw.c:287 +#, c-format +msgid "Cannot change permissions for `%s': %s\n" +msgstr "Nie mo¿na zmieniæ uprawnieñ dla `%s': %s\n" + +#: lib/copy_dir_rec.c:138 +#, c-format +msgid "Cannot create symlink `%s': %s\n" +msgstr "Nie mo¿na utworzyæ dowi±zania symbolicznego `%s': %s\n" + +#: lib/copy_dir_rec.c:185 src/vipw.c:230 src/vipw.c:238 +#, c-format +msgid "Cannot copy `%s': %s\n" +msgstr "Nie mo¿na skopiowaæ `%s': %s\n" + +#: lib/copy_dir_rec.c:215 +#, c-format +msgid "Warning: ignoring `%s', not a regular file\n" +msgstr "" + +#: lib/copy_xattr.c:51 lib/copy_xattr.c:69 +#, c-format +msgid "Cannot get attributes for `%s': %m\n" +msgstr "Nie mo¿na odczytaæ atrybutów pliku `%s': %m\n" + +#: lib/copy_xattr.c:93 lib/copy_xattr.c:113 +#, c-format +msgid "Cannot get attribute %s of `%s': %m\n" +msgstr "Nie mo¿na odczytaæ atrybutu %s pliku `%s': %m\n" + +#: lib/copy_xattr.c:127 +#, c-format +msgid "SELinux not enabled, ignore attribute %s for `%s'.\n" +msgstr "SELinux nieaktywny, zignorowano atrybut %s pliku `%s'.\n" + +#: lib/copy_xattr.c:133 +#, c-format +msgid "Cannot set attribute %s for `%s': %m\n" +msgstr "Nie mo¿na ustawiæ atrybutu %s pliku `%s': %m\n" + +#: lib/copy_xattr.c:154 +#, c-format +msgid "%s: Can't get context for `%s'" +msgstr "%s: Nie mo¿na odczytaæ kontekstu dla `%s'" + +#: lib/copy_xattr.c:161 +#, c-format +msgid "%s: Can't set context for `%s'" +msgstr "%s: Nie mo¿na ustawiæ kontekstu dla `%s'" + +#: lib/get_ldap_password.c:39 src/chpasswd.c:224 src/chsh.c:516 +#: src/passwd.c:881 +#, c-format +msgid "Enter LDAP Password:" +msgstr "Has³o LDAP:" + +#: lib/group.c:305 src/groupadd.c:506 src/groupdel.c:365 src/grpck.c:820 +#, c-format +msgid "Cannot lock group file: already locked.\n" +msgstr "Nie mo¿na zablokowaæ pliku grup: ju¿ zablokowany.\n" + +#: lib/group.c:334 lib/group.c:409 lib/user.c:440 lib/user.c:514 +#: lib/user.c:704 lib/user.c:778 src/grpck.c:227 src/grpck.c:294 +#: src/grpck.c:599 src/grpck.c:674 src/pwck.c:234 src/pwck.c:301 +#: src/pwck.c:571 src/pwck.c:861 src/pwck.c:936 src/useradd.c:582 +#, c-format +msgid "Can't open `%s': %m\n" +msgstr "Nie mo¿na otworzyæ `%s': %m\n" + +#: lib/group.c:340 lib/user.c:446 lib/user.c:710 src/grpck.c:233 +#: src/grpck.c:605 src/grpunconv.c:225 src/pwck.c:240 src/pwck.c:510 +#: src/pwck.c:867 src/pwconv.c:224 src/pwunconv.c:172 src/useradd.c:538 +#: src/vipw.c:249 src/vipw.c:258 src/vipw.c:272 +#, c-format +msgid "Can't stat `%s': %m\n" +msgstr "Nie mo¿na wykonaæ stat `%s': %m\n" + +#: lib/group.c:435 lib/group.c:478 lib/group.c:492 lib/user.c:540 +#: lib/user.c:591 lib/user.c:605 lib/user.c:803 lib/user.c:873 src/grpck.c:703 +#: src/pwck.c:965 +#, c-format +msgid "Error while writing `%s': %m\n" +msgstr "B³±d podczas zapisu `%s': %m\n" + +#: lib/group.c:503 +#, c-format +msgid "Group not found (and not deleted): %s\n" +msgstr "Grupa nie znaleziona (i nie usuniêta): %s\n" + +#: lib/group.c:511 lib/group.c:540 lib/user.c:623 lib/user.c:653 +#: lib/user.c:883 lib/user.c:912 src/grpck.c:715 src/grpck.c:723 +#: src/pwck.c:977 src/pwck.c:985 +#, c-format +msgid "Error while closing `%s': %m\n" +msgstr "B³±d podczas zamykania `%s': %m\n" + +#: lib/group.c:520 lib/user.c:632 lib/user.c:893 +#, c-format +msgid "Error while writing to disk `%s': %m\n" +msgstr "B³±d podczas zapisu na dysk `%s': %m\n" + +#: lib/group.c:530 lib/user.c:642 lib/user.c:903 +#, c-format +msgid "Error while syncing to disk `%s': %m\n" +msgstr "B³±d podczas synchronizacji na dysk `%s': %m\n" + +#: lib/group.c:547 lib/user.c:661 lib/user.c:919 src/grpck.c:472 +#: src/grpck.c:730 src/pwck.c:468 src/pwck.c:734 src/pwck.c:992 +#, c-format +msgid "Warning: cannot create backup file `%s': %m\n" +msgstr "Uwaga: nie mo¿na utworzyæ pliku kopii zapasowej `%s': %m\n" + +#: lib/group.c:552 lib/user.c:666 lib/user.c:923 +#, c-format +msgid "Error while renaming `%s': %m\n" +msgstr "B³±d podczas zmiany nazwy `%s': %m\n" + +#: lib/group.c:693 lib/user.c:1094 +#, c-format +msgid "LDAP information update failed: %s\n" +msgstr "Uaktualnienie informacji w bazie LDAP nie powiod³o siê: %s\n" + +#: lib/group.c:702 +#, c-format +msgid "Cannot modify/add NIS group entries.\n" +msgstr "Nie mo¿na zmodyfikowaæ/dodaæ wpisów group w NIS.\n" + +#: lib/group.c:707 lib/user.c:1103 +#, c-format +msgid "Unknown service %d.\n" +msgstr "Nieznana us³uga %d.\n" + +#: lib/libldap.c:1364 lib/libldap.c:1429 lib/libldap.c:1484 lib/libldap.c:1610 +#: lib/libldap.c:1752 lib/libldap.c:1992 +#, c-format +msgid "Authentication failure.\n" +msgstr "B³±d uwierzytelnienia.\n" + +#: lib/libldap.c:1760 +#, c-format +msgid "Cannot find base ou for new users.\n" +msgstr "Nie znaleziono podstawowej ou dla nowych u¿ytkowników.\n" + +#: lib/libldap.c:1763 +#, c-format +msgid "Base DN for user account `%s' is \"%s\".\n" +msgstr "Podstawowa DN dla konta u¿ytkownika `%s' to \"%s\".\n" + +#: lib/libldap.c:2000 +#, c-format +msgid "Cannot find base ou for new groups.\n" +msgstr "Nie znaleziono podstawowej ou dla nowych grup.\n" + +#: lib/libldap.c:2003 +#, c-format +msgid "Base DN for group `%s' is \"%s\".\n" +msgstr "Podstawowa DN dla grupy `%s' to \"%s\".\n" + +#: lib/logging.c:65 +#, c-format +msgid "" +"Cannot open logging plugin:\n" +"%s\n" +msgstr "" +"Nie mo¿na otworzyæ wtyczki logowania:\n" +"%s\n" + +#: lib/logging.c:81 lib/logging.c:99 +#, c-format +msgid "" +"Cannot find symbol `%s':\n" +"%s\n" +msgstr "" +"Nie znaleziono symbolu `%s':\n" +"%s\n" + +#: lib/logging.c:140 +#, c-format +msgid "Error setting up logging subsystem!\n" +msgstr "B³±d podczas uruchamiania podsystemu logowania!\n" + +#: lib/parse_crypt_arg.c:87 +#, c-format +msgid "Can't open %s for reading: %s\n" +msgstr "Nie mo¿na otworzyæ %s do odczytu: %s\n" + +#: lib/parse_crypt_arg.c:95 +#, c-format +msgid "Unable to obtain entropy from %s\n" +msgstr "Nie mo¿na uzyskaæ entropii z %s\n" + +#: lib/parse_crypt_arg.c:110 +#, c-format +msgid "Unable to generate a salt, check your crypt settings.\n" +msgstr "Nie mo¿na wygenerowaæ zarodka, proszê sprawdziæ ustawienia crypt.\n" + +#: lib/parse_crypt_arg.c:144 +#, c-format +msgid "No support for blowfish compiled in, using MD5.\n" +msgstr "Nie wkompilowano obs³ugi blowfish. U¿yto MD5.\n" + +#: lib/parse_crypt_arg.c:149 +#, c-format +msgid "No support for %s available, using DES.\n" +msgstr "Brak obs³ugi %s, u¿yto DES.\n" + +#: lib/passwd_nisplus.c:306 +#, c-format +msgid "Could not determine hostname!\n" +msgstr "Nie mo¿na okre¶liæ nazwy hosta!\n" + +#: lib/passwd_nisplus.c:322 +#, c-format +msgid "Can't find %s's secret key\n" +msgstr "Nie znaleziono klucza tajnego %s\n" + +#: lib/passwd_nisplus.c:338 lib/passwd_nisplus.c:359 +#, c-format +msgid "Could not get public key for %s!\n" +msgstr "Nie mo¿na pobraæ klucza publicznego %s!\n" + +#: lib/passwd_nisplus.c:348 +#, c-format +msgid "Could not determine the NIS+ root server!\n" +msgstr "Nie mo¿na okre¶liæ g³ównego serwera NIS+!\n" + +#: lib/passwd_nisplus.c:366 +#, c-format +msgid "Could not create conversion key!\n" +msgstr "Nie mo¿na utworzyæ klucza konwersji!\n" + +#: lib/passwd_nisplus.c:378 +#, c-format +msgid "DES encryption failure\n" +msgstr "Niepowodzenie szyfrowania DES\n" + +#: lib/passwd_nisplus.c:390 +#, c-format +msgid "rpc.nispasswd not running on %s?\n" +msgstr "rpc.nispasswd nie dzia³a na %s?\n" + +#: lib/passwd_nisplus.c:411 +#, c-format +msgid "ERROR: password incorrect, try again\n" +msgstr "B£¡D: has³o niepoprawne, proszê spróbowaæ ponownie\n" + +#: lib/passwd_nisplus.c:413 lib/passwd_nisplus.c:481 +#, c-format +msgid "" +"ERROR: %s\n" +" password not changed\n" +msgstr "" +"B£¡D: %s\n" +" has³o nie zmienione\n" + +#: lib/passwd_nisplus.c:429 lib/passwd_nisplus.c:456 +#, c-format +msgid "DES decryption failure!\n" +msgstr "Niepowodzenie deszyfrowania DES!\n" + +#: lib/passwd_nisplus.c:514 +#, c-format +msgid "ERROR: Unknown error, don't know what happened\n" +msgstr "B£¡D: Nieznany b³±d, nie wiadomo co siê sta³o\n" + +#: lib/passwd_nisplus.c:519 +#, c-format +msgid "NIS+ password information changed for %s\n" +msgstr "Zmieniono informacje o ha¶le w NIS+ dla %s\n" + +#: lib/passwd_nisplus.c:521 +#, c-format +msgid "NIS+ credential information changed for %s\n" +msgstr "Zmieniono informacje uwierzytelniaj±ce w NIS+ dla %s\n" + +#: lib/passwd_nisplus.c:590 +#, c-format +msgid "NIS+ passwd table not found: %s\n" +msgstr "Nie znaleziono tablicy passwd w NIS+: %s\n" + +#: lib/passwd_nisplus.c:606 +#, c-format +msgid "User not found in NIS+ table.\n" +msgstr "Nie znaleziono u¿ytkownika w tabeli NIS+.\n" + +#: lib/print_error.c:30 src/rpasswd.c:120 src/rpasswdd.c:139 +#, c-format +msgid "Try `%s --help' or `%s --usage' for more information.\n" +msgstr "`%s --help' lub `%s --usage' poda wiêcej informacji.\n" + +#: lib/print_version.c:31 src/rpasswd.c:73 src/rpasswdd.c:90 +#, c-format +msgid "" +"Copyright (C) %s Thorsten Kukuk.\n" +"This is free software; see the source for copying conditions. There is NO\n" +"warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n" +msgstr "" +"Copyright (C) %s Thorsten Kukuk.\n" +"To oprogramowanie jest darmowe; warunki kopiowania s± opisane w ¼ród³ach.\n" +"Autorzy nie daj± ¯ADNYCH gwarancji, w tym równie¿ gwarancji PRZYDATNO¦CI\n" +"DO SPRZEDA¯Y LUB DO KONKRETNYCH CELÓW.\n" + +#: lib/remove_dir_rec.c:74 +#, c-format +msgid "Cannot remove file `%s': %s\n" +msgstr "Nie mo¿na usun±æ pliku `%s': %s\n" + +#: lib/remove_dir_rec.c:83 +#, c-format +msgid "Cannot remove directory `%s': %s\n" +msgstr "Nie mo¿na usun±æ katalogu `%s': %s\n" + +#: lib/selinux_utils.c:80 +#, c-format +msgid "Couldn't get security context `%s': %s\n" +msgstr "Nie mo¿na odczytaæ kontekstu bezpieczeñstwa `%s': %s\n" + +#: lib/selinux_utils.c:88 +#, c-format +msgid "Couldn't get default security context: %s\n" +msgstr "Nie mo¿na odczytaæ domy¶lnego kontekstu bezpieczeñstwa: %s\n" + +#: lib/selinux_utils.c:97 +#, c-format +msgid "Couldn't set default security context to `%s': %s\n" +msgstr "Nie mo¿na ustawiæ domy¶lnego kontekstu bezpieczeñstwa na `%s': %s\n" + +#: lib/selinux_utils.c:117 +#, c-format +msgid "Couldn't reset default security context to `%s': %s\n" +msgstr "" +"Nie mo¿na ustawiæ domy¶lnego kontekstu bezpieczeñstwa z powrotem na `%s': %" +"s\n" + +#: lib/user.c:81 +#, c-format +msgid "Can't find the NIS master server: %s\n" +msgstr "Nie znaleziono g³ównego serwera NIS: %s\n" + +#: lib/user.c:88 +#, c-format +msgid "rpc.yppasswdd not running on NIS master %s.\n" +msgstr "rpc.yppasswdd nie dzia³a na g³ównym serwerze NIS %s.\n" + +#: lib/user.c:94 +#, c-format +msgid "rpc.yppasswdd running on illegal port on NIS master %s.\n" +msgstr "rpc.yppasswdd dzia³a na niew³a¶ciwym porcie g³ównego serwera NIS %s.\n" + +#: lib/user.c:411 src/groupmod.c:434 src/pwck.c:1082 src/useradd.c:1630 +#: src/userdel.c:569 src/usermod.c:1373 +#, c-format +msgid "Cannot lock password file: already locked.\n" +msgstr "Nie mo¿na zablokowaæ pliku hase³: ju¿ zablokowany.\n" + +#: lib/user.c:615 +#, c-format +msgid "User not found (and not deleted): %s\n" +msgstr "U¿ytkownik nie znaleziony (i nie usuniêty): %s\n" + +#: lib/user.c:858 +#, c-format +msgid " Error while writing `%s': %m\n" +msgstr " B³±d podczas zapisu `%s': %m\n" + +#: lib/user.c:982 +#, c-format +msgid "Error while changing the NIS data.\n" +msgstr "B³±d podczas zmiany danych w NIS.\n" + +#: lib/user.c:991 +#, c-format +msgid "Error while changing the NIS+ data.\n" +msgstr "B³±d podczas zmiany danych w NIS+.\n" + +#: src/chage.c:56 +#, c-format +msgid "" +"Usage: %s [-D binddn][-P path][-m mindays][-M maxdays][-d lastday][-I " +"inactive][-E expiredate][-W warndays] user\n" +msgstr "" +"Sk³adnia: %s [-D binddn][-P ¶cie¿ka][-m mindni][-M maksdni][-d ostdzieñ][-I " +"nieakt][-E datawa¿no¶ci][-W dniostrze¿] u¿ytkownik\n" + +#: src/chage.c:58 +#, c-format +msgid " %s -l user\n" +msgstr " %s -l u¿ytkownik\n" + +#: src/chage.c:66 +#, c-format +msgid "" +"%s - change user password expiry information\n" +"\n" +msgstr "" +"%s - zmiana informacji o wygasaniu has³a u¿ytkownika\n" +"\n" + +#: src/chage.c:70 src/chfn.c:112 src/chpasswd.c:70 src/chsh.c:65 +#: src/gpasswd.c:94 src/groupadd.c:64 src/groupdel.c:64 src/groupmod.c:63 +#: src/passwd.c:401 src/useradd.c:67 src/userdel.c:68 src/usermod.c:67 +msgid " -D binddn Use dn \"binddn\" to bind to the LDAP directory\n" +msgstr "" +" -D binddn U¿ycie dn \"binddn\" do pod³±czenia do katalogu LDAP\n" + +#: src/chage.c:73 src/chfn.c:115 src/chpasswd.c:73 src/chsh.c:68 +#: src/passwd.c:403 src/pwconv.c:54 src/pwunconv.c:54 +msgid " -P path Search passwd and shadow file in \"path\"\n" +msgstr " -P ¶cie¿ka Szukanie plików passwd i shadow w \"¶cie¿ce\"\n" + +#: src/chage.c:76 src/chfn.c:88 src/chfn.c:123 src/chpasswd.c:79 src/chsh.c:74 +#: src/gpasswd.c:93 src/groupmod.c:77 src/passwd.c:400 src/usermod.c:91 +msgid " --service srv Use nameservice 'srv'\n" +msgstr " --service us³ U¿ycie us³ugi nazw 'us³'\n" + +#: src/chage.c:77 src/chfn.c:86 src/chfn.c:124 src/chsh.c:75 +msgid " -q, --quiet Don't be verbose\n" +msgstr " -q, --quiet Zmniejszenie liczby komunikatów\n" + +#: src/chage.c:78 src/chfn.c:89 src/chfn.c:125 src/chpasswd.c:80 src/chsh.c:76 +#: src/expiry.c:52 src/groupadd.c:74 src/groupdel.c:70 src/groupmod.c:78 +#: src/grpck.c:68 src/grpconv.c:43 src/grpunconv.c:63 src/newgrp.c:66 +#: src/pwck.c:68 src/pwconv.c:56 src/pwunconv.c:56 src/useradd.c:92 +#: src/userdel.c:74 src/usermod.c:96 src/vipw.c:72 +msgid " --help Give this help list\n" +msgstr " --help Wy¶wietlenie tego opisu\n" + +#: src/chage.c:79 src/chfn.c:90 src/chfn.c:126 src/chpasswd.c:81 src/chsh.c:77 +#: src/expiry.c:53 src/groupdel.c:71 src/grpck.c:69 src/grpconv.c:44 +#: src/grpunconv.c:64 src/newgrp.c:67 src/pwck.c:69 src/pwconv.c:57 +#: src/pwunconv.c:57 src/userdel.c:75 src/vipw.c:73 +msgid " -u, --usage Give a short usage message\n" +msgstr " -u, --usage Wy¶wietlenie krótkiej informacji o sk³adni\n" + +#: src/chage.c:80 src/chfn.c:91 src/chfn.c:127 src/chpasswd.c:82 src/chsh.c:78 +#: src/expiry.c:54 src/groupadd.c:76 src/groupdel.c:72 src/groupmod.c:80 +#: src/grpck.c:70 src/grpconv.c:45 src/grpunconv.c:65 src/newgrp.c:68 +#: src/pwck.c:70 src/pwconv.c:58 src/pwunconv.c:58 src/useradd.c:94 +#: src/userdel.c:76 src/usermod.c:98 src/vipw.c:74 +msgid " -v, --version Print program version\n" +msgstr " -v, --version Wypisanie wersji programu\n" + +#: src/chage.c:81 src/chfn.c:94 src/chfn.c:130 src/chpasswd.c:83 src/chsh.c:81 +#: src/passwd.c:409 +msgid "Valid services are: files, nis, nisplus, ldap\n" +msgstr "Poprawne us³ugi to: files, nis, nisplus, ldap\n" + +#: src/chage.c:109 +#, c-format +msgid "Minimum:\t%ld\n" +msgstr "Minimum:\t%ld\n" + +#: src/chage.c:110 +#, c-format +msgid "Maximum:\t%ld\n" +msgstr "Maksimum:\t%ld\n" + +#: src/chage.c:111 +#, c-format +msgid "Warning:\t%ld\n" +msgstr "Ostrze¿enie:\t%ld\n" + +#: src/chage.c:112 +#, c-format +msgid "Inactive:\t%ld\n" +msgstr "Nieaktywno¶æ:\t%ld\n" + +#: src/chage.c:113 +#, c-format +msgid "Last Change:\t\t" +msgstr "Ostatnia zmiana:\t\t" + +#: src/chage.c:115 +#, c-format +msgid "Unknown, password is forced to change at next login\n" +msgstr "Nieznana, wymuszenie zmiany has³a przy nastêpnym logowaniu\n" + +#: src/chage.c:117 src/chage.c:123 src/chage.c:129 src/chage.c:135 +#, c-format +msgid "Never\n" +msgstr "Nigdy\n" + +#: src/chage.c:120 +#, c-format +msgid "Password Expires:\t" +msgstr "Has³o wygasa:\t" + +#: src/chage.c:126 +#, c-format +msgid "Password Inactive:\t" +msgstr "Has³o nieaktywne:\t" + +#: src/chage.c:133 +#, c-format +msgid "Account Expires:\t" +msgstr "Konto wygasa:\t" + +#: src/chage.c:147 +msgid "Minimum Password Age" +msgstr "Minimalny wiek has³a" + +#: src/chage.c:154 src/chage.c:170 src/chage.c:186 +#, c-format +msgid "Input is no integer value\n" +msgstr "Wej¶cie nie jest warto¶ci± ca³kowit±\n" + +#: src/chage.c:156 src/chage.c:172 src/chage.c:188 +#, c-format +msgid "Negative numbers are not allowed as input (except -1)\n" +msgstr "Liczby ujemne nie s± dopuszczalne na wej¶ciu (z wyj±tkiem -1)\n" + +#: src/chage.c:163 +msgid "Maximum Password Age" +msgstr "Maksymalny wiek has³a" + +#: src/chage.c:179 +msgid "Password Expiration Warning" +msgstr "Ostrze¿enie o wygasaniu has³a" + +#: src/chage.c:195 +msgid "Password Inactive" +msgstr "Has³o nieaktywne" + +#: src/chage.c:203 +msgid "Last Password Change (YYYY-MM-DD)" +msgstr "Ostatnia zmiana has³a (RRRR-MM-DD)" + +#: src/chage.c:217 src/chage.c:237 +#, c-format +msgid "Invalid date\n" +msgstr "Nieprawid³owa data\n" + +#: src/chage.c:223 +msgid "Account Expiration Date (YYYY-MM-DD)" +msgstr "Data wyga¶niêcia has³a (RRRR-MM-DD)" + +#: src/chage.c:340 src/chfn.c:478 src/chsh.c:337 +#, c-format +msgid "Only root is allowed to specify another path\n" +msgstr "Tylko root mo¿e podaæ inn± ¶cie¿kê\n" + +#: src/chage.c:370 src/chfn.c:439 src/chpasswd.c:171 src/chsh.c:320 +#: src/gpasswd.c:197 src/groupadd.c:376 src/groupdel.c:224 src/groupmod.c:300 +#: src/passwd.c:523 src/useradd.c:1403 src/userdel.c:454 src/usermod.c:978 +#, c-format +msgid "Service `%s' not supported.\n" +msgstr "Us³uga `%s' nie jest obs³ugiwana.\n" + +#: src/chage.c:395 src/chfn.c:510 src/chpasswd.c:208 src/chsh.c:363 +#: src/chsh.c:370 src/expiry.c:247 src/gpasswd.c:230 src/groupadd.c:413 +#: src/groupdel.c:249 src/groupmod.c:333 src/grpck.c:806 src/grpconv.c:100 +#: src/grpunconv.c:197 src/newgrp.c:155 src/passwd.c:589 src/pwck.c:1068 +#: src/pwconv.c:170 src/pwunconv.c:144 src/rpasswd.c:491 src/rpasswdd.c:1339 +#: src/useradd.c:1511 src/userdel.c:479 src/usermod.c:1014 src/vipw.c:410 +#, c-format +msgid "%s: Too many arguments.\n" +msgstr "%s: Zbyt du¿o argumentów.\n" + +#: src/chage.c:402 +#, c-format +msgid "%s: Do not include \"l\" with other flags\n" +msgstr "%s: Nie mo¿na ³±czyæ \"l\" z innymi flagami\n" + +#: src/chage.c:427 src/chfn.c:531 src/chsh.c:397 src/expiry.c:267 +#: src/gpasswd.c:265 src/groupadd.c:450 src/groupdel.c:278 src/groupmod.c:362 +#: src/passwd.c:656 src/useradd.c:1545 src/userdel.c:507 src/usermod.c:1048 +#, c-format +msgid "%s: Cannot determine your user name.\n" +msgstr "%s: Nie mo¿na okre¶liæ nazwy u¿ytkownika.\n" + +#: src/chage.c:446 src/chfn.c:566 src/chsh.c:431 src/userdel.c:527 +#, c-format +msgid "%s: User `%s' is not known to service `%s'.\n" +msgstr "%s: U¿ytkownik `%s' nie jest znany us³udze `%s'.\n" + +#: src/chage.c:449 src/chfn.c:555 src/chfn.c:569 src/chsh.c:421 src/chsh.c:434 +#: src/passwd.c:675 src/passwd.c:696 src/userdel.c:530 +#, c-format +msgid "%s: Unknown user `%s'.\n" +msgstr "%s: Nieznany u¿ytkownik `%s'.\n" + +#: src/chage.c:467 +#, c-format +msgid "Only an administrator is allowed to change aging information.\n" +msgstr "Tylko administrator mo¿e zmieniaæ informacje o przedawnianiu.\n" + +#: src/chage.c:483 +#, c-format +msgid "This system does not support shadow accounts.\n" +msgstr "Ten system nie obs³uguje kont shadow.\n" + +#: src/chage.c:489 +#, c-format +msgid "This account does not have a shadow entry.\n" +msgstr "To konto nie ma wpisu shadow.\n" + +#: src/chage.c:535 +#, c-format +msgid "You can only list your own aging information.\n" +msgstr "U¿ytkownik mo¿e wypisywaæ tylko w³asne informacje o przedawnianiu.\n" + +#: src/chage.c:542 src/expiry.c:306 src/passwd.c:1019 +#, c-format +msgid "%s: Failed to drop privileges: %s\n" +msgstr "%s: Nie uda³o siê porzuciæ uprawnieñ: %s\n" + +#: src/chage.c:554 +#, c-format +msgid "No aging information available for %s.\n" +msgstr "Brak informacji o przedawnianiu dla %s.\n" + +#: src/chage.c:574 +#, c-format +msgid "Changing aging information for %s.\n" +msgstr "Zmiana informacji o przedawnianiu dla %s.\n" + +#: src/chage.c:580 src/chage.c:667 +#, c-format +msgid "Aging information not changed.\n" +msgstr "Informacje o przedawnianiu nie zmienione.\n" + +#: src/chage.c:623 +#, c-format +msgid "Lastday is no date and no integer value >= -1\n" +msgstr "Ostatni dzieñ nie jest dat± ani warto¶ci± ca³kowit± >= -1\n" + +#: src/chage.c:643 +#, c-format +msgid "Expiredate is no date and no integer value >= -1\n" +msgstr "Data wa¿no¶ci nie jest dat± ani warto¶ci± ca³kowit± >= -1\n" + +#: src/chage.c:652 +#, c-format +msgid "Error while parsing options.\n" +msgstr "B³±d podczas przetwarzania opcji.\n" + +#: src/chage.c:698 +#, c-format +msgid "Error while converting to shadow account.\n" +msgstr "B³±d podczas konwersji na konto shadow.\n" + +#: src/chage.c:716 +#, c-format +msgid "Error while changing aging information.\n" +msgstr "B³±d podczas zmiany informacji o przedawnianiu.\n" + +#: src/chage.c:726 +#, c-format +msgid "Aging information changed.\n" +msgstr "Informacje o przedawnianiu zmienione.\n" + +#: src/chfn.c:71 +#, c-format +msgid "" +"Usage: %s [-f name] [-r room] [-w work_phone]\n" +" [-h home_phone] [-o other] [-q] [-u] [-v] [user]\n" +msgstr "" +"Sk³adnia: %s [-f personalia] [-r pokój] [-w telefon_s³u¿bowy]\n" +" [-h telefon_domowy] [-o inne] [-q] [-u] [-v] [u¿ytkownik]\n" + +#: src/chfn.c:79 src/chfn.c:109 +#, c-format +msgid "" +"%s - change user name and information\n" +"\n" +msgstr "" +"%s - zmiana personaliów i informacji o u¿ytkowniku\n" +"\n" + +#: src/chfn.c:81 src/chfn.c:117 +msgid " -f full-name Change your real name\n" +msgstr " -f personalia Zmiana imienia i nazwiska\n" + +#: src/chfn.c:82 +msgid " -r room Change your office room number\n" +msgstr " -r pokój Zmiana numeru pokoju w biurze\n" + +#: src/chfn.c:83 +msgid " -w work_phone Change your office phone number\n" +msgstr " -w tel_s³u¿b Zmiana numeru telefonu w biurze\n" + +#: src/chfn.c:84 +msgid " -h home_phone Change your home phone number\n" +msgstr " -h tel_domowy Zmiana numeru telefonu domowego\n" + +#: src/chfn.c:85 +msgid " -o other Change the undefined portions of the GECOS field\n" +msgstr " -o inne Zmiana niezdefiniowanych czê¶ci pola GECOS\n" + +#: src/chfn.c:101 +#, c-format +msgid "" +"Usage: %s [-D binddn] [-P path] [-f name] [-o office] [-p office-phone]\n" +" [-h home-phone][-m other] [-q] [-u] [-v] [user]\n" +msgstr "" +"Sk³adnia: %s [-D binddn] [-P ¶cie¿ka] [-f personalia] [-o pokój]\n" +" [-p telefon_s³u¿bowy] [-h telefon_domowy] [-m inne] [-q] [-u] [-" +"v]\n" +" u¿ytkownik\n" + +#: src/chfn.c:118 +msgid " -o office Change your office room number\n" +msgstr " -o pokój Zmiana numeru pokoju w biurze\n" + +#: src/chfn.c:119 +msgid " -p phone Change your office phone number\n" +msgstr " -p telefon Zmiana numeru telefonu w biurze\n" + +#: src/chfn.c:120 +msgid " -h home-phone Change your home phone number\n" +msgstr " -h tel_domowy Zmiana numeru telefonu domowego\n" + +#: src/chfn.c:121 +msgid " -m other Change the undefined portions of the GECOS field\n" +msgstr " -m inne Zmiana niezdefiniowanyh czê¶ci pola GECOS\n" + +#: src/chfn.c:165 +#, c-format +msgid "Enter the new value, or press ENTER for the default\n" +msgstr "Proszê wpisaæ now± warto¶æ lub nacisn±æ ENTER dla domy¶lnej\n" + +#: src/chfn.c:171 +msgid "Full Name" +msgstr "Imiê i nazwisko" + +#: src/chfn.c:173 +#, c-format +msgid "\tFull Name: %s\n" +msgstr "\tImiê i nazwisko: %s\n" + +#: src/chfn.c:176 +msgid "Room Number" +msgstr "Numer pokoju" + +#: src/chfn.c:178 +#, c-format +msgid "\tRoom Number: %s\n" +msgstr "\tNumer pokoju: %s\n" + +#: src/chfn.c:181 +msgid "Work Phone" +msgstr "Telefon s³u¿bowy" + +#: src/chfn.c:183 +#, c-format +msgid "\tWork Phone: %s\n" +msgstr "\tTelefon s³u¿bowy: %s\n" + +#: src/chfn.c:186 +msgid "Home Phone" +msgstr "Telefon domowy" + +#: src/chfn.c:188 +#, c-format +msgid "\tHome Phone: %s\n" +msgstr "\tTelefon domowy: %s\n" + +#: src/chfn.c:191 +msgid "Other" +msgstr "Inne" + +#: src/chfn.c:193 +#, c-format +msgid "\tOther: %s\n" +msgstr "\tInne: %s\n" + +#: src/chfn.c:255 +#, c-format +msgid "%s: The characters '%s\"' are not allowed.\n" +msgstr "%s: Znaki '%s\"' nie s± dopuszczalne.\n" + +#: src/chfn.c:261 src/chsh.c:204 +#, c-format +msgid "%s: Control characters are not allowed.\n" +msgstr "%s: Znaki steruj±ce nie s± dopuszczalne.\n" + +#: src/chfn.c:331 src/chsh.c:257 +#, c-format +msgid "%s: Don't know what I should do.\n" +msgstr "%s: Nie wiem co robiæ.\n" + +#: src/chfn.c:377 src/chfn.c:395 src/chfn.c:407 src/chfn.c:451 src/chfn.c:460 +#: src/gpasswd.c:296 src/passwd.c:614 src/passwd.c:628 +#, c-format +msgid "%s: Permission denied.\n" +msgstr "%s: Brak uprawnieñ.\n" + +#: src/chfn.c:586 src/chsh.c:451 src/passwd.c:712 +msgid "Unknown user context" +msgstr "Nieznany kontekst u¿ytkownika" + +#: src/chfn.c:588 +#, c-format +msgid "%s: %s is not authorized to change the finger information for %s.\n" +msgstr "" +"%s: %s nie jest autoryzowany by zmieniaæ informacje o u¿ytkowniku %s.\n" + +#: src/chfn.c:601 +#, c-format +msgid "SELinux is in permissive mode, continuing.\n" +msgstr "SELinux jest w trybie przyzwalaj±cym, kontynuacja.\n" + +#: src/chfn.c:619 +#, c-format +msgid "You cannot change the finger information for `%s'.\n" +msgstr "Brak uprawnieñ do zmiany informacji o u¿ytkowniku `%s'.\n" + +#: src/chfn.c:626 +#, c-format +msgid "Changing finger information for %s.\n" +msgstr "Zmiana informacji o u¿ytkowniku %s.\n" + +#: src/chfn.c:658 +#, c-format +msgid "%s: Invalid name: `%s'\n" +msgstr "%s: Nieprawid³owe personalia: `%s'\n" + +#: src/chfn.c:666 +#, c-format +msgid "%s: Invalid room number: `%s'\n" +msgstr "%s: Nieprawid³owy numer pokoju: `%s'\n" + +#: src/chfn.c:674 +#, c-format +msgid "%s: Invalid work phone: `%s'\n" +msgstr "%s: Nieprawid³owy telefon s³u¿bowy: `%s'\n" + +#: src/chfn.c:682 +#, c-format +msgid "%s: Invalid home phone: `%s'\n" +msgstr "%s: Nieprawid³owy telefon domowy: `%s'\n" + +#: src/chfn.c:690 +#, c-format +msgid "%s: `%s' contains illegal characters.\n" +msgstr "%s: `%s' zawiera nielegalne znaki.\n" + +#: src/chfn.c:716 +#, c-format +msgid "Finger information not changed.\n" +msgstr "Informacje o u¿ytkowniku nie zmienione.\n" + +#: src/chfn.c:724 +#, c-format +msgid "Error while changing finger information.\n" +msgstr "B³±d podczas zmiany informacji o u¿ytkowniku.\n" + +#: src/chfn.c:734 +#, c-format +msgid "Finger information changed.\n" +msgstr "Informacje o u¿ytkowniku zmienione.\n" + +#: src/chpasswd.c:59 +#, c-format +msgid "Usage: %s [-D binddn] [-P path] [-e] [-c des|md5|blowfish] [file]\n" +msgstr "" +"Sk³adnia: %s [-D binddn] [-P ¶cie¿ka] [-e] [-c des|md5|blowfish] [plik]\n" + +#: src/chpasswd.c:67 +#, c-format +msgid "" +"%s - update password entries in batch\n" +"\n" +msgstr "" +"%s - zmiana wpisów o has³ach w trybie wsadowym\n" +"\n" + +#: src/chpasswd.c:75 +msgid "" +" -c, --crypt Password should be encrypted with DES, MD5 or blowfish\n" +msgstr " -c, --crypt Kodowanie has³a algorytmem DES, MD5 lub blowfish\n" + +#: src/chpasswd.c:77 +msgid " -e, --encrypted The passwords are in encrypted form\n" +msgstr " -e, --encrypted Has³a s± w postaci zaszyfrowanej\n" + +#: src/chpasswd.c:278 +#, c-format +msgid "%s: line %ld: missing new password\n" +msgstr "%s: linia %ld: brak nowego has³a\n" + +#: src/chpasswd.c:287 +#, c-format +msgid "%s: line %ld: unknown user %s\n" +msgstr "%s: linia %ld: nieznany u¿ytkownik %s\n" + +#: src/chpasswd.c:318 src/gpasswd.c:425 +#, c-format +msgid "Cannot create salt for standard crypt" +msgstr "Nie mo¿na utworzyæ zarodka dla zwyk³ego crypta" + +#: src/chpasswd.c:334 src/gpasswd.c:460 +#, c-format +msgid "Cannot create salt for MD5 crypt" +msgstr "Nie mo¿na utworzyæ zarodka dla szyfru MD5" + +#: src/chpasswd.c:350 src/gpasswd.c:441 +#, c-format +msgid "Cannot create salt for blowfish crypt" +msgstr "Nie mo¿na utworzyæ zarodka dla szyfru blowfish" + +#: src/chpasswd.c:380 +#, c-format +msgid "%s: line %ld: cannot update password entry\n" +msgstr "%s: linia %ld: nie mo¿na uaktualniæ wpisu o ha¶le\n" + +#: src/chpasswd.c:395 +#, c-format +msgid "%s: errors occurred, %ld passwords not updated\n" +msgstr "%s: wyst±pi³y b³êdy, %ld hase³ nie zosta³o zmienionych\n" + +#: src/chsh.c:54 +#, c-format +msgid "" +"Usage: %s [-D binddn] [-P path] [-s shell] [-l] [-q]\n" +" [--help] [--usage] [--version] [user]\n" +msgstr "" +"Sk³adnia: %s [-D binddn] [-P ¶cie¿ka] [-s pow³oka] [-l] [-q]\n" +" [--help] [--usage] [--version] [u¿ytkownik]\n" + +#: src/chsh.c:62 +#, c-format +msgid "" +"%s - change login shell\n" +"\n" +msgstr "" +"%s - zmiana pow³oki logowania\n" +"\n" + +#: src/chsh.c:70 +msgid " -l List allowed shells from /etc/shells\n" +msgstr " -l Wypisanie dopuszczalnych pow³ok z /etc/shells\n" + +#: src/chsh.c:72 +msgid " -s shell Use 'shell' as new login shell\n" +msgstr " -s pow³oka U¿ycie 'pow³oki' jako nowej pow³oki logowania\n" + +#: src/chsh.c:109 +#, c-format +msgid "No known shells.\n" +msgstr "Brak znanych pow³ok.\n" + +#: src/chsh.c:177 +#, c-format +msgid "%s: Shell must be a full path name.\n" +msgstr "%s: Pow³oka musi byæ pe³n± ¶cie¿k±.\n" + +#: src/chsh.c:183 +#, c-format +msgid "%s: `%s' does not exist.\n" +msgstr "%s: `%s' nie istnieje.\n" + +#: src/chsh.c:189 +#, c-format +msgid "%s: `%s' is not executable.\n" +msgstr "%s: `%s' nie jest wykonywalny.\n" + +#: src/chsh.c:199 +#, c-format +msgid "%s: '%c' is not allowed.\n" +msgstr "%s: '%c' nie jest dopuszczalny.\n" + +#: src/chsh.c:212 +#, c-format +msgid "Warning: \"%s\" is not listed in /etc/shells.\n" +msgstr "Uwaga: \"%s\" nie jest wymieniony w /etc/shells.\n" + +#: src/chsh.c:215 +#, c-format +msgid "%s: \"%s\" is not listed in /etc/shells.\n" +msgstr "%s: \"%s\" nie jest wymieniony w /etc/shells.\n" + +#: src/chsh.c:217 +#, c-format +msgid "%s: Use -l option to see list.\n" +msgstr "%s: Opcja -l wy¶wietli listê.\n" + +#: src/chsh.c:453 +#, c-format +msgid "%s: %s is not authorized to change the shell of `%s'.\n" +msgstr "%s: %s nie jest autoryzowany do zmiany pow³oki `%s'.\n" + +#: src/chsh.c:466 src/passwd.c:728 +#, c-format +msgid "SELinux is in permissive mode, continuing\n" +msgstr "SELinux jest w trybie przyzwalaj±cym, kontynuacja\n" + +#: src/chsh.c:484 +#, c-format +msgid "You cannot change the shell for %s.\n" +msgstr "Brak uprawnieñ do zmiany pow³oki u¿ytkownika %s.\n" + +#: src/chsh.c:495 +#, c-format +msgid "You cannot change a restricted shell.\n" +msgstr "Nie mo¿na zmieniæ pow³oki restrykcyjnej.\n" + +#: src/chsh.c:501 +#, c-format +msgid "Changing login shell for %s.\n" +msgstr "Zmiana pow³oki logowania dla %s.\n" + +#: src/chsh.c:545 +#, c-format +msgid "Enter the new value, or press return for the default.\n" +msgstr "Proszê wpisaæ now± warto¶æ lub nacisn±æ Enter dla domy¶lnej.\n" + +#: src/chsh.c:546 +msgid "Login Shell" +msgstr "Pow³oka logowania" + +#: src/chsh.c:554 +#, c-format +msgid "Shell not changed.\n" +msgstr "Pow³oka nie zmieniona.\n" + +#: src/chsh.c:568 +#, c-format +msgid "Error while changing login shell.\n" +msgstr "B³±d podczas zmiany pow³oki logowania.\n" + +#: src/chsh.c:578 +#, c-format +msgid "Shell changed.\n" +msgstr "Pow³oka zmieniona.\n" + +#: src/expiry.c:40 +#, c-format +msgid "Usage: %s [-f]\n" +msgstr "Sk³adnia: %s [-f]\n" + +#: src/expiry.c:48 +#, c-format +msgid "" +"%s - check password expiration and enforce password change\n" +"\n" +msgstr "" +"%s - sprawdzenie przeterminowania has³a i wymuszenie zmiany has³a\n" +"\n" + +#: src/expiry.c:50 +msgid " -f, --force The caller is forced to change the password\n" +msgstr " -f, --force Wywo³uj±cy bêdzie zmuszony do zmiany has³a\n" + +#: src/expiry.c:100 +#, c-format +msgid "Age field for %s is wrong" +msgstr "Pole wieku has³a %s jest b³êdne" + +#: src/expiry.c:121 +#, c-format +msgid "Your password has expired. Choose a new password." +msgstr "Has³o wygas³o. Nale¿y wybraæ nowe has³o." + +#: src/expiry.c:139 +#, c-format +msgid "Your login has expired. Contact the system administrator.\n" +msgstr "Konto wygas³o. Nale¿y skontaktowaæ siê z administratorem systemu.\n" + +#: src/expiry.c:147 +#, c-format +msgid "Password changing requested. Choose a new password.\n" +msgstr "Za¿±dano zmiany has³a. Nale¿y wybraæ nowe has³o.\n" + +#: src/expiry.c:157 +#, c-format +msgid "Your password is inactive. Contact the system administrator.\n" +msgstr "" +"Has³o jest nieaktywne. Nale¿y skontaktowaæ siê z administratorem systemu.\n" + +#: src/expiry.c:162 +#, c-format +msgid "Your password has expired. Choose a new password.\n" +msgstr "Has³o wygas³o. Nale¿y wybraæ nowe has³o.\n" + +#: src/expiry.c:171 +#, c-format +msgid "Your password will expire in %ld days.\n" +msgstr "Has³o wyga¶nie za %ld dni.\n" + +#: src/expiry.c:174 +#, c-format +msgid "Your password will expire tomorrow.\n" +msgstr "Has³o wyga¶nie jutro.\n" + +#: src/expiry.c:176 +#, c-format +msgid "Your password will expire within 24 hours.\n" +msgstr "Has³o wyga¶nie w ci±gu 24 godzin.\n" + +#: src/gpasswd.c:63 src/passwd.c:796 +#, c-format +msgid "%s: error reading from stdin!\n" +msgstr "%s: b³±d podczas odczytu ze standardowego wej¶cia!\n" + +#: src/gpasswd.c:80 +#, c-format +msgid "Usage: %s [-r|-l|-u] group\n" +msgstr "Sk³adnia: %s [-r|-l|-u] grupa\n" + +#: src/gpasswd.c:87 +#, c-format +msgid "" +"%s - change group password\n" +"\n" +msgstr "" +"%s - zmiana has³a grupy\n" +"\n" + +#: src/gpasswd.c:88 +msgid " -r Remove the password for this group\n" +msgstr " -r Usuniêcie has³a dla tej grupy\n" + +#: src/gpasswd.c:89 +msgid " -l Locks the password entry for \"group\"\n" +msgstr " -l Zablokowanie wpisu o ha¶le dla grupy\n" + +#: src/gpasswd.c:91 +msgid " -u Try to unlock the password entry for \"group\"\n" +msgstr " -u Próba odblokowania wpisu o ha¶le dla grupy\n" + +#: src/gpasswd.c:96 +msgid " -P path Search group file in \"path\"\n" +msgstr " -P ¶cie¿ka Szukanie pliku grup w \"¶cie¿ce\"\n" + +#: src/gpasswd.c:98 src/passwd.c:406 src/rpasswd.c:111 src/rpasswdd.c:130 +msgid " --help Give this help list\n" +msgstr " --help Wy¶wietlenie tego opisu\n" + +#: src/gpasswd.c:99 src/passwd.c:407 src/rpasswd.c:112 src/rpasswdd.c:131 +msgid " --usage Give a short usage message\n" +msgstr " --usage Wy¶wietlenie krótkiej informacji o sk³adni\n" + +#: src/gpasswd.c:100 src/passwd.c:408 src/rpasswd.c:113 src/rpasswdd.c:132 +msgid " --version Print program version\n" +msgstr " --version Wypisanie wersji programu\n" + +#: src/gpasswd.c:101 +msgid " --stdin Receive input from stdin instead of /dev/tty\n" +msgstr " --stdin Odbiór wej¶cia z stdin zamiast /dev/tty\n" + +#: src/gpasswd.c:102 +msgid "Valid services for -r are: files, nis, nisplus, ldap\n" +msgstr "Poprawne us³ugi dla -r to: files, nis, nisplus, ldap\n" + +#: src/gpasswd.c:238 +#, c-format +msgid "%s: Group argument missing.\n" +msgstr "%s: Nie podano nazwy grupy.\n" + +#: src/gpasswd.c:277 +#, c-format +msgid "%s: Group `%s' is not known to service `%s'.\n" +msgstr "%s: Grupa `%s' nie jest znana us³udze `%s'.\n" + +#: src/gpasswd.c:280 src/groupdel.c:300 src/groupmod.c:384 src/useradd.c:220 +#: src/usermod.c:185 +#, c-format +msgid "%s: Unknown group `%s'.\n" +msgstr "%s: Nieznana grupa `%s'.\n" + +#: src/gpasswd.c:314 src/passwd.c:909 src/usermod.c:1125 +#, c-format +msgid "Cannot unlock the password for `%s'!\n" +msgstr "Nie mo¿na odblokowaæ has³a dla `%s'!\n" + +#: src/gpasswd.c:336 src/passwd.c:936 src/usermod.c:1104 +#, c-format +msgid "Password for `%s' is already locked!\n" +msgstr "Has³o dla `%s' jest ju¿ zablokowane!\n" + +#: src/gpasswd.c:348 +#, c-format +msgid "Changing the password for group %s.\n" +msgstr "Zmiana has³a dla grupy %s.\n" + +#: src/gpasswd.c:355 src/gpasswd.c:357 +msgid "New Password: " +msgstr "Nowe has³o: " + +#: src/gpasswd.c:366 +#, c-format +msgid "Password change aborted.\n" +msgstr "Zmiana has³a przerwana.\n" + +#: src/gpasswd.c:379 src/gpasswd.c:381 +msgid "Re-enter new password: " +msgstr "Ponownie nowe has³o: " + +#: src/gpasswd.c:392 +#, c-format +msgid "Sorry, passwords do not match.\n" +msgstr "Niestety has³a siê ró¿ni±.\n" + +#: src/gpasswd.c:400 +#, c-format +msgid "%s: Try again later.\n" +msgstr "%s: Proszê spróbowaæ pó¼niej.\n" + +#: src/gpasswd.c:448 +#, c-format +msgid "No support for blowfish compiled in. Using MD5\n" +msgstr "Nie wkompilowano obs³ugi blowfish. U¿yto MD5.\n" + +#: src/gpasswd.c:475 +#, c-format +msgid "%s: Error changing password.\n" +msgstr "%s: B³±d podczas zmiany has³a.\n" + +#: src/gpasswd.c:484 +#, c-format +msgid "Password removed.\n" +msgstr "Has³o usuniête.\n" + +#: src/gpasswd.c:490 src/passwd.c:978 +#, c-format +msgid "Password changed.\n" +msgstr "Has³o zmienione.\n" + +#: src/groupadd.c:54 +#, c-format +msgid "" +"Usage: %s [-D binddn] [-g gid [-o]] [-r] [-P path] [-p password] group\n" +msgstr "" +"Sk³adnia: %s [-D binddn] [-g gid [-o]] [-r] [-P ¶cie¿ka] [-o has³o] grupa\n" + +#: src/groupadd.c:62 +#, c-format +msgid "" +"%s - create a new group\n" +"\n" +msgstr "" +"%s - utworzenie nowej grupy\n" +"\n" + +#: src/groupadd.c:65 +msgid " -g gid Force the new groupid to be the given number\n" +msgstr "" +" -g gid Wymuszenie nadania gid jako identyfikatora nowej grupy\n" + +#: src/groupadd.c:67 src/groupmod.c:70 src/useradd.c:80 src/usermod.c:79 +msgid " -o Allow duplicate (non-unique) UID\n" +msgstr " -o Zezwolenie na powtórzone (nieunikalne) UID-y\n" + +#: src/groupadd.c:68 src/groupdel.c:67 src/groupmod.c:71 src/grpck.c:61 +#: src/pwck.c:61 src/useradd.c:81 src/userdel.c:71 src/usermod.c:84 +msgid " -P path Search passwd, shadow and group file in \"path\"\n" +msgstr "" +" -P ¶cie¿ka Szukanie plików passwd, shadow i group w \"¶cie¿ce\"\n" + +#: src/groupadd.c:70 src/groupmod.c:73 src/useradd.c:83 src/usermod.c:86 +msgid " -p password Encrypted password as returned by crypt(3)\n" +msgstr "" +" -p has³o Zaszyfrowane has³o w postaci zwróconej przez crypt(3)\n" + +#: src/groupadd.c:72 src/useradd.c:89 +msgid " -r, --system Create a system account\n" +msgstr " -r, --system Utworzenie konta systemowego\n" + +#: src/groupadd.c:73 src/groupdel.c:69 src/useradd.c:91 src/userdel.c:73 +msgid " --service srv Add account to nameservice 'srv'\n" +msgstr " --us³uga us³ Dodanie konta do us³ugi nazw 'us³'\n" + +#: src/groupadd.c:75 src/groupmod.c:79 src/useradd.c:93 src/usermod.c:97 +msgid " --usage Give a short usage message\n" +msgstr " --usage Wy¶wietlenie krótkiej informacji o sk³adni\n" + +#: src/groupadd.c:77 src/groupdel.c:73 src/useradd.c:95 src/userdel.c:77 +msgid "Valid services for --service are: files, ldap\n" +msgstr "Poprawne us³ugi dla --services to: files, ldap\n" + +#: src/groupadd.c:257 +#, c-format +msgid "%s: Can't get unique gid in range %u - %u.\n" +msgstr "" +"%s: Nie mo¿na uzyskaæ unikalnego identyfikatora grupy z przedzia³u %u - %u.\n" + +#: src/groupadd.c:312 +#, c-format +msgid "%s: You are using an undocumented option (-f)!\n" +msgstr "%s: U¿yto nieudokumentowanej opcji (-f)!\n" + +#: src/groupadd.c:320 src/groupadd.c:330 +#, c-format +msgid "%s: Invalid numeric argument `%s' for Group ID.\n" +msgstr "%s: Nieprawid³owy argument liczbowy `%s' dla identyfikatora grupy.\n" + +#: src/groupadd.c:352 src/useradd.c:1328 src/usermod.c:925 +#, c-format +msgid "%s: Invalid characters in password `%s'.\n" +msgstr "%s: Nieprawid³owe znaki w ha¶le `%s'.\n" + +#: src/groupadd.c:398 +#, c-format +msgid "%s: You cannot use --gid and --preferred-gid at the same time.\n" +msgstr "%s: Nie mo¿na u¿yæ jednocze¶nie --gid i --preferred-gid.\n" + +#: src/groupadd.c:419 src/groupdel.c:255 src/groupmod.c:339 src/useradd.c:1517 +#: src/userdel.c:485 src/usermod.c:1020 +#, c-format +msgid "%s: Too few arguments.\n" +msgstr "%s: Zbyt ma³o argumentów.\n" + +#: src/groupadd.c:425 +#, c-format +msgid "%s: You cannot use -f with -o.\n" +msgstr "%s: Nie mo¿na u¿yæ opcji -f z -o.\n" + +#: src/groupadd.c:474 +#, c-format +msgid "%s: GID %u is not unique, using another one.\n" +msgstr "%s: GID %u nie jest unikalny, u¿yto innego.\n" + +#: src/groupadd.c:484 src/groupmod.c:398 +#, c-format +msgid "%s: GID %u is not unique.\n" +msgstr "%s: GID %u nie jest unikalny.\n" + +#: src/groupadd.c:495 src/groupmod.c:411 +#, c-format +msgid "%s: Invalid group name `%s'.\n" +msgstr "%s: Nieprawid³owa nazwa grupy `%s'.\n" + +#: src/groupadd.c:513 src/groupmod.c:421 +#, c-format +msgid "%s: Group `%s' already exists.\n" +msgstr "%s: Grupa `%s' ju¿ istnieje.\n" + +#: src/groupadd.c:555 +#, c-format +msgid "%s: Cannot add group to LDAP database without DN.\n" +msgstr "%s: Nie mo¿na dodaæ grupy do bazy danych LDAP bez DN.\n" + +#: src/groupadd.c:572 +#, c-format +msgid "%s: Group not added to LDAP database.\n" +msgstr "%s: Grupa nie dodana do bazy danych LDAP.\n" + +#: src/groupadd.c:604 +#, c-format +msgid "%s: GROUPADD_CMD fails with exit code %d.\n" +msgstr "%s: GROUPADD_CMD nie powiod³o siê zwracaj±c kod wyj¶cia %d.\n" + +#: src/groupdel.c:54 +#, c-format +msgid "Usage: %s [-D binddn] [-P path] group\n" +msgstr "Sk³adnia: %s [-D binddn] [-P ¶cie¿ka] grupa\n" + +#: src/groupdel.c:61 +#, c-format +msgid "" +"%s - delete a group\n" +"\n" +msgstr "" +"%s - usuniêcie grupy\n" +"\n" + +#: src/groupdel.c:130 src/groupdel.c:147 +#, c-format +msgid "%s: GID `%u' is primary group of `%s'.\n" +msgstr "%s: GID `%u' jest g³ówn± grup± u¿ytkownika `%s'.\n" + +#: src/groupdel.c:297 src/groupmod.c:381 src/useradd.c:214 src/usermod.c:179 +#, c-format +msgid "%s: Group `%s' not found in service `%s'.\n" +msgstr "%s: Nie znaleziono grupy `%s' w us³udze `%s'.\n" + +#: src/groupdel.c:310 +#, c-format +msgid "%s: Cannot remove user's primary group.\n" +msgstr "%s: Nie mo¿na usun±æ g³ównej grupy u¿ytkownika.\n" + +#: src/groupdel.c:325 +#, c-format +msgid "%s: Cannot delete group from LDAP database without DN.\n" +msgstr "%s: Nie mo¿na usun±æ grupy z bazy danych LDAP bez DN.\n" + +#: src/groupdel.c:342 +#, c-format +msgid "%s: Group not deleted from LDAP database.\n" +msgstr "%s: Grupa nie usuniêta z bazy danych LDAP.\n" + +#: src/groupdel.c:355 +#, c-format +msgid "%s: GROUPDEL_PRECMD fails with exit code %d.\n" +msgstr "%s: GROUPDEL_PRECMD nie powiod³o siê zwracaj±c kod wyj¶cia %d.\n" + +#: src/groupdel.c:373 +#, c-format +msgid "%s: Error deleting group `%s'.\n" +msgstr "%s: B³±d podczas usuwania grupy `%s'.\n" + +#: src/groupdel.c:397 +#, c-format +msgid "%s: GROUPDEL_POSTCMD fails with exit code %d.\n" +msgstr "%s: GROUPDEL_POSTCMD nie powiod³o siê zwracaj±c kod wyj¶cia %d.\n" + +#: src/groupmod.c:54 +#, c-format +msgid "Usage: %s [-g gid [-o]] [-n new_name] group\n" +msgstr "Sk³adnia: %s [-g gid [-o]] [-n nowa_nazwa] grupa\n" + +#: src/groupmod.c:61 +#, c-format +msgid "" +"%s - modify a group entry\n" +"\n" +msgstr "" +"%s - zmiana wpisu o grupie\n" +"\n" + +#: src/groupmod.c:65 +msgid " -g gid Change the groupid to the given number\n" +msgstr " -g gid Zmiana identyfikatora grupy na podan± liczbê\n" + +#: src/groupmod.c:67 src/useradd.c:76 +msgid " -k skeldir Specify an alternative skel directory\n" +msgstr " -k kat_skel Podanie alternatywnego katalogu skel\n" + +#: src/groupmod.c:69 +msgid " -n name Change group name.\n" +msgstr " -n nazwa Zmiana nazwy grupy.\n" + +#: src/groupmod.c:75 +msgid " -A user Add the user to the group entry\n" +msgstr " -A u¿ytkownik Dodanie u¿ytkownika do wpisu o grupie\n" + +#: src/groupmod.c:76 +msgid " -R user Remove the user from the group entry\n" +msgstr " -R u¿ytkownik Usuniêcie u¿ytkownika z wpisu o grupie\n" + +#: src/groupmod.c:81 src/usermod.c:99 +msgid "Valid services are: files, ldap\n" +msgstr "Poprawne us³ugi to: files, ldap\n" + +#: src/groupmod.c:245 +#, c-format +msgid "%s: invalid numeric argument `%s' for Group ID.\n" +msgstr "%s: niepoprawny argument liczbowy `%s' dla identyfikatora grupy.\n" + +#: src/groupmod.c:271 +#, c-format +msgid "%s: invalid characters in password `%s'.\n" +msgstr "%s: niepoprawne znaki w ha¶le `%s'.\n" + +#: src/groupmod.c:467 +#, c-format +msgid "%s: Cannot modify group in LDAP database without DN.\n" +msgstr "%s: Nie mo¿na zmodyfikowaæ grupy w bazie danych LDAP bez DN.\n" + +#: src/groupmod.c:485 +#, c-format +msgid "%s: Group not modified in LDAP database.\n" +msgstr "%s: Grupa nie zmodyfikowana w bazie danych LDAP.\n" + +#: src/grpck.c:51 +#, c-format +msgid "Usage: %s [-P path] [-q|-r]\n" +msgstr "Sk³adnia: %s [-P ¶cie¿ka] [-q|-r]\n" + +#: src/grpck.c:59 +#, c-format +msgid "" +"%s - check integrity of group file\n" +"\n" +msgstr "" +"%s - sprawdzenie integralno¶ci pliku grup\n" +"\n" + +#: src/grpck.c:63 src/pwck.c:63 +msgid " -q, --quiet Don't print warnings, only errors\n" +msgstr " -q, --quiet Nie wypisywanie ostrze¿eñ, tylko b³êdów\n" + +#: src/grpck.c:64 src/pwck.c:64 +msgid " -r, --read-only Run in read-only mode, don't make changes\n" +msgstr "" +" -r, --read-only Dzia³anie w trybie wy³±cznie odczytu, bez dokonywania " +"zmian\n" + +#: src/grpck.c:66 +msgid " -s, --sort Sort the group file, no checks are done\n" +msgstr " -s, --sort Posortowanie pliku grup bez sprawdzania\n" + +#: src/grpck.c:78 src/pwck.c:78 +#, c-format +msgid "No\n" +msgstr "Nie\n" + +#: src/grpck.c:222 src/pwck.c:229 +#, c-format +msgid "Checking `%s'\n" +msgstr "Sprawdzanie `%s'\n" + +#: src/grpck.c:337 src/grpck.c:384 +#, c-format +msgid "Invalid group entry.\n" +msgstr "Nieprawid³owy wpis o grupie.\n" + +#: src/grpck.c:338 src/pwck.c:346 src/pwck.c:616 +#, c-format +msgid "Delete empty line? " +msgstr "Usun±æ pust± liniê? " + +#: src/grpck.c:356 +#, c-format +msgid "Invalid group entry with comment.\n" +msgstr "Nieprawid³owy wpis o grupie z komentarzem.\n" + +#: src/grpck.c:357 src/grpck.c:385 src/grpck.c:402 src/grpck.c:418 +#: src/pwck.c:365 src/pwck.c:381 src/pwck.c:397 src/pwck.c:413 src/pwck.c:635 +#: src/pwck.c:650 src/pwck.c:666 src/pwck.c:682 src/pwck.c:700 +#, c-format +msgid "Delete line `%s'? " +msgstr "Usun±æ liniê `%s'? " + +#: src/grpck.c:401 +#, c-format +msgid "Invalid group name `%s'.\n" +msgstr "Nieprawid³owy nazwa grupy `%s'.\n" + +#: src/grpck.c:417 +#, c-format +msgid "Duplicate group entry\n" +msgstr "Powtórzony wpis o grupie\n" + +#: src/grpck.c:445 +#, c-format +msgid "Group `%s': unknown user `%s'\n" +msgstr "Grupa `%s': nieznany u¿ytkownik `%s'\n" + +#: src/grpck.c:451 +#, c-format +msgid "Group `%s': Duplicate user entry `%s', already primary group.\n" +msgstr "" +"Grupa `%s': Powtórzony wpis o u¿ytkowniku `%s', jest ju¿ grup± g³ówn±.\n" + +#: src/grpck.c:812 src/pwck.c:1074 +#, c-format +msgid "%s: -s and -r are incompatibile.\n" +msgstr "%s: -s i -r s± niekompatybilne.\n" + +#: src/grpconv.c:33 src/grpunconv.c:51 src/pwconv.c:44 src/pwunconv.c:44 +#, c-format +msgid "Usage: %s\n" +msgstr "Sk³adnia: %s\n" + +#: src/grpconv.c:40 +#, c-format +msgid "" +"%s - convert to shadow group\n" +"\n" +msgstr "" +"%s - konwersja do grup z ukrytymi has³ami\n" +"\n" + +#: src/grpconv.c:105 +#, c-format +msgid "%s: /etc/gshadow is not supported by this system.\n" +msgstr "%s: /etc/gshadow nie jest obs³ugiwany przez ten system.\n" + +#: src/grpunconv.c:58 +#, c-format +msgid "" +"%s - convert from shadow groups\n" +"\n" +msgstr "" +"%s - konwersja z grup z ukrytymi has³ami\n" +"\n" + +#: src/grpunconv.c:61 +msgid " -P path Search group and gshadow file in \"path\"\n" +msgstr " -P ¶cie¿ka Szukanie plików group i gshadow w \"¶cie¿ce\"\n" + +#: src/grpunconv.c:219 +#, c-format +msgid "%s: No gshadow file found.\n" +msgstr "%s: Nie znaleziono pliku gshadow.\n" + +#: src/grpunconv.c:243 src/pwconv.c:243 src/pwconv.c:267 src/pwunconv.c:190 +#, c-format +msgid "Cannot create backup file `%s': %m\n" +msgstr "Nie mo¿na utworzyæ kopii zapasowej pliku `%s': %m\n" + +#: src/grpunconv.c:266 src/pwunconv.c:214 +#, c-format +msgid "Error while moving password for `%s'.\n" +msgstr "B³±d podczas przenoszenia has³a dla `%s'.\n" + +#: src/newgrp.c:52 +#, c-format +msgid "Usage: %s [-l|-c command] [group]\n" +msgstr "Sk³adnia: %s [-l|-c polecenie] [grupa]\n" + +#: src/newgrp.c:60 +#, c-format +msgid "" +"%s - change the effective group id\n" +"\n" +msgstr "" +"%s - zmiana efektywnego identyfikatora grupy\n" +"\n" + +#: src/newgrp.c:63 +msgid " -l, --login reinitialize environment as if logged in\n" +msgstr " -l, --login ponowna inicjalizacja ¶rodowiska logowania\n" + +#: src/newgrp.c:65 +msgid " -c command Execute `command' with new group\n" +msgstr " -c polecenie Wykonanie `polecenia' z now± grup±\n" + +#: src/newgrp.c:161 +#, c-format +msgid "%s: -l and -c are exclusive\n" +msgstr "%s: -l i -c siê wykluczaj±\n" + +#: src/newgrp.c:167 +#, c-format +msgid "%s: -c requires a group argument\n" +msgstr "%s: -c wymaga argumentu bêd±cego grup±\n" + +#: src/newgrp.c:174 +#, c-format +msgid "%s: Unknown user.\n" +msgstr "%s: Nieznany u¿ytkownik.\n" + +#: src/newgrp.c:195 +#, c-format +msgid "%s: bad group `%s'.\n" +msgstr "%s: b³êdna grupa `%s'.\n" + +#: src/newgrp.c:218 src/newgrp.c:313 +#, c-format +msgid "%s: calling getgroups failed: %s\n" +msgstr "%s: wywo³anie getgroups nie powiod³o siê: %s\n" + +#: src/newgrp.c:271 +#, c-format +msgid "%s: failure to get group entry for %d.\n" +msgstr "%s: nie uda³o siê pobraæ wpisu o grupie dla %d.\n" + +#: src/newgrp.c:281 +msgid "Password: " +msgstr "Has³o: " + +#: src/newgrp.c:284 +#, c-format +msgid "%s: password incorrect.\n" +msgstr "%s: has³o niepoprawne.\n" + +#: src/newgrp.c:351 +#, c-format +msgid "%s: too many groups, not added.\n" +msgstr "%s: zbyt du¿o grup, nie dodano.\n" + +#: src/newgrp.c:358 +#, c-format +msgid "%s: calling setgroups failed: %s\n" +msgstr "%s: wywo³anie setgroups nie powiod³o siê: %s\n" + +#: src/newgrp.c:365 src/newgrp.c:380 +#, c-format +msgid "%s: calling setgid failed: %s\n" +msgstr "%s: wywo³anie setgid nie powiod³o siê: %s\n" + +#: src/newgrp.c:374 +#, c-format +msgid "%s: calling initgroups failed: %s\n" +msgstr "%s: wywo³anie initgroups nie powiod³o siê: %s\n" + +#: src/newgrp.c:389 +#, c-format +msgid "%s: calling setuid failed: %s\n" +msgstr "%s: wywo³anie setuid nie powiod³o siê: %s\n" + +#: src/newgrp.c:401 +#, c-format +msgid "Cannot change to directory %s: %s\n" +msgstr "Nie mo¿na przej¶æ do katalogu %s: %s\n" + +#: src/newgrp.c:439 +#, c-format +msgid "%s: execl failed: %s\n" +msgstr "%s: execl nie powiod³o siê: %s\n" + +#: src/pam_rpasswd.c:219 src/pam_rpasswd.c:223 src/pam_rpasswd.c:330 +#: src/pam_rpasswd.c:334 src/rpasswd.c:211 src/rpasswd.c:214 src/rpasswd.c:297 +#: src/rpasswd.c:300 +#, c-format +msgid "error while reading request: %s" +msgstr "b³±d podczas czytania ¿±dania: %s" + +#: src/pam_rpasswd.c:220 src/rpasswd.c:212 src/rpasswd-client.c:58 +#: src/rpasswd-client.c:71 src/rpasswd-client.c:82 src/rpasswd-client.c:108 +#: src/rpasswd-client.c:121 +msgid "Peer has closed the TLS connection" +msgstr "Druga strona zamknê³a po³±czenie TLS" + +#: src/pam_rpasswd.c:235 src/pam_rpasswd.c:344 +#, c-format +msgid "error while allocating memory: %m" +msgstr "b³±d podczas przydzielania pamiêci: %m" + +#: src/pam_rpasswd.c:242 src/rpasswd.c:223 src/rpasswd.c:312 +#, c-format +msgid "error while reading request data: %s" +msgstr "b³±d podczas czytania danych ¿±dania: %s" + +#: src/pam_rpasswd.c:296 src/rpasswd.c:269 src/rpasswd.c:358 +#, c-format +msgid "Cannot send input back to server: %s\n" +msgstr "Nie mo¿na odes³aæ wej¶cia do serwera: %s\n" + +#: src/pam_rpasswd.c:331 src/rpasswd.c:298 +msgid "wrong data received" +msgstr "otrzymano b³êdne dane" + +#: src/pam_rpasswd.c:352 +#, c-format +msgid "error while reading request data: %m" +msgstr "b³±d podczas czytania danych ¿±dania: %m" + +#: src/pam_rpasswd.c:403 +#, c-format +msgid "Cannot send input back to server: %m\n" +msgstr "Nie mo¿na odes³aæ wej¶cia do serwera: %m\n" + +#: src/pam_rpasswd.c:565 +#, c-format +msgid "SLP: Found Server on %s, port %s (%s)\n" +msgstr "SLP: Znaleziono serwer na %s, porcie %s (%s)\n" + +#: src/pam_rpasswd.c:568 +#, c-format +msgid "SLP: Found Server on %s, port %s\n" +msgstr "SLP: Znaleziono serwer na %s, porcie %s\n" + +#: src/pam_rpasswd.c:574 +#, c-format +msgid "SLP: Found Server on %s (%s)\n" +msgstr "SLP: Znaleziono serwer na %s (%s)\n" + +#: src/pam_rpasswd.c:577 +#, c-format +msgid "SLP: Found Server on %s\n" +msgstr "SLP: Znaleziono serwer na %s\n" + +#: src/passwd.c:210 +#, c-format +msgid "Unable to initialize BioAPI framework, BioAPI error #:%x.\n" +msgstr "Nie mo¿na zainicjowaæ szkieletu BioAPI, b³±d BioAPI #:%x.\n" + +#: src/passwd.c:220 +#, c-format +msgid "Unable to parse UUID (BioAPI error #:%x) : %s\n" +msgstr "Nie mo¿na przeanalizowaæ UUID-a (b³±d BioAPI #:%x): %s\n" + +#: src/passwd.c:241 +#, c-format +msgid "Unable to load BioAPI BSP with UUID of %s, BioAPI error #%x.\n" +msgstr "Nie mo¿na wczytaæ BSP BioAPI z UUID-em %s, b³±d BioAPI #%x.\n" + +#: src/passwd.c:252 +#, c-format +msgid "" +"Unable to attach default device to BioAPI BSP with UUID of %s, BioAPI error #" +"%x.\n" +msgstr "" +"Nie mo¿na do³±czyæ domy¶lnego urz±dzenia do BSP BioAPI z UUID-em %s, b³±d " +"BioAPI #%x.\n" + +#: src/passwd.c:278 +#, c-format +msgid "Unable to create BIR database directory, \"%s\"\n" +msgstr "Nie mo¿na utworzyæ katalogu bazy danych BIR, \"%s\"\n" + +#: src/passwd.c:291 +#, c-format +msgid "" +"Unable to create BSP-specific subdirectory in BIR database directory, \"%s" +"\"\n" +msgstr "" +"Nie mo¿na utworzyæ podkatalogu dla BSP w katalogu bazy danych BIR, \"%s\"\n" + +#: src/passwd.c:306 +#, c-format +msgid "" +"Unable to write biometric identification record, \"%s\": BioAPI error #%x\n" +msgstr "" +"Nie mo¿na zapisaæ rekordu identyfikacji biometrycznej, \"%s\": b³±d BioAPI #%" +"x\n" + +#: src/passwd.c:318 +#, c-format +msgid "Unable to open BIR for writing, \"%s\"\n" +msgstr "Nie mo¿na otworzyæ BIR do zapisu, \"%s\"\n" + +#: src/passwd.c:349 +#, c-format +msgid "Unable to enroll user %s using BSP with UUID of %s, BioAPI error #%x.\n" +msgstr "" +"Nie mo¿na zarejestrowaæ u¿ytkownika %s przy u¿yciu BSP z UUID-em %s, b³±d " +"BioAPI #%x.\n" + +#: src/passwd.c:367 +#, c-format +msgid "Usage: %s [-f|-g|-s|-k[-q]] [account]\n" +msgstr "Sk³adnia: %s [-f|-g|-s|-k[-q]] [konto]\n" + +#: src/passwd.c:368 +#, c-format +msgid " %s [-D binddn] [-n min] [-x max] [-w warn] [-i inact] account\n" +msgstr "" +" %s [-D binddn] [-n min] [-x maks] [-w ostrze¿] [-i nieakt] konto\n" + +#: src/passwd.c:369 +#, c-format +msgid " %s {-l|-u|-d|-S[-a]|-e} account\n" +msgstr " %s {-l|-u|-d|-S[-a]|-e} konto\n" + +#: src/passwd.c:371 +#, c-format +msgid " %s --bioapi [account]\n" +msgstr " %s --bioapi [konto]\n" + +#: src/passwd.c:373 +#, c-format +msgid " %s --stdin [account]\n" +msgstr " %s --stdin [konto]\n" + +#: src/passwd.c:380 src/rpasswd.c:93 src/rpasswdd.c:114 +#, c-format +msgid "" +"%s - change password information\n" +"\n" +msgstr "" +"%s - zmiana informacji o ha¶le\n" +"\n" + +#: src/passwd.c:382 +msgid " -f Change the finger (GECOS) information\n" +msgstr " -f Zmiana informacji o u¿ytkowniku (GECOS)\n" + +#: src/passwd.c:384 +msgid " -s Change the login shell\n" +msgstr " -s Zmiana pow³oki logowania\n" + +#: src/passwd.c:385 +msgid " -g Change the group password\n" +msgstr " -g Zmiana has³a grupy\n" + +#: src/passwd.c:386 +msgid " -k Change the password only if expired\n" +msgstr " -k Zmiana has³a tylko je¶li wygas³o\n" + +#: src/passwd.c:387 +msgid " -q Try to be quiet\n" +msgstr " -q Ciche dzia³anie w miarê mo¿liwo¶ci\n" + +#: src/passwd.c:388 +msgid " -S Show the password attributes\n" +msgstr " -S Pokazanie atrybutów has³a\n" + +#: src/passwd.c:389 +msgid " -a Only with -S, show for all accounts\n" +msgstr " -a Tylko z -S - pokazanie dla wszystkich kont\n" + +#: src/passwd.c:390 +msgid " -d Delete the password for the named account\n" +msgstr " -d Usuniêcie has³a z podanego konta\n" + +#: src/passwd.c:391 +msgid " -l Locks the password entry for \"account\"\n" +msgstr " -l Zablokowanie wpisu o ha¶le dla konta\n" + +#: src/passwd.c:392 +msgid " -u Try to unlock the password entry for \"account\"\n" +msgstr " -u Próba odblokowania wpisu o ha¶le dla konta\n" + +#: src/passwd.c:393 +msgid " -e Force the user to change password at next login\n" +msgstr "" +" -e Wymuszenie zmiany has³a przez u¿ytkownika przy nastêpnym\n" +" logowaniu\n" + +#: src/passwd.c:394 +msgid " -n min Set minimum field for \"account\"\n" +msgstr " -n min Ustawienie minimalnego czasu ¿ycia has³a dla konta\n" + +#: src/passwd.c:395 +msgid " -x max Set maximum field for \"account\"\n" +msgstr " -x maks Ustawienie maksymalnego czasu ¿ycia has³a dla konta\n" + +#: src/passwd.c:396 +msgid " -w warn Set warn field for \"account\"\n" +msgstr "" +" -w ostrze¿ Ustawienie czasu ostrze¿enia o wygasaniu has³a dla konta\n" + +#: src/passwd.c:398 +msgid " --bioapi Authentication token is handled via BioAPI\n" +msgstr "" +" --bioapi Token uwierzytelniaj±cy jest obs³ugiwany przez BioAPI\n" + +#: src/passwd.c:405 +msgid " --stdin Read new password from stdin (root only)\n" +msgstr "" +" --stdin Odczytanie nowego has³a ze standardowego wej¶cia (tylko " +"root)\n" + +#: src/passwd.c:597 +#, c-format +msgid "%s: User argument missing\n" +msgstr "%s: Nie podano nazwy u¿ytkownika\n" + +#: src/passwd.c:690 +#, c-format +msgid "%s: User `%s' is not known to service `%s'\n" +msgstr "%s: U¿ytkownik `%s' nie jest znany us³udze `%s'\n" + +#: src/passwd.c:715 +#, c-format +msgid "%s: %s is not authorized to change the password of %s\n" +msgstr "%s: %s nie jest autoryzowany do zmiany has³a u¿ytkownika %s\n" + +#: src/passwd.c:744 +#, c-format +msgid "%s: Permission denied\n" +msgstr "%s: Brak uprawnieñ\n" + +#: src/passwd.c:753 +#, c-format +msgid "You cannot change the shadow data for `%s'.\n" +msgstr "Brak uprawnieñ do zmiany danych shadow dla u¿ytkownika `%s'.\n" + +#: src/passwd.c:781 +#, c-format +msgid "%s: -P flag not supported in this mode!\n" +msgstr "%s: -P flaga nie obs³ugiwana w tym trybie!\n" + +#: src/passwd.c:811 +#, c-format +msgid "Changing password for %s.\n" +msgstr "Zmiana has³a dla %s.\n" + +#: src/passwd.c:960 +#, c-format +msgid "Error while changing password expiry information.\n" +msgstr "B³±d podczas zmiany informacji o wygasaniu has³a.\n" + +#: src/passwd.c:962 +#, c-format +msgid "Error while changing password.\n" +msgstr "B³±d podczas zmiany has³a.\n" + +#: src/passwd.c:974 +#, c-format +msgid "Password expiry information changed.\n" +msgstr "Informacje o wygasaniu has³a zmienione.\n" + +#: src/passwd.c:976 +#, c-format +msgid "Password deleted.\n" +msgstr "Has³o usuniête.\n" + +#: src/passwd.c:1038 +#, c-format +msgid "passwd: Cannot execute %s" +msgstr "passwd: Nie mo¿na wywo³aæ %s" + +#: src/pwck.c:51 +#, c-format +msgid "Usage: %s [-P path] [-q|-r|-s]\n" +msgstr "Sk³adnia: %s [-P ¶cie¿ka] [-q|-r|-s]\n" + +#: src/pwck.c:59 +#, c-format +msgid "" +"%s - check integrity of password files\n" +"\n" +msgstr "" +"%s - sprawdzenie integralno¶ci plików hase³\n" +"\n" + +#: src/pwck.c:66 +msgid " -s, --sort Sort the password file, no checks are done\n" +msgstr " -s, --sort Posortowanie pliku hase³ bez sprawdzania\n" + +#: src/pwck.c:345 src/pwck.c:380 +#, c-format +msgid "Invalid password entry.\n" +msgstr "Nieprawid³owy wpis o ha¶le.\n" + +#: src/pwck.c:364 +#, c-format +msgid "Invalid password entry with comment.\n" +msgstr "Nieprawid³owy wpis o ha¶le z komentarzem.\n" + +#: src/pwck.c:396 src/pwck.c:665 +#, c-format +msgid "Invalid account name `%s'.\n" +msgstr "Nieprawid³owa nazwa konta `%s'.\n" + +#: src/pwck.c:412 +#, c-format +msgid "Duplicate password entry\n" +msgstr "Powtórzony wpis o ha¶le\n" + +#: src/pwck.c:431 +#, c-format +msgid "User `%s': unknown group `%u'\n" +msgstr "U¿ytkownik `%s': nieznana grupa `%u'\n" + +#: src/pwck.c:440 +#, c-format +msgid "User `%s': directory `%s' does not exist.\n" +msgstr "U¿ytkownik `%s': katalog `%s' nie istnieje.\n" + +#: src/pwck.c:449 +#, c-format +msgid "User `%s': shell `%s' is not executable.\n" +msgstr "U¿ytkownik `%s': pow³oka `%s' nie jest wykonywalna.\n" + +#: src/pwck.c:506 +#, c-format +msgid "Checking `%s'.\n" +msgstr "Sprawdzanie `%s'.\n" + +#: src/pwck.c:615 src/pwck.c:649 +#, c-format +msgid "Invalid shadow entry.\n" +msgstr "Nieprawid³owy wpis shadow.\n" + +#: src/pwck.c:634 +#, c-format +msgid "Invalid shadow entry with comment.\n" +msgstr "Nieprawid³owy wpis shadow z komentarzem.\n" + +#: src/pwck.c:681 +#, c-format +msgid "Duplicate shadow entry\n" +msgstr "Powtórzony wpis shadow\n" + +#: src/pwck.c:699 +#, c-format +msgid "No matching password file entry.\n" +msgstr "Brak odpowiadaj±cego wpisu w pliku hase³.\n" + +#: src/pwck.c:714 +#, c-format +msgid "User `%s': last password change in the future.\n" +msgstr "U¿ytkownik `%s': ostatnia zmiana has³a w przysz³o¶ci.\n" + +#: src/pwconv.c:51 +#, c-format +msgid "" +"%s - convert to shadow account\n" +"\n" +msgstr "" +"%s - konwersja do kont z ukrytymi has³ami\n" +"\n" + +#: src/pwconv.c:307 +#, c-format +msgid "Orphaned entry '%s' removed from shadow database.\n" +msgstr "Osierocony wpis '%s' usuniêty z bazy ukrytych hase³.\n" + +#: src/pwconv.c:316 +#, c-format +msgid "Error while deleting `%s' shadow account.\n" +msgstr "B³±d podczas usuwania ukrytego wpisu dla `%s'.\n" + +#: src/pwconv.c:343 +#, c-format +msgid "%s: Error trying to get data for `%s'\n" +msgstr "%s: B³±d podczas próby uzyskania danych dla `%s'\n" + +#: src/pwconv.c:365 src/pwconv.c:388 src/pwconv.c:419 src/pwconv.c:435 +#, c-format +msgid "Error while converting `%s' to shadow account.\n" +msgstr "B³±d podczas konwersji `%s' na konta z ukrytymi has³ami.\n" + +#: src/pwconv.c:466 +#, c-format +msgid "Error while renaming temporary shadow file: %m\n" +msgstr "B³±d podczas zmiany nazwy tymczasowego pliku shadow: %m\n" + +#: src/pwconv.c:491 +#, c-format +msgid "Error while renaming temporary password file: %m\n" +msgstr "B³±d podczas zmiany nazwy tymczasowego pliku hase³: %m\n" + +#: src/pwunconv.c:51 +#, c-format +msgid "" +"%s - convert from shadow account\n" +"\n" +msgstr "" +"%s - konwersja z kont z ukrytymi has³ami\n" +"\n" + +#: src/pwunconv.c:166 +#, c-format +msgid "%s: No shadow file found.\n" +msgstr "%s: Nie znaleziono pliku shadow.\n" + +#: src/rpasswd.c:85 +#, c-format +msgid "Usage: %s [-4|-6][-a][-f config-file][-h hostname][-p port][-v][name]\n" +msgstr "" +"Sk³adnia: %s [-4|-6][-a][-f plik_konfig][-h nazwa_hosta][-p port][-v]" +"[nazwa]\n" + +#: src/rpasswd.c:95 +msgid " -4 Use IPv4 only\n" +msgstr " -4 U¿ywanie wy³±cznie IPv4\n" + +#: src/rpasswd.c:96 +msgid " -6 Use IPv6 only\n" +msgstr " -6 U¿ywanie wy³±cznie IPv6\n" + +#: src/rpasswd.c:98 +msgid " -a Admin mode, special admin password is required\n" +msgstr "" +" -a Tryb administratora, wymagane specjalne has³o " +"administracyjne\n" + +#: src/rpasswd.c:100 +msgid " -f config-file Specify a different config file\n" +msgstr " -f plik_konfig Podanie innego pliku konfiguracyjnego\n" + +#: src/rpasswd.c:101 +msgid " -h hostname Specify the remote server\n" +msgstr " -h nazwa_hosta Podanie zdalnego serwera\n" + +#: src/rpasswd.c:102 +msgid " -p port Specify port remote server is listening on\n" +msgstr " -p port Podanie portu, na którym nas³uchuje zdalny serwer\n" + +#: src/rpasswd.c:104 +msgid " -r level Specify level of SSL certificate checks\n" +msgstr " -r poziom Podanie poziomu sprawdzania certyfikatu SSL\n" + +#: src/rpasswd.c:107 +msgid " --no-slp Don't use SLP to find a server\n" +msgstr " --no-slp Nie u¿ywanie SLP do znalezienia serwera\n" + +#: src/rpasswd.c:109 +msgid " -v, --verbose Be verbose, print SSL connection data\n" +msgstr " -v, --verbose Du¿o informacji, wy¶wietlanie danych po³±czenia SSL\n" + +#: src/rpasswd.c:150 +#, c-format +msgid "Warning: cannot turn echo off\n" +msgstr "Uwaga: nie mo¿na wy³±czyæ echo\n" + +#: src/rpasswd.c:515 +#, c-format +msgid "SLP: Found Server on %s, port %s" +msgstr "SLP: Znaleziono serwer na %s, porcie %s" + +#: src/rpasswd.c:518 +#, c-format +msgid "SLP: Found Server on %s" +msgstr "SLP: Znaleziono serwer na %s" + +#: src/rpasswd.c:554 +#, c-format +msgid "Go away, you do not exist!" +msgstr "Odejd¼, nie istniejesz!" + +#: src/rpasswd.c:568 +#, c-format +msgid "No server specified\n" +msgstr "Nie podano serwera\n" + +#: src/rpasswd-client.c:57 src/rpasswd-client.c:60 +#, c-format +msgid "error while sending start request: %s\n" +msgstr "b³±d podczas wysy³ania ¿±dania startu: %s\n" + +#: src/rpasswd-client.c:70 src/rpasswd-client.c:73 +#, c-format +msgid "error while sending locale data: %s\n" +msgstr "b³±d podczas wysy³ania danych o lokalizacji: %s\n" + +#: src/rpasswd-client.c:81 src/rpasswd-client.c:84 +#, c-format +msgid "error while sending username: %s\n" +msgstr "b³±d podczas wysy³ania nazwy u¿ytkownika: %s\n" + +#: src/rpasswd-client.c:107 src/rpasswd-client.c:110 src/rpasswd-client.c:120 +#: src/rpasswd-client.c:123 +#, c-format +msgid "error while sending string: %s\n" +msgstr "b³±d podczas wysy³ania ³añcucha: %s\n" + +#: src/rpasswd-client.c:318 +msgid "Searching a server...\n" +msgstr "Poszukiwanie serwera...\n" + +#: src/rpasswd-client.c:323 +#, c-format +msgid "Error opening SLP handle: %i.\n" +msgstr "B³±d podczas otwierania uchwytu SLP: %i.\n" + +#: src/rpasswd-client.c:334 +msgid "No service found with SLP.\n" +msgstr "Nie znaleziono us³ugi przy u¿yciu SLP.\n" + +#: src/rpasswd-client.c:353 +msgid "Error while searching for SLP description.\n" +msgstr "B³±d podczas poszukiwania opisu dla SLP.\n" + +#: src/rpasswd-client.c:372 +#, c-format +msgid "" +"\n" +"Please select a server:\n" +msgstr "" +"\n" +"Proszê wybraæ serwer:\n" + +#: src/rpasswd-client.c:378 +#, c-format +msgid " (port %s)" +msgstr " (port %s)" + +#: src/rpasswd-client.c:388 +#, c-format +msgid "Enter number of choice [1-%d]: " +msgstr "Proszê podaæ wybran± liczbê [1-%d]: " + +#: src/rpasswd-client.c:458 +msgid "parsing config file" +msgstr "przetwarzanie pliku konfiguracyjnego" + +#: src/rpasswd-client.c:501 src/rpasswd-client.c:504 +msgid "Trying entry:" +msgstr "Próbowanie wpisu:" + +#: src/rpasswd-client.c:543 +#, c-format +msgid "Entry \"%s\" is not valid!\n" +msgstr "Wpis \"%s\" jest nieprawid³owy!\n" + +#: src/rpasswd-client.c:547 +#, c-format +msgid "Entry \"%s\" is not valid, ignored!\n" +msgstr "Wpis \"%s\" jest nieprawid³owy, zignorowano!\n" + +#: src/rpasswd-client.c:560 +msgid "Bad entries found.\n" +msgstr "Znaleziono b³êdne wpisy.\n" + +#: src/rpasswd-client.c:565 +msgid "No entry found.\n" +msgstr "Nie znaleziono wpisu.\n" + +#: src/rpasswd-client.c:575 +msgid "No entry found." +msgstr "Nie znaleziono wpisu." + +#: src/rpasswd-client.c:609 +msgid "Hostname or service not known for specified protocol\n" +msgstr "Nazwa hosta lub us³ugi nieznana dla podanego protoko³u\n" + +#: src/rpasswd-client.c:623 +#, c-format +msgid "bad port: %s\n" +msgstr "b³êdny port: %s\n" + +#: src/rpasswd-client.c:648 src/rpasswd-client.c:657 +#, c-format +msgid "Trying %s port %d...\n" +msgstr "Próbowanie %s, portu %d...\n" + +#: src/rpasswd-client.c:663 +#, c-format +msgid "Trying %s...\n" +msgstr "Próbowanie %s...\n" + +#: src/rpasswd-client.c:677 +#, c-format +msgid "connect to address %s: %s\n" +msgstr "³±czenie z adresem %s: %s\n" + +#: src/rpasswd-client.c:732 src/rpasswd-client.c:1028 +msgid "Server certificate info:\n" +msgstr "Informacje o certyfikacie serwera:\n" + +#: src/rpasswd-client.c:742 +#, c-format +msgid " Certificate is valid since: %s" +msgstr " Certyfikat jest wa¿ny od: %s" + +#: src/rpasswd-client.c:744 +#, c-format +msgid " Certificate expires: %s" +msgstr " Certyfikat wygasa: %s" + +#: src/rpasswd-client.c:750 +#, c-format +msgid " Certificate public key: %s" +msgstr " Klucz publiczny certyfikatu: %s" + +#: src/rpasswd-client.c:756 +#, c-format +msgid " Certificate version: #%d\n" +msgstr " Wersja certyfikatu: #%d\n" + +#: src/rpasswd-client.c:761 src/rpasswd-client.c:1034 +#, c-format +msgid " DN: %s\n" +msgstr " DN: %s\n" + +#: src/rpasswd-client.c:765 src/rpasswd-client.c:1041 +#, c-format +msgid " Issuer's DN: %s\n" +msgstr " DN wystawcy: %s\n" + +#: src/rpasswd-client.c:846 +#, c-format +msgid "Handshake failed: %s\n" +msgstr "Nawi±zanie transmisji nie powiod³o siê: %s\n" + +#: src/rpasswd-client.c:869 +#, c-format +msgid "TLS certificate error: %s\n" +msgstr "B³±d certyfikatu TLS: %s\n" + +#: src/rpasswd-client.c:880 +#, c-format +msgid "" +"%s connection using %s-%s (%s)\n" +"\n" +msgstr "" +"Po³±czenie %s przy u¿yciu %s-%s (%s)\n" +"\n" + +#: src/rpasswd-client.c:898 +msgid "TLS authentication error: server certificate issuer is unknown.\n" +msgstr "B³±d uwierzytelnienia TLS: nieznany wystawca certyfikatu serwera.\n" + +#: src/rpasswd-client.c:906 +msgid "TLS authentication error: server certificate is NOT trusted.\n" +msgstr "B³±d uwierzytelnienia TLS: certyfikat serwera NIE jest zaufany.\n" + +#: src/rpasswd-client.c:917 +msgid "TLS authentication error: server certificate not yet activated.\n" +msgstr "B³±d uwierzytelnienia TLS: certyfikat serwera nie zosta³ aktywowany.\n" + +#: src/rpasswd-client.c:925 +msgid "TLS authentication error: server certificate expired.\n" +msgstr "B³±d uwierzytelnienia TLS: certyfikat serwera wygas³.\n" + +#: src/rpasswd-client.c:960 +#, c-format +msgid "error loading default verify locations: %s\n" +msgstr "b³±d podczas ³adowania domy¶lnych lokalizacji weryfikacji: %s\n" + +#: src/rpasswd-client.c:968 +#, c-format +msgid "error setting default verify path: %s\n" +msgstr "b³±d podczas ustawiania domy¶lnej ¶cie¿ki weryfikacji: %s\n" + +#: src/rpasswd-client.c:1003 +#, fuzzy +msgid "Unable to get certificate from peer.\n" +msgstr "Nie mo¿na uzyskaæ entropii z %s\n" + +#: src/rpasswd-client.c:1017 +#, c-format +msgid "" +"SSL connection using %s\n" +"\n" +msgstr "" +"Po³±czenie SSL przy u¿yciu %s\n" +"\n" + +#: src/rpasswd-client.c:1022 +msgid "Server does not have a certificate?\n" +msgstr "Serwer nie ma certyfikatu?\n" + +#: src/rpasswdd.c:102 +#, c-format +msgid "" +"Usage: %s [-4] [-6] [-d] [-c certificate] [-k privatekey] [-p port]\n" +" [--slp [--slp-timeout timeout] [--slp-descr description]]\n" +msgstr "" +"Sk³adnia: %s [-4] [-6] [-d] -c certyfikat] [-k klucz_prywatny] [-p port]\n" +" [--slp [--slp-timeout czas] [--slp-descr opis]]\n" + +#: src/rpasswdd.c:105 +#, c-format +msgid "Usage: %s [-4] [-6] [-d] [-c certificate] [-k privatekey] [-p port]\n" +msgstr "" +"Sk³adnia: %s [-4] [-6] [-d] [-c certyfikat] [-k klucz_prywatny] [-p port]\n" + +#: src/rpasswdd.c:116 +msgid " -4 Use IPv4\n" +msgstr " -4 U¿ywanie IPv4\n" + +#: src/rpasswdd.c:117 +msgid " -6 Use IPv6\n" +msgstr " -6 U¿ywanie IPv6\n" + +#: src/rpasswdd.c:118 +msgid " -c certificate Specify alternate certificate file\n" +msgstr " -c certyfikat Podanie alternatywnego pliku certyfikatu\n" + +#: src/rpasswdd.c:119 +msgid " -k privatekey Specify alternate file with private key\n" +msgstr " -k klucz_pryw Podanie alternatywnego pliku z kluczem prywatnym\n" + +#: src/rpasswdd.c:121 +msgid " -d Run in debug mode\n" +msgstr " -d Dzia³anie w trybie diagnostycznym\n" + +#: src/rpasswdd.c:122 +msgid " -p port Port on which the server should listen\n" +msgstr " -p port Port, na którym serwer ma s³uchaæ\n" + +#: src/rpasswdd.c:125 +msgid " --slp Register at local SLP server\n" +msgstr " --slp Zarejestrowanie w lokalnym serwerze SLP\n" + +#: src/rpasswdd.c:126 +msgid " --slp-timeout Set timeout for re-registration\n" +msgstr "" +" --slp-timeout Ustawienie maksymalnego czasu na ponown± rejestracjê\n" + +#: src/rpasswdd.c:127 +msgid " --slp-descr Set a description shown to SLP clients\n" +msgstr " --slp-descr Ustawienie opisu pokazywanego klientom SLP\n" + +#: src/rpasswdd.c:710 +#, c-format +msgid "Please authenticate as %s on %s" +msgstr "Proszê uwierzytelniæ siê jako %s na %s" + +#: src/rpasswdd.c:749 +#, c-format +msgid "" +"\n" +"Now enter the new password for %s" +msgstr "" +"\n" +"Teraz nale¿y wprowadziæ nowe has³o dla %s" + +#: src/rpasswdd.c:770 +#, c-format +msgid "setresuid failed on server: %s" +msgstr "setresuid nie powiod³o siê na serwerze: %s" + +#: src/rpasswdd.c:813 +msgid "Password not changed" +msgstr "Has³o nie zmienione" + +#: src/rpasswdd.c:816 +msgid "Password changed" +msgstr "Has³o zmienione" + +#: src/rpasswdd.c:1349 +msgid "already running" +msgstr "ju¿ dzia³a" + +#: src/useradd.c:54 src/usermod.c:55 +#, c-format +msgid "Usage: %s ...\n" +msgstr "Sk³adnia: %s ...\n" + +#: src/useradd.c:61 +#, c-format +msgid "" +"%s - create a new user\n" +"\n" +msgstr "" +"%s - utworzenie nowego u¿ytkownika\n" +"\n" + +#: src/useradd.c:63 src/usermod.c:64 +msgid " -c comment Set the GECOS field for the new account\n" +msgstr " -c komentarz Ustawienie pola GECOS dla nowego konta\n" + +#: src/useradd.c:65 +msgid " --show-defaults Print default values\n" +msgstr " --show-defaults Wypisanie warto¶ci domy¶lnych\n" + +#: src/useradd.c:66 +msgid " --save-defaults Save modified default values\n" +msgstr " --save-defaults Zapisanie zmodyfikowanych warto¶ci domy¶lnych\n" + +#: src/useradd.c:68 src/usermod.c:69 +msgid " -d homedir Home directory for the new user\n" +msgstr " -d kat_domowy Katalog domowy dla nowego u¿ytkownika\n" + +#: src/useradd.c:69 src/usermod.c:70 +msgid " -e expire Date on which the new account will be disabled\n" +msgstr " -e data_wa¿n Data po której nowe konto zostanie wy³±czone\n" + +#: src/useradd.c:71 src/usermod.c:72 +msgid "" +" -f inactive Days after a password expires until account is disabled\n" +msgstr " -f nieaktywn Dni od wyga¶niêcia has³a do wy³±czenia konta\n" + +#: src/useradd.c:73 src/usermod.c:74 +msgid " -G group,... List of supplementary groups\n" +msgstr " -G grupa,... Lista dodatkowych grup\n" + +#: src/useradd.c:74 src/usermod.c:75 +msgid " -g gid Name/number of the users primary group\n" +msgstr " -g gid Nazwa/numer g³ównej grupy u¿ytkownika\n" + +#: src/useradd.c:78 +msgid " -m Create home directory for the new user\n" +msgstr " -m Utworzenie katalogu domowego dla nowego u¿ytkownika\n" + +#: src/useradd.c:85 +msgid " -u uid Force the new userid to be the given number\n" +msgstr "" +" -u uid Wymuszenie nadania uid jako identyfikatora nowego " +"u¿ytkownika\n" + +#: src/useradd.c:87 +msgid " -U umask Umask value used for creating home directory\n" +msgstr "" +" -U umask Warto¶æ umask u¿ywana przy tworzeniu katalogu domowego\n" + +#: src/useradd.c:90 src/usermod.c:88 +msgid " -s shell Name of the user's login shell\n" +msgstr " -s pow³oka Nazwa pow³oki logowania u¿ytkownika\n" + +#: src/useradd.c:186 +#, c-format +msgid "%s: Invalid numeric argument `%s' for group ID.\n" +msgstr "%s: Nieprawid³owy argument liczbowy `%s' dla identyfikatora grupy.\n" + +#: src/useradd.c:196 src/usermod.c:160 +#, c-format +msgid "%s: Group `%u' not found in service `%s'.\n" +msgstr "%s: Grupa `%u' nie znaleziona w us³udze `%s'.\n" + +#: src/useradd.c:202 src/usermod.c:166 +#, c-format +msgid "%s: Unknown group `%u'.\n" +msgstr "%s: Nieznana grupa `%u'.\n" + +#: src/useradd.c:301 +#, c-format +msgid "%s: Unknown group `%s' in %s.\n" +msgstr "%s: Nieznana grupa `%s' w %s.\n" + +#: src/useradd.c:316 +#, c-format +msgid "%s: Invalid home directory `%s' in %s.\n" +msgstr "%s: Nieprawid³owy katalog domowy `%s' w %s.\n" + +#: src/useradd.c:335 +#, c-format +msgid "%s: Invalid numeric argument `%s' for `INACTIVE' in %s.\n" +msgstr "%s: Nieprawid³owy argument liczbowy `%s' dla `INACTIVE' w %s.\n" + +#: src/useradd.c:358 +#, c-format +msgid "%s: Expiredate `%s' is no date and no integer value >= -1 in %s.\n" +msgstr "" +"%s: Data wa¿no¶ci `%s' w %s nie jest dat± ani liczb± ca³kowit± >= -1.\n" + +#: src/useradd.c:374 +#, c-format +msgid "%s: Invalid shell `%s' in %s.\n" +msgstr "%s: Nieprawid³owa pow³oka `%s' w %s.\n" + +#: src/useradd.c:388 +#, c-format +msgid "%s: Skel directory \"%s\" in %s does not exist.\n" +msgstr "%s: Katalog skel \"%s\" w %s nie istnieje.\n" + +#: src/useradd.c:449 +#, c-format +msgid "%s: Invalid value `%s' for option CREATE_MAIL_SPOOL in %s.\n" +msgstr "%s: Nieprawid³owa warto¶æ `%s' dla opcji CREATE_MAIL_SPOOL w %s.\n" + +#: src/useradd.c:465 +#, c-format +msgid "%s: Invalid numeric argument `%s' for `UMASK' in %s.\n" +msgstr "%s: Nieprawid³owy argument liczbowy `%s' dla `UMASK' w %s.\n" + +#: src/useradd.c:913 +#, c-format +msgid "%s: Can't get unique uid in range %u - %u.\n" +msgstr "" +"%s: Nie mo¿na uzyskaæ unikalnego identyfikatora u¿ytkownika z przedzia³u %u " +"- %u.\n" + +#: src/useradd.c:987 +#, c-format +msgid "%s: Can't stat `%s': %m\n" +msgstr "%s: Nie mo¿na wykonaæ stat na `%s': %m\n" + +#: src/useradd.c:1018 +#, c-format +msgid "" +"%s: No group named \"mail\" exists, creating mail spool with mode 0600.\n" +msgstr "" +"%s: Grupa o nazwie \"mail\" nie istnieje, tworzenie skrzynki pocztowej o " +"uprawnieniach 0600.\n" + +#: src/useradd.c:1026 +#, c-format +msgid "%s: Can't create mail spool for user %s.\n" +msgstr "%s: Nie mo¿na utworzyæ skrzynki pocztowej dla u¿ytkownika %s.\n" + +#: src/useradd.c:1095 src/usermod.c:520 +#, c-format +msgid "%s: Cannot create directory `%s'.\n" +msgstr "%s: Nie mo¿na utworzyæ katalogu `%s'.\n" + +#: src/useradd.c:1100 src/usermod.c:525 src/usermod.c:549 +#, c-format +msgid "%s: Warning: chown on `%s' failed: %m\n" +msgstr "%s: Uwaga: chown na `%s' nie powiod³o siê: %m\n" + +#: src/useradd.c:1103 src/usermod.c:528 +#, c-format +msgid "%s: Warning: chmod on `%s' failed: %m\n" +msgstr "%s: Uwaga: chmod na `%s' nie powiod³o siê: %m\n" + +#: src/useradd.c:1126 +#, c-format +msgid "%s: Copying of skel directory failed.\n" +msgstr "%s: Kopiowanie katalogu skel nie powiod³o siê.\n" + +#: src/useradd.c:1136 +#, c-format +msgid "%s: Warning: home directory already exists, not modifying it.\n" +msgstr "%s: Uwaga: katalog domowy ju¿ istnieje, wiêc nie jest modyfikowany.\n" + +#: src/useradd.c:1197 +#, c-format +msgid "%s: Reading of `%s' was not successful.\n" +msgstr "%s: Czytanie `%s' nie powiod³o siê.\n" + +#: src/useradd.c:1226 src/usermod.c:798 +#, c-format +msgid "%s: Invalid comment `%s'.\n" +msgstr "%s: Nieprawid³owy komentarz `%s'.\n" + +#: src/useradd.c:1243 src/usermod.c:812 +#, c-format +msgid "%s: Invalid home directory `%s'.\n" +msgstr "%s: Nieprawid³owy katalog domowy `%s'.\n" + +#: src/useradd.c:1264 src/usermod.c:836 +#, c-format +msgid "%s: Expiredate `%s' is no date and no integer value >= -1.\n" +msgstr "%s: Data wa¿no¶ci `%s' nie jest dat± ani warto¶ci± ca³kowit± >= -1.\n" + +#: src/useradd.c:1280 +#, c-format +msgid "%s: Invalid numeric argument `%s' for `-f'.\n" +msgstr "%s: Nieprawid³owy argument liczbowy `%s' dla `-f'.\n" + +#: src/useradd.c:1299 +#, c-format +msgid "%s: Skel directory `%s' does not exist.\n" +msgstr "%s: Katalog skel `%s' nie istnieje.\n" + +#: src/useradd.c:1341 src/usermod.c:935 +#, c-format +msgid "%s: Invalid shell `%s'.\n" +msgstr "%s: Nieprawid³owa pow³oka `%s'.\n" + +#: src/useradd.c:1350 src/useradd.c:1374 +#, c-format +msgid "%s: Invalid numeric argument `%s' for User ID.\n" +msgstr "" +"%s: Nieprawid³owy argument liczbowy `%s' dla identyfikatora u¿ytkownika.\n" + +#: src/useradd.c:1364 +#, c-format +msgid "%s: Invalid numeric argument `%s' for `-U'.\n" +msgstr "%s: Nieprawid³owy argument liczbowy `%s' dla `-U'.\n" + +#: src/useradd.c:1425 +#, c-format +msgid "%s: You cannot use --uid and --preferred-uid at the same time.\n" +msgstr "%s: Nie mo¿na u¿yæ jednocze¶nie --uid i --preferred-uid.\n" + +#: src/useradd.c:1576 +#, c-format +msgid "%s: Writing of `%s' was not successful.\n" +msgstr "%s: Zapis `%s' nie powiód³ siê.\n" + +#: src/useradd.c:1604 src/usermod.c:1335 +#, c-format +msgid "%s: UID %u is not unique.\n" +msgstr "%s: UID %u nie jest unikalny.\n" + +#: src/useradd.c:1616 src/usermod.c:1349 +#, c-format +msgid "%s: Invalid account name `%s'.\n" +msgstr "%s: Nieprawid³owa nazwa konta `%s'.\n" + +#: src/useradd.c:1637 src/usermod.c:1360 +#, c-format +msgid "%s: Account `%s' already exists.\n" +msgstr "%s: Konto `%s' ju¿ istnieje.\n" + +#: src/useradd.c:1721 +#, c-format +msgid "%s: Error: Cannot clear old faillog entry: %s\n" +msgstr "%s: B³±d: Nie mo¿na wyczy¶ciæ starego wpisu faillog: %s\n" + +#: src/useradd.c:1734 +#, c-format +msgid "%s: Error: Cannot clear old lastlog entry: %s\n" +msgstr "%s: B³±d: Nie mo¿na wyczy¶ciæ starego wpisu lastlog: %s\n" + +#: src/useradd.c:1748 +#, c-format +msgid "%s: Cannot add user to LDAP database without DN.\n" +msgstr "%s: Nie mo¿na dodaæ u¿ytkownika do bazy danych LDAP bez DN.\n" + +#: src/useradd.c:1765 +#, c-format +msgid "%s: User not added to LDAP database.\n" +msgstr "%s: U¿ytkownik nie dodany do bazy danych LDAP.\n" + +#: src/useradd.c:1793 src/usermod.c:397 src/usermod.c:635 src/usermod.c:1563 +#, c-format +msgid "%s: ERROR: Cannot find group `%s' anymore!\n" +msgstr "%s: B£¡D: Nie mo¿na ju¿ znale¼æ grupy `%s'!\n" + +#: src/useradd.c:1797 src/usermod.c:1567 src/usermod.c:1667 +#, c-format +msgid "%s: Cannot find group `%s' in service `%s', ignored.\n" +msgstr "%s: Nie znaleziono grupy `%s' w us³udze `%s', zignorowano.\n" + +#: src/useradd.c:1813 src/usermod.c:1583 +#, c-format +msgid "%s: Cannot add user to groups stored in LDAP database without DN.\n" +msgstr "" +"%s: Nie mo¿na dodaæ u¿ytkownika do grup zapisanych w bazie LDAP bez DN.\n" + +#: src/useradd.c:1821 src/useradd.c:1839 src/useradd.c:1856 src/usermod.c:1591 +#: src/usermod.c:1610 src/usermod.c:1628 +#, c-format +msgid "%s: User not added to LDAP group `%s'.\n" +msgstr "%s: U¿ytkownik nie dodany do grupy LDAP `%s'.\n" + +#: src/useradd.c:1908 +#, c-format +msgid "%s: USERADD_CMD fails with exit code %d.\n" +msgstr "%s: USERADD_CMD nie powiod³o siê zwracaj±c kod wyj¶cia %d.\n" + +#: src/userdel.c:54 +#, c-format +msgid "Usage: %s [-D binddn] [-P path] [-r [-f]] user\n" +msgstr "Sk³adnia: %s [-D binddn] [-P ¶cie¿ka] [-r [-f]] u¿ytkownik\n" + +#: src/userdel.c:61 +#, c-format +msgid "" +"%s - delete a user and related files\n" +"\n" +msgstr "" +"%s - usuniêcie u¿ytkownika i zwi±zanych z nim plików\n" +"\n" + +#: src/userdel.c:63 +msgid " -r Remove home directory and mail spool\n" +msgstr " -r Usuniêcie katalogu domowego i skrzynki pocztowej\n" + +#: src/userdel.c:65 +msgid " -f Force removal of files, even if not owned by user\n" +msgstr "" +" -f Wymuszenie usuniêcia plików nawet nie bêd±cych w³asno¶ci±\n" +" u¿ytkownika\n" + +#: src/userdel.c:175 src/userdel.c:194 +#, c-format +msgid "%s: directory `%s' is in use by `%s'.\n" +msgstr "%s: katalog `%s' jest u¿ywany przez `%s'.\n" + +#: src/userdel.c:262 src/usermod.c:1663 +#, c-format +msgid "%s: ERROR: cannot find group `%s' anymore!\n" +msgstr "%s: B£¡D: nie mo¿na ju¿ znale¼æ grupy `%s'!\n" + +#: src/userdel.c:279 src/usermod.c:652 src/usermod.c:1683 +#, c-format +msgid "" +"%s: Cannot remove user from groups stored in LDAP database without DN.\n" +msgstr "" +"%s: Nie mo¿na usun±æ u¿ytkownika z grup zapisanych w bazie LDAP bez DN.\n" + +#: src/userdel.c:287 src/userdel.c:306 src/usermod.c:664 src/usermod.c:687 +#: src/usermod.c:1691 src/usermod.c:1710 src/usermod.c:1728 +#, c-format +msgid "%s: User not removed from LDAP group `%s'.\n" +msgstr "%s: U¿ytkownik nie usuniêty z grupy LDAP `%s'.\n" + +#: src/userdel.c:327 src/usermod.c:709 +#, c-format +msgid "%s: User not removed from group `%s'.\n" +msgstr "%s: U¿ytkownik nie usuniêty z grupy `%s'.\n" + +#: src/userdel.c:537 +#, c-format +msgid "%s: account `%s' is currently in use.\n" +msgstr "%s: konto `%s' jest aktualnie u¿ywane.\n" + +#: src/userdel.c:559 +#, c-format +msgid "%s: USERDEL_PRECMD fails with exit code %d.\n" +msgstr "%s: USERDEL_PRECMD nie powiod³o siê zwracaj±c kod wyj¶cia %d.\n" + +#: src/userdel.c:587 src/userdel.c:605 +#, c-format +msgid "%s: `%s' is not owned by `%s', not removed.\n" +msgstr "%s: `%s' nie jest w³asno¶ci± `%s', nie usuniêto.\n" + +#: src/userdel.c:593 src/userdel.c:615 +#, c-format +msgid "%s: warning: can't remove `%s': %s" +msgstr "%s: uwaga: nie mo¿na usun±æ `%s': %s" + +#: src/userdel.c:625 +#, c-format +msgid "%s: directory `%s' not removed.\n" +msgstr "%s: katalog `%s' nie usuniêty.\n" + +#: src/userdel.c:637 +#, c-format +msgid "%s: error deleting user `%s'.\n" +msgstr "%s: b³±d podczas usuwania u¿ytkownika `%s'.\n" + +#: src/userdel.c:659 +#, c-format +msgid "%s: USERDEL_POSTCMD fails with exit code %d.\n" +msgstr "%s: USERDEL_POSTCMD nie powiod³o siê zwracaj±c kod wyj¶cia %d.\n" + +#: src/usermod.c:62 +#, c-format +msgid "" +"%s - modify a user account\n" +"\n" +msgstr "" +"%s - zmiana konta u¿ytkownika\n" +"\n" + +#: src/usermod.c:77 +msgid " -l login Change login name.\n" +msgstr " -l login Zmiana nazwy logowania.\n" + +#: src/usermod.c:78 +msgid " -m Move home directory to the new path\n" +msgstr " -m Przeniesienie katalogu domowego do nowej ¶cie¿ki\n" + +#: src/usermod.c:80 +msgid " -A group,... List of groups the user should be added to\n" +msgstr " -A grupa,... Podanie grup, do których u¿ytkownik ma byæ dodany\n" + +#: src/usermod.c:82 +msgid " -R group,... List of groups the user should be removed from\n" +msgstr " -R grupa,... Podanie grup, z których u¿ytkownik ma byæ usuniêty\n" + +#: src/usermod.c:89 +msgid " -u uid Change the userid to the given number\n" +msgstr " -u uid Zmiana identyfikatora u¿ytkownika na podan± liczbê\n" + +#: src/usermod.c:92 +msgid " -L Locks the password entry for \"user\"\n" +msgstr " -L Zablokowanie wpisu o ha¶le dla u¿ytkownika\n" + +#: src/usermod.c:94 +msgid " -U Try to unlock the password entry for \"user\"\n" +msgstr " -U Próba odblokowania wpisu o ha¶le dla u¿ytkownika\n" + +#: src/usermod.c:149 src/usermod.c:853 src/usermod.c:948 +#, c-format +msgid "%s: Invalid numeric argument `%s'.\n" +msgstr "%s: Nieprawid³owy argument liczbowy `%s'.\n" + +#: src/usermod.c:416 +#, c-format +msgid "%s: User not renamed in LDAP group `%s'.\n" +msgstr "%s: Nazwa u¿ytkownika nie zmieniona w grupie LDAP `%s'.\n" + +#: src/usermod.c:433 +#, c-format +msgid "%s: User not renamed from LDAP group `%s'.\n" +msgstr "%s: Nazwa u¿ytkownika nie z grupy LDAP `%s'.\n" + +#: src/usermod.c:455 +#, c-format +msgid "%s: User not renamed in group `%s'.\n" +msgstr "%s: Nazwa u¿ytkownika nie zmieniona w grupie `%s'.\n" + +#: src/usermod.c:558 +#, c-format +msgid "%s: Cannot copy directory %s to %s.\n" +msgstr "%s: Nie mo¿na skopiowaæ katalogu %s do %s.\n" + +#: src/usermod.c:565 +#, c-format +msgid "%s: Cannot rename directory %s to %s.\n" +msgstr "%s: Nie mo¿na zmieniæ nazwy katalogu %s na %s.\n" + +#: src/usermod.c:1067 +#, c-format +msgid "%s: Account `%s' does not exist.\n" +msgstr "%s: Konto `%s' nie istnieje.\n" + +#: src/usermod.c:1175 src/usermod.c:1240 +#, c-format +msgid "%s: `%s' is primary group name.\n" +msgstr "%s: `%s' jest nazw± grupy g³ównej.\n" + +#: src/usermod.c:1323 +#, c-format +msgid "%s: Account `%s' is currently in use.\n" +msgstr "%s: Konto `%s' jest aktualnie u¿ywane.\n" + +#: src/usermod.c:1418 +#, c-format +msgid "%s: Shadow passwords required for -e and -f.\n" +msgstr "%s: Dla opcji -e i -f wymagane s± has³a ukryte.\n" + +#: src/usermod.c:1443 +#, c-format +msgid "%s: Cannot modify user in LDAP database without DN.\n" +msgstr "" +"%s: Nie mo¿na zmodyfikowaæ danych u¿ytkownika w bazie danych LDAP bez DN.\n" + +#: src/usermod.c:1461 +#, c-format +msgid "%s: User not modified in LDAP database.\n" +msgstr "%s: Dane u¿ytkownika nie zmodyfikowane w bazie danych LDAP.\n" + +#: src/usermod.c:1780 src/usermod.c:1791 src/usermod.c:1817 +#, c-format +msgid "%s: Error: Cannot copy faillog entry: %s\n" +msgstr "%s: B³ad: Nie mo¿na skopiowaæ wpisu faillog: %s\n" + +#: src/usermod.c:1806 +#, c-format +msgid "%s: Error: Cannot copy lastlog entry: %s\n" +msgstr "%s: B³±d: Nie mo¿na skopiowaæ wpisu lastlog: %s\n" + +#: src/vipw.c:58 +#, c-format +msgid "Usage: %s [-g|-p|-s]\n" +msgstr "Sk³adnia: %s [-g|-p|-s]\n" + +#: src/vipw.c:66 +#, c-format +msgid "" +"%s - edit the password, group or shadow file\n" +"\n" +msgstr "" +"%s - edycja pliku hase³, grup lub ukrytych hase³\n" +"\n" + +#: src/vipw.c:69 +msgid " -g, --group Edit the /etc/group file\n" +msgstr " -g, --group Edycja pliku /etc/group\n" + +#: src/vipw.c:70 +msgid " -p, --passwd Edit the /etc/passwd file\n" +msgstr " -p, --passwd Edycja pliku /etc/passwd\n" + +#: src/vipw.c:71 +msgid " -s, --shadow Edit the /etc/shadow file\n" +msgstr " -s, --shadow Edycja pliku /etc/shadow\n" + +#: src/vipw.c:164 +#, c-format +msgid "Cannot lock `%s': already locked.\n" +msgstr "Nie mo¿na zablokowaæ `%s': ju¿ zablokowany.\n" + +#: src/vipw.c:278 +#, c-format +msgid "%s: no changes made\n" +msgstr "%s: nie dokonano zmian\n" + +#: src/vipw.c:318 +#, c-format +msgid "Warning: cannot create backup file: %m\n" +msgstr "Uwaga: nie mo¿na utworzyæ pliku kopii zapasowej: %m\n" + +#~ msgid "cannot open socket: %s" +#~ msgstr "nie mo¿na otworzyæ gniazda: %s" + +#~ msgid "cannot enable socket to accept connections: %s" +#~ msgstr "nie mo¿na umo¿liwiæ przyjmowania po³±czeñ przez gniazdo: %s" + +#~ msgid "handle_request: request received (Version = %d)" +#~ msgstr "handle_request: otrzymano ¿±danie (wersja = %d)" + +#~ msgid "cannot handle request version %d; current version is %d" +#~ msgstr "nie mo¿na obs³u¿yæ ¿±dania w wersji %d; aktualna wersja to %d" + +#~ msgid "User %s: %s" +#~ msgstr "U¿ytkownik %s: %s" + +#~ msgid "handle_request: exit (%d)" +#~ msgstr "handle_request: exit (%d)" + +#~ msgid "while accepting connection: %s" +#~ msgstr "podczas przyjmowania po³±czenia: %s" + +#~ msgid "Handshake has failed (%s)" +#~ msgstr "Nawi±zanie transmisji nie powiod³o siê (%s)" + +#~ msgid "client has closed the GNUTLS connection" +#~ msgstr "klient zamkn±³ po³±czenie GNUTLS" + +#~ msgid "cannot enable SSL encryption" +#~ msgstr "nie mo¿na w³±czyæ szyfrowania SSL" + +#~ msgid "locale length in request too long: %d" +#~ msgstr "d³ugo¶æ lokalizacji w ¿±daniu zbyt du¿a: %d" + +#~ msgid "error while reading request locale: %s" +#~ msgstr "b³±d podczas czytania ¿±dania lokalizacji: %s" + +#~ msgid "data length in request too long: %d" +#~ msgstr "d³ugo¶æ danych w ¿±daniu zbyt du¿a: %d" + +#~ msgid "error while reading request username: %s" +#~ msgstr "b³±d podczas czytania ¿±dania nazwy u¿ytkownika: %s" + +#~ msgid "No username supplied" +#~ msgstr "Nie podano nazwy u¿ytkownika" diff --git a/po/pwdutils.pot b/po/pwdutils.pot new file mode 100644 index 0000000..033eaf1 --- /dev/null +++ b/po/pwdutils.pot @@ -0,0 +1,2936 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR Thorsten Kukuk +# This file is distributed under the same license as the PACKAGE package. +# FIRST AUTHOR , YEAR. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: kukuk@thkukuk.de\n" +"POT-Creation-Date: 2011-05-10 16:46+0200\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=CHARSET\n" +"Content-Transfer-Encoding: 8bit\n" + +#: lib/authentication.c:46 src/passwd.c:840 +#, c-format +msgid "%s: PAM Failure, aborting: %s\n" +msgstr "" + +#: lib/authentication.c:100 +#, c-format +msgid "Enter login(%s) password:" +msgstr "" + +#: lib/call_script.c:68 src/vipw.c:89 +#, c-format +msgid "Cannot fork: %s\n" +msgstr "" + +#: lib/call_script.c:76 +#, c-format +msgid "waitpid (%d) failed: %s\n" +msgstr "" + +#: lib/check_name.c:70 +#, c-format +msgid "Can't compile regular expression: %s\n" +msgstr "" + +#: lib/chown_dir_rec.c:54 lib/copy_dir_rec.c:147 lib/group.c:389 +#: lib/user.c:495 lib/user.c:759 src/grpck.c:277 src/grpck.c:654 +#: src/pwck.c:284 src/pwck.c:554 src/pwck.c:916 src/pwconv.c:206 +#: src/useradd.c:564 src/useradd.c:1036 src/useradd.c:1111 src/vipw.c:295 +#, c-format +msgid "Cannot change owner/group for `%s': %s\n" +msgstr "" + +#: lib/copy_dir_rec.c:77 lib/group.c:369 lib/user.c:475 lib/user.c:739 +#: src/grpck.c:259 src/grpck.c:634 src/pwck.c:266 src/pwck.c:536 +#: src/pwck.c:896 src/pwconv.c:198 src/useradd.c:547 src/usermod.c:543 +#: src/vipw.c:189 +#, c-format +msgid "Can't create `%s': %m\n" +msgstr "" + +#: lib/copy_dir_rec.c:99 +#, c-format +msgid "Cannot create directory `%s': %s\n" +msgstr "" + +#: lib/copy_dir_rec.c:113 lib/copy_dir_rec.c:199 lib/group.c:378 +#: lib/user.c:484 lib/user.c:748 src/grpck.c:267 src/grpck.c:643 +#: src/pwck.c:274 src/pwck.c:544 src/pwck.c:905 src/pwconv.c:215 +#: src/useradd.c:554 src/useradd.c:1046 src/useradd.c:1117 src/vipw.c:287 +#, c-format +msgid "Cannot change permissions for `%s': %s\n" +msgstr "" + +#: lib/copy_dir_rec.c:138 +#, c-format +msgid "Cannot create symlink `%s': %s\n" +msgstr "" + +#: lib/copy_dir_rec.c:185 src/vipw.c:230 src/vipw.c:238 +#, c-format +msgid "Cannot copy `%s': %s\n" +msgstr "" + +#: lib/copy_dir_rec.c:215 +#, c-format +msgid "Warning: ignoring `%s', not a regular file\n" +msgstr "" + +#: lib/copy_xattr.c:51 lib/copy_xattr.c:69 +#, c-format +msgid "Cannot get attributes for `%s': %m\n" +msgstr "" + +#: lib/copy_xattr.c:93 lib/copy_xattr.c:113 +#, c-format +msgid "Cannot get attribute %s of `%s': %m\n" +msgstr "" + +#: lib/copy_xattr.c:127 +#, c-format +msgid "SELinux not enabled, ignore attribute %s for `%s'.\n" +msgstr "" + +#: lib/copy_xattr.c:133 +#, c-format +msgid "Cannot set attribute %s for `%s': %m\n" +msgstr "" + +#: lib/copy_xattr.c:154 +#, c-format +msgid "%s: Can't get context for `%s'" +msgstr "" + +#: lib/copy_xattr.c:161 +#, c-format +msgid "%s: Can't set context for `%s'" +msgstr "" + +#: lib/get_ldap_password.c:39 src/chpasswd.c:224 src/chsh.c:516 +#: src/passwd.c:881 +#, c-format +msgid "Enter LDAP Password:" +msgstr "" + +#: lib/group.c:305 src/groupadd.c:506 src/groupdel.c:365 src/grpck.c:820 +#, c-format +msgid "Cannot lock group file: already locked.\n" +msgstr "" + +#: lib/group.c:334 lib/group.c:409 lib/user.c:440 lib/user.c:514 +#: lib/user.c:704 lib/user.c:778 src/grpck.c:227 src/grpck.c:294 +#: src/grpck.c:599 src/grpck.c:674 src/pwck.c:234 src/pwck.c:301 +#: src/pwck.c:571 src/pwck.c:861 src/pwck.c:936 src/useradd.c:582 +#, c-format +msgid "Can't open `%s': %m\n" +msgstr "" + +#: lib/group.c:340 lib/user.c:446 lib/user.c:710 src/grpck.c:233 +#: src/grpck.c:605 src/grpunconv.c:225 src/pwck.c:240 src/pwck.c:510 +#: src/pwck.c:867 src/pwconv.c:224 src/pwunconv.c:172 src/useradd.c:538 +#: src/vipw.c:249 src/vipw.c:258 src/vipw.c:272 +#, c-format +msgid "Can't stat `%s': %m\n" +msgstr "" + +#: lib/group.c:435 lib/group.c:478 lib/group.c:492 lib/user.c:540 +#: lib/user.c:591 lib/user.c:605 lib/user.c:803 lib/user.c:873 src/grpck.c:703 +#: src/pwck.c:965 +#, c-format +msgid "Error while writing `%s': %m\n" +msgstr "" + +#: lib/group.c:503 +#, c-format +msgid "Group not found (and not deleted): %s\n" +msgstr "" + +#: lib/group.c:511 lib/group.c:540 lib/user.c:623 lib/user.c:653 +#: lib/user.c:883 lib/user.c:912 src/grpck.c:715 src/grpck.c:723 +#: src/pwck.c:977 src/pwck.c:985 +#, c-format +msgid "Error while closing `%s': %m\n" +msgstr "" + +#: lib/group.c:520 lib/user.c:632 lib/user.c:893 +#, c-format +msgid "Error while writing to disk `%s': %m\n" +msgstr "" + +#: lib/group.c:530 lib/user.c:642 lib/user.c:903 +#, c-format +msgid "Error while syncing to disk `%s': %m\n" +msgstr "" + +#: lib/group.c:547 lib/user.c:661 lib/user.c:919 src/grpck.c:472 +#: src/grpck.c:730 src/pwck.c:468 src/pwck.c:734 src/pwck.c:992 +#, c-format +msgid "Warning: cannot create backup file `%s': %m\n" +msgstr "" + +#: lib/group.c:552 lib/user.c:666 lib/user.c:923 +#, c-format +msgid "Error while renaming `%s': %m\n" +msgstr "" + +#: lib/group.c:693 lib/user.c:1094 +#, c-format +msgid "LDAP information update failed: %s\n" +msgstr "" + +#: lib/group.c:702 +#, c-format +msgid "Cannot modify/add NIS group entries.\n" +msgstr "" + +#: lib/group.c:707 lib/user.c:1103 +#, c-format +msgid "Unknown service %d.\n" +msgstr "" + +#: lib/libldap.c:1364 lib/libldap.c:1429 lib/libldap.c:1484 lib/libldap.c:1610 +#: lib/libldap.c:1752 lib/libldap.c:1992 +#, c-format +msgid "Authentication failure.\n" +msgstr "" + +#: lib/libldap.c:1760 +#, c-format +msgid "Cannot find base ou for new users.\n" +msgstr "" + +#: lib/libldap.c:1763 +#, c-format +msgid "Base DN for user account `%s' is \"%s\".\n" +msgstr "" + +#: lib/libldap.c:2000 +#, c-format +msgid "Cannot find base ou for new groups.\n" +msgstr "" + +#: lib/libldap.c:2003 +#, c-format +msgid "Base DN for group `%s' is \"%s\".\n" +msgstr "" + +#: lib/logging.c:65 +#, c-format +msgid "" +"Cannot open logging plugin:\n" +"%s\n" +msgstr "" + +#: lib/logging.c:81 lib/logging.c:99 +#, c-format +msgid "" +"Cannot find symbol `%s':\n" +"%s\n" +msgstr "" + +#: lib/logging.c:140 +#, c-format +msgid "Error setting up logging subsystem!\n" +msgstr "" + +#: lib/parse_crypt_arg.c:87 +#, c-format +msgid "Can't open %s for reading: %s\n" +msgstr "" + +#: lib/parse_crypt_arg.c:95 +#, c-format +msgid "Unable to obtain entropy from %s\n" +msgstr "" + +#: lib/parse_crypt_arg.c:110 +#, c-format +msgid "Unable to generate a salt, check your crypt settings.\n" +msgstr "" + +#: lib/parse_crypt_arg.c:144 +#, c-format +msgid "No support for blowfish compiled in, using MD5.\n" +msgstr "" + +#: lib/parse_crypt_arg.c:149 +#, c-format +msgid "No support for %s available, using DES.\n" +msgstr "" + +#: lib/passwd_nisplus.c:306 +#, c-format +msgid "Could not determine hostname!\n" +msgstr "" + +#: lib/passwd_nisplus.c:322 +#, c-format +msgid "Can't find %s's secret key\n" +msgstr "" + +#: lib/passwd_nisplus.c:338 lib/passwd_nisplus.c:359 +#, c-format +msgid "Could not get public key for %s!\n" +msgstr "" + +#: lib/passwd_nisplus.c:348 +#, c-format +msgid "Could not determine the NIS+ root server!\n" +msgstr "" + +#: lib/passwd_nisplus.c:366 +#, c-format +msgid "Could not create conversion key!\n" +msgstr "" + +#: lib/passwd_nisplus.c:378 +#, c-format +msgid "DES encryption failure\n" +msgstr "" + +#: lib/passwd_nisplus.c:390 +#, c-format +msgid "rpc.nispasswd not running on %s?\n" +msgstr "" + +#: lib/passwd_nisplus.c:411 +#, c-format +msgid "ERROR: password incorrect, try again\n" +msgstr "" + +#: lib/passwd_nisplus.c:413 lib/passwd_nisplus.c:481 +#, c-format +msgid "" +"ERROR: %s\n" +" password not changed\n" +msgstr "" + +#: lib/passwd_nisplus.c:429 lib/passwd_nisplus.c:456 +#, c-format +msgid "DES decryption failure!\n" +msgstr "" + +#: lib/passwd_nisplus.c:514 +#, c-format +msgid "ERROR: Unknown error, don't know what happened\n" +msgstr "" + +#: lib/passwd_nisplus.c:519 +#, c-format +msgid "NIS+ password information changed for %s\n" +msgstr "" + +#: lib/passwd_nisplus.c:521 +#, c-format +msgid "NIS+ credential information changed for %s\n" +msgstr "" + +#: lib/passwd_nisplus.c:590 +#, c-format +msgid "NIS+ passwd table not found: %s\n" +msgstr "" + +#: lib/passwd_nisplus.c:606 +#, c-format +msgid "User not found in NIS+ table.\n" +msgstr "" + +#: lib/print_error.c:30 src/rpasswd.c:120 src/rpasswdd.c:139 +#, c-format +msgid "Try `%s --help' or `%s --usage' for more information.\n" +msgstr "" + +#: lib/print_version.c:31 src/rpasswd.c:73 src/rpasswdd.c:90 +#, c-format +msgid "" +"Copyright (C) %s Thorsten Kukuk.\n" +"This is free software; see the source for copying conditions. There is NO\n" +"warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n" +msgstr "" + +#: lib/remove_dir_rec.c:74 +#, c-format +msgid "Cannot remove file `%s': %s\n" +msgstr "" + +#: lib/remove_dir_rec.c:83 +#, c-format +msgid "Cannot remove directory `%s': %s\n" +msgstr "" + +#: lib/selinux_utils.c:80 +#, c-format +msgid "Couldn't get security context `%s': %s\n" +msgstr "" + +#: lib/selinux_utils.c:88 +#, c-format +msgid "Couldn't get default security context: %s\n" +msgstr "" + +#: lib/selinux_utils.c:97 +#, c-format +msgid "Couldn't set default security context to `%s': %s\n" +msgstr "" + +#: lib/selinux_utils.c:117 +#, c-format +msgid "Couldn't reset default security context to `%s': %s\n" +msgstr "" + +#: lib/user.c:81 +#, c-format +msgid "Can't find the NIS master server: %s\n" +msgstr "" + +#: lib/user.c:88 +#, c-format +msgid "rpc.yppasswdd not running on NIS master %s.\n" +msgstr "" + +#: lib/user.c:94 +#, c-format +msgid "rpc.yppasswdd running on illegal port on NIS master %s.\n" +msgstr "" + +#: lib/user.c:411 src/groupmod.c:434 src/pwck.c:1082 src/useradd.c:1630 +#: src/userdel.c:569 src/usermod.c:1373 +#, c-format +msgid "Cannot lock password file: already locked.\n" +msgstr "" + +#: lib/user.c:615 +#, c-format +msgid "User not found (and not deleted): %s\n" +msgstr "" + +#: lib/user.c:858 +#, c-format +msgid " Error while writing `%s': %m\n" +msgstr "" + +#: lib/user.c:982 +#, c-format +msgid "Error while changing the NIS data.\n" +msgstr "" + +#: lib/user.c:991 +#, c-format +msgid "Error while changing the NIS+ data.\n" +msgstr "" + +#: src/chage.c:56 +#, c-format +msgid "" +"Usage: %s [-D binddn][-P path][-m mindays][-M maxdays][-d lastday][-I " +"inactive][-E expiredate][-W warndays] user\n" +msgstr "" + +#: src/chage.c:58 +#, c-format +msgid " %s -l user\n" +msgstr "" + +#: src/chage.c:66 +#, c-format +msgid "" +"%s - change user password expiry information\n" +"\n" +msgstr "" + +#: src/chage.c:70 src/chfn.c:112 src/chpasswd.c:70 src/chsh.c:65 +#: src/gpasswd.c:94 src/groupadd.c:64 src/groupdel.c:64 src/groupmod.c:63 +#: src/passwd.c:401 src/useradd.c:67 src/userdel.c:68 src/usermod.c:67 +msgid " -D binddn Use dn \"binddn\" to bind to the LDAP directory\n" +msgstr "" + +#: src/chage.c:73 src/chfn.c:115 src/chpasswd.c:73 src/chsh.c:68 +#: src/passwd.c:403 src/pwconv.c:54 src/pwunconv.c:54 +msgid " -P path Search passwd and shadow file in \"path\"\n" +msgstr "" + +#: src/chage.c:76 src/chfn.c:88 src/chfn.c:123 src/chpasswd.c:79 src/chsh.c:74 +#: src/gpasswd.c:93 src/groupmod.c:77 src/passwd.c:400 src/usermod.c:91 +msgid " --service srv Use nameservice 'srv'\n" +msgstr "" + +#: src/chage.c:77 src/chfn.c:86 src/chfn.c:124 src/chsh.c:75 +msgid " -q, --quiet Don't be verbose\n" +msgstr "" + +#: src/chage.c:78 src/chfn.c:89 src/chfn.c:125 src/chpasswd.c:80 src/chsh.c:76 +#: src/expiry.c:52 src/groupadd.c:74 src/groupdel.c:70 src/groupmod.c:78 +#: src/grpck.c:68 src/grpconv.c:43 src/grpunconv.c:63 src/newgrp.c:66 +#: src/pwck.c:68 src/pwconv.c:56 src/pwunconv.c:56 src/useradd.c:92 +#: src/userdel.c:74 src/usermod.c:96 src/vipw.c:72 +msgid " --help Give this help list\n" +msgstr "" + +#: src/chage.c:79 src/chfn.c:90 src/chfn.c:126 src/chpasswd.c:81 src/chsh.c:77 +#: src/expiry.c:53 src/groupdel.c:71 src/grpck.c:69 src/grpconv.c:44 +#: src/grpunconv.c:64 src/newgrp.c:67 src/pwck.c:69 src/pwconv.c:57 +#: src/pwunconv.c:57 src/userdel.c:75 src/vipw.c:73 +msgid " -u, --usage Give a short usage message\n" +msgstr "" + +#: src/chage.c:80 src/chfn.c:91 src/chfn.c:127 src/chpasswd.c:82 src/chsh.c:78 +#: src/expiry.c:54 src/groupadd.c:76 src/groupdel.c:72 src/groupmod.c:80 +#: src/grpck.c:70 src/grpconv.c:45 src/grpunconv.c:65 src/newgrp.c:68 +#: src/pwck.c:70 src/pwconv.c:58 src/pwunconv.c:58 src/useradd.c:94 +#: src/userdel.c:76 src/usermod.c:98 src/vipw.c:74 +msgid " -v, --version Print program version\n" +msgstr "" + +#: src/chage.c:81 src/chfn.c:94 src/chfn.c:130 src/chpasswd.c:83 src/chsh.c:81 +#: src/passwd.c:409 +msgid "Valid services are: files, nis, nisplus, ldap\n" +msgstr "" + +#: src/chage.c:109 +#, c-format +msgid "Minimum:\t%ld\n" +msgstr "" + +#: src/chage.c:110 +#, c-format +msgid "Maximum:\t%ld\n" +msgstr "" + +#: src/chage.c:111 +#, c-format +msgid "Warning:\t%ld\n" +msgstr "" + +#: src/chage.c:112 +#, c-format +msgid "Inactive:\t%ld\n" +msgstr "" + +#: src/chage.c:113 +#, c-format +msgid "Last Change:\t\t" +msgstr "" + +#: src/chage.c:115 +#, c-format +msgid "Unknown, password is forced to change at next login\n" +msgstr "" + +#: src/chage.c:117 src/chage.c:123 src/chage.c:129 src/chage.c:135 +#, c-format +msgid "Never\n" +msgstr "" + +#: src/chage.c:120 +#, c-format +msgid "Password Expires:\t" +msgstr "" + +#: src/chage.c:126 +#, c-format +msgid "Password Inactive:\t" +msgstr "" + +#: src/chage.c:133 +#, c-format +msgid "Account Expires:\t" +msgstr "" + +#: src/chage.c:147 +msgid "Minimum Password Age" +msgstr "" + +#: src/chage.c:154 src/chage.c:170 src/chage.c:186 +#, c-format +msgid "Input is no integer value\n" +msgstr "" + +#: src/chage.c:156 src/chage.c:172 src/chage.c:188 +#, c-format +msgid "Negative numbers are not allowed as input (except -1)\n" +msgstr "" + +#: src/chage.c:163 +msgid "Maximum Password Age" +msgstr "" + +#: src/chage.c:179 +msgid "Password Expiration Warning" +msgstr "" + +#: src/chage.c:195 +msgid "Password Inactive" +msgstr "" + +#: src/chage.c:203 +msgid "Last Password Change (YYYY-MM-DD)" +msgstr "" + +#: src/chage.c:217 src/chage.c:237 +#, c-format +msgid "Invalid date\n" +msgstr "" + +#: src/chage.c:223 +msgid "Account Expiration Date (YYYY-MM-DD)" +msgstr "" + +#: src/chage.c:340 src/chfn.c:478 src/chsh.c:337 +#, c-format +msgid "Only root is allowed to specify another path\n" +msgstr "" + +#: src/chage.c:370 src/chfn.c:439 src/chpasswd.c:171 src/chsh.c:320 +#: src/gpasswd.c:197 src/groupadd.c:376 src/groupdel.c:224 src/groupmod.c:300 +#: src/passwd.c:523 src/useradd.c:1403 src/userdel.c:454 src/usermod.c:978 +#, c-format +msgid "Service `%s' not supported.\n" +msgstr "" + +#: src/chage.c:395 src/chfn.c:510 src/chpasswd.c:208 src/chsh.c:363 +#: src/chsh.c:370 src/expiry.c:247 src/gpasswd.c:230 src/groupadd.c:413 +#: src/groupdel.c:249 src/groupmod.c:333 src/grpck.c:806 src/grpconv.c:100 +#: src/grpunconv.c:197 src/newgrp.c:155 src/passwd.c:589 src/pwck.c:1068 +#: src/pwconv.c:170 src/pwunconv.c:144 src/rpasswd.c:491 src/rpasswdd.c:1339 +#: src/useradd.c:1511 src/userdel.c:479 src/usermod.c:1014 src/vipw.c:410 +#, c-format +msgid "%s: Too many arguments.\n" +msgstr "" + +#: src/chage.c:402 +#, c-format +msgid "%s: Do not include \"l\" with other flags\n" +msgstr "" + +#: src/chage.c:427 src/chfn.c:531 src/chsh.c:397 src/expiry.c:267 +#: src/gpasswd.c:265 src/groupadd.c:450 src/groupdel.c:278 src/groupmod.c:362 +#: src/passwd.c:656 src/useradd.c:1545 src/userdel.c:507 src/usermod.c:1048 +#, c-format +msgid "%s: Cannot determine your user name.\n" +msgstr "" + +#: src/chage.c:446 src/chfn.c:566 src/chsh.c:431 src/userdel.c:527 +#, c-format +msgid "%s: User `%s' is not known to service `%s'.\n" +msgstr "" + +#: src/chage.c:449 src/chfn.c:555 src/chfn.c:569 src/chsh.c:421 src/chsh.c:434 +#: src/passwd.c:675 src/passwd.c:696 src/userdel.c:530 +#, c-format +msgid "%s: Unknown user `%s'.\n" +msgstr "" + +#: src/chage.c:467 +#, c-format +msgid "Only an administrator is allowed to change aging information.\n" +msgstr "" + +#: src/chage.c:483 +#, c-format +msgid "This system does not support shadow accounts.\n" +msgstr "" + +#: src/chage.c:489 +#, c-format +msgid "This account does not have a shadow entry.\n" +msgstr "" + +#: src/chage.c:535 +#, c-format +msgid "You can only list your own aging information.\n" +msgstr "" + +#: src/chage.c:542 src/expiry.c:306 src/passwd.c:1019 +#, c-format +msgid "%s: Failed to drop privileges: %s\n" +msgstr "" + +#: src/chage.c:554 +#, c-format +msgid "No aging information available for %s.\n" +msgstr "" + +#: src/chage.c:574 +#, c-format +msgid "Changing aging information for %s.\n" +msgstr "" + +#: src/chage.c:580 src/chage.c:667 +#, c-format +msgid "Aging information not changed.\n" +msgstr "" + +#: src/chage.c:623 +#, c-format +msgid "Lastday is no date and no integer value >= -1\n" +msgstr "" + +#: src/chage.c:643 +#, c-format +msgid "Expiredate is no date and no integer value >= -1\n" +msgstr "" + +#: src/chage.c:652 +#, c-format +msgid "Error while parsing options.\n" +msgstr "" + +#: src/chage.c:698 +#, c-format +msgid "Error while converting to shadow account.\n" +msgstr "" + +#: src/chage.c:716 +#, c-format +msgid "Error while changing aging information.\n" +msgstr "" + +#: src/chage.c:726 +#, c-format +msgid "Aging information changed.\n" +msgstr "" + +#: src/chfn.c:71 +#, c-format +msgid "" +"Usage: %s [-f name] [-r room] [-w work_phone]\n" +" [-h home_phone] [-o other] [-q] [-u] [-v] [user]\n" +msgstr "" + +#: src/chfn.c:79 src/chfn.c:109 +#, c-format +msgid "" +"%s - change user name and information\n" +"\n" +msgstr "" + +#: src/chfn.c:81 src/chfn.c:117 +msgid " -f full-name Change your real name\n" +msgstr "" + +#: src/chfn.c:82 +msgid " -r room Change your office room number\n" +msgstr "" + +#: src/chfn.c:83 +msgid " -w work_phone Change your office phone number\n" +msgstr "" + +#: src/chfn.c:84 +msgid " -h home_phone Change your home phone number\n" +msgstr "" + +#: src/chfn.c:85 +msgid " -o other Change the undefined portions of the GECOS field\n" +msgstr "" + +#: src/chfn.c:101 +#, c-format +msgid "" +"Usage: %s [-D binddn] [-P path] [-f name] [-o office] [-p office-phone]\n" +" [-h home-phone][-m other] [-q] [-u] [-v] [user]\n" +msgstr "" + +#: src/chfn.c:118 +msgid " -o office Change your office room number\n" +msgstr "" + +#: src/chfn.c:119 +msgid " -p phone Change your office phone number\n" +msgstr "" + +#: src/chfn.c:120 +msgid " -h home-phone Change your home phone number\n" +msgstr "" + +#: src/chfn.c:121 +msgid " -m other Change the undefined portions of the GECOS field\n" +msgstr "" + +#: src/chfn.c:165 +#, c-format +msgid "Enter the new value, or press ENTER for the default\n" +msgstr "" + +#: src/chfn.c:171 +msgid "Full Name" +msgstr "" + +#: src/chfn.c:173 +#, c-format +msgid "\tFull Name: %s\n" +msgstr "" + +#: src/chfn.c:176 +msgid "Room Number" +msgstr "" + +#: src/chfn.c:178 +#, c-format +msgid "\tRoom Number: %s\n" +msgstr "" + +#: src/chfn.c:181 +msgid "Work Phone" +msgstr "" + +#: src/chfn.c:183 +#, c-format +msgid "\tWork Phone: %s\n" +msgstr "" + +#: src/chfn.c:186 +msgid "Home Phone" +msgstr "" + +#: src/chfn.c:188 +#, c-format +msgid "\tHome Phone: %s\n" +msgstr "" + +#: src/chfn.c:191 +msgid "Other" +msgstr "" + +#: src/chfn.c:193 +#, c-format +msgid "\tOther: %s\n" +msgstr "" + +#: src/chfn.c:255 +#, c-format +msgid "%s: The characters '%s\"' are not allowed.\n" +msgstr "" + +#: src/chfn.c:261 src/chsh.c:204 +#, c-format +msgid "%s: Control characters are not allowed.\n" +msgstr "" + +#: src/chfn.c:331 src/chsh.c:257 +#, c-format +msgid "%s: Don't know what I should do.\n" +msgstr "" + +#: src/chfn.c:377 src/chfn.c:395 src/chfn.c:407 src/chfn.c:451 src/chfn.c:460 +#: src/gpasswd.c:296 src/passwd.c:614 src/passwd.c:628 +#, c-format +msgid "%s: Permission denied.\n" +msgstr "" + +#: src/chfn.c:586 src/chsh.c:451 src/passwd.c:712 +msgid "Unknown user context" +msgstr "" + +#: src/chfn.c:588 +#, c-format +msgid "%s: %s is not authorized to change the finger information for %s.\n" +msgstr "" + +#: src/chfn.c:601 +#, c-format +msgid "SELinux is in permissive mode, continuing.\n" +msgstr "" + +#: src/chfn.c:619 +#, c-format +msgid "You cannot change the finger information for `%s'.\n" +msgstr "" + +#: src/chfn.c:626 +#, c-format +msgid "Changing finger information for %s.\n" +msgstr "" + +#: src/chfn.c:658 +#, c-format +msgid "%s: Invalid name: `%s'\n" +msgstr "" + +#: src/chfn.c:666 +#, c-format +msgid "%s: Invalid room number: `%s'\n" +msgstr "" + +#: src/chfn.c:674 +#, c-format +msgid "%s: Invalid work phone: `%s'\n" +msgstr "" + +#: src/chfn.c:682 +#, c-format +msgid "%s: Invalid home phone: `%s'\n" +msgstr "" + +#: src/chfn.c:690 +#, c-format +msgid "%s: `%s' contains illegal characters.\n" +msgstr "" + +#: src/chfn.c:716 +#, c-format +msgid "Finger information not changed.\n" +msgstr "" + +#: src/chfn.c:724 +#, c-format +msgid "Error while changing finger information.\n" +msgstr "" + +#: src/chfn.c:734 +#, c-format +msgid "Finger information changed.\n" +msgstr "" + +#: src/chpasswd.c:59 +#, c-format +msgid "Usage: %s [-D binddn] [-P path] [-e] [-c des|md5|blowfish] [file]\n" +msgstr "" + +#: src/chpasswd.c:67 +#, c-format +msgid "" +"%s - update password entries in batch\n" +"\n" +msgstr "" + +#: src/chpasswd.c:75 +msgid "" +" -c, --crypt Password should be encrypted with DES, MD5 or blowfish\n" +msgstr "" + +#: src/chpasswd.c:77 +msgid " -e, --encrypted The passwords are in encrypted form\n" +msgstr "" + +#: src/chpasswd.c:278 +#, c-format +msgid "%s: line %ld: missing new password\n" +msgstr "" + +#: src/chpasswd.c:287 +#, c-format +msgid "%s: line %ld: unknown user %s\n" +msgstr "" + +#: src/chpasswd.c:318 src/gpasswd.c:425 +#, c-format +msgid "Cannot create salt for standard crypt" +msgstr "" + +#: src/chpasswd.c:334 src/gpasswd.c:460 +#, c-format +msgid "Cannot create salt for MD5 crypt" +msgstr "" + +#: src/chpasswd.c:350 src/gpasswd.c:441 +#, c-format +msgid "Cannot create salt for blowfish crypt" +msgstr "" + +#: src/chpasswd.c:380 +#, c-format +msgid "%s: line %ld: cannot update password entry\n" +msgstr "" + +#: src/chpasswd.c:395 +#, c-format +msgid "%s: errors occurred, %ld passwords not updated\n" +msgstr "" + +#: src/chsh.c:54 +#, c-format +msgid "" +"Usage: %s [-D binddn] [-P path] [-s shell] [-l] [-q]\n" +" [--help] [--usage] [--version] [user]\n" +msgstr "" + +#: src/chsh.c:62 +#, c-format +msgid "" +"%s - change login shell\n" +"\n" +msgstr "" + +#: src/chsh.c:70 +msgid " -l List allowed shells from /etc/shells\n" +msgstr "" + +#: src/chsh.c:72 +msgid " -s shell Use 'shell' as new login shell\n" +msgstr "" + +#: src/chsh.c:109 +#, c-format +msgid "No known shells.\n" +msgstr "" + +#: src/chsh.c:177 +#, c-format +msgid "%s: Shell must be a full path name.\n" +msgstr "" + +#: src/chsh.c:183 +#, c-format +msgid "%s: `%s' does not exist.\n" +msgstr "" + +#: src/chsh.c:189 +#, c-format +msgid "%s: `%s' is not executable.\n" +msgstr "" + +#: src/chsh.c:199 +#, c-format +msgid "%s: '%c' is not allowed.\n" +msgstr "" + +#: src/chsh.c:212 +#, c-format +msgid "Warning: \"%s\" is not listed in /etc/shells.\n" +msgstr "" + +#: src/chsh.c:215 +#, c-format +msgid "%s: \"%s\" is not listed in /etc/shells.\n" +msgstr "" + +#: src/chsh.c:217 +#, c-format +msgid "%s: Use -l option to see list.\n" +msgstr "" + +#: src/chsh.c:453 +#, c-format +msgid "%s: %s is not authorized to change the shell of `%s'.\n" +msgstr "" + +#: src/chsh.c:466 src/passwd.c:728 +#, c-format +msgid "SELinux is in permissive mode, continuing\n" +msgstr "" + +#: src/chsh.c:484 +#, c-format +msgid "You cannot change the shell for %s.\n" +msgstr "" + +#: src/chsh.c:495 +#, c-format +msgid "You cannot change a restricted shell.\n" +msgstr "" + +#: src/chsh.c:501 +#, c-format +msgid "Changing login shell for %s.\n" +msgstr "" + +#: src/chsh.c:545 +#, c-format +msgid "Enter the new value, or press return for the default.\n" +msgstr "" + +#: src/chsh.c:546 +msgid "Login Shell" +msgstr "" + +#: src/chsh.c:554 +#, c-format +msgid "Shell not changed.\n" +msgstr "" + +#: src/chsh.c:568 +#, c-format +msgid "Error while changing login shell.\n" +msgstr "" + +#: src/chsh.c:578 +#, c-format +msgid "Shell changed.\n" +msgstr "" + +#: src/expiry.c:40 +#, c-format +msgid "Usage: %s [-f]\n" +msgstr "" + +#: src/expiry.c:48 +#, c-format +msgid "" +"%s - check password expiration and enforce password change\n" +"\n" +msgstr "" + +#: src/expiry.c:50 +msgid " -f, --force The caller is forced to change the password\n" +msgstr "" + +#: src/expiry.c:100 +#, c-format +msgid "Age field for %s is wrong" +msgstr "" + +#: src/expiry.c:121 +#, c-format +msgid "Your password has expired. Choose a new password." +msgstr "" + +#: src/expiry.c:139 +#, c-format +msgid "Your login has expired. Contact the system administrator.\n" +msgstr "" + +#: src/expiry.c:147 +#, c-format +msgid "Password changing requested. Choose a new password.\n" +msgstr "" + +#: src/expiry.c:157 +#, c-format +msgid "Your password is inactive. Contact the system administrator.\n" +msgstr "" + +#: src/expiry.c:162 +#, c-format +msgid "Your password has expired. Choose a new password.\n" +msgstr "" + +#: src/expiry.c:171 +#, c-format +msgid "Your password will expire in %ld days.\n" +msgstr "" + +#: src/expiry.c:174 +#, c-format +msgid "Your password will expire tomorrow.\n" +msgstr "" + +#: src/expiry.c:176 +#, c-format +msgid "Your password will expire within 24 hours.\n" +msgstr "" + +#: src/gpasswd.c:63 src/passwd.c:796 +#, c-format +msgid "%s: error reading from stdin!\n" +msgstr "" + +#: src/gpasswd.c:80 +#, c-format +msgid "Usage: %s [-r|-l|-u] group\n" +msgstr "" + +#: src/gpasswd.c:87 +#, c-format +msgid "" +"%s - change group password\n" +"\n" +msgstr "" + +#: src/gpasswd.c:88 +msgid " -r Remove the password for this group\n" +msgstr "" + +#: src/gpasswd.c:89 +msgid " -l Locks the password entry for \"group\"\n" +msgstr "" + +#: src/gpasswd.c:91 +msgid " -u Try to unlock the password entry for \"group\"\n" +msgstr "" + +#: src/gpasswd.c:96 +msgid " -P path Search group file in \"path\"\n" +msgstr "" + +#: src/gpasswd.c:98 src/passwd.c:406 src/rpasswd.c:111 src/rpasswdd.c:130 +msgid " --help Give this help list\n" +msgstr "" + +#: src/gpasswd.c:99 src/passwd.c:407 src/rpasswd.c:112 src/rpasswdd.c:131 +msgid " --usage Give a short usage message\n" +msgstr "" + +#: src/gpasswd.c:100 src/passwd.c:408 src/rpasswd.c:113 src/rpasswdd.c:132 +msgid " --version Print program version\n" +msgstr "" + +#: src/gpasswd.c:101 +msgid " --stdin Receive input from stdin instead of /dev/tty\n" +msgstr "" + +#: src/gpasswd.c:102 +msgid "Valid services for -r are: files, nis, nisplus, ldap\n" +msgstr "" + +#: src/gpasswd.c:238 +#, c-format +msgid "%s: Group argument missing.\n" +msgstr "" + +#: src/gpasswd.c:277 +#, c-format +msgid "%s: Group `%s' is not known to service `%s'.\n" +msgstr "" + +#: src/gpasswd.c:280 src/groupdel.c:300 src/groupmod.c:384 src/useradd.c:220 +#: src/usermod.c:185 +#, c-format +msgid "%s: Unknown group `%s'.\n" +msgstr "" + +#: src/gpasswd.c:314 src/passwd.c:909 src/usermod.c:1125 +#, c-format +msgid "Cannot unlock the password for `%s'!\n" +msgstr "" + +#: src/gpasswd.c:336 src/passwd.c:936 src/usermod.c:1104 +#, c-format +msgid "Password for `%s' is already locked!\n" +msgstr "" + +#: src/gpasswd.c:348 +#, c-format +msgid "Changing the password for group %s.\n" +msgstr "" + +#: src/gpasswd.c:355 src/gpasswd.c:357 +msgid "New Password: " +msgstr "" + +#: src/gpasswd.c:366 +#, c-format +msgid "Password change aborted.\n" +msgstr "" + +#: src/gpasswd.c:379 src/gpasswd.c:381 +msgid "Re-enter new password: " +msgstr "" + +#: src/gpasswd.c:392 +#, c-format +msgid "Sorry, passwords do not match.\n" +msgstr "" + +#: src/gpasswd.c:400 +#, c-format +msgid "%s: Try again later.\n" +msgstr "" + +#: src/gpasswd.c:448 +#, c-format +msgid "No support for blowfish compiled in. Using MD5\n" +msgstr "" + +#: src/gpasswd.c:475 +#, c-format +msgid "%s: Error changing password.\n" +msgstr "" + +#: src/gpasswd.c:484 +#, c-format +msgid "Password removed.\n" +msgstr "" + +#: src/gpasswd.c:490 src/passwd.c:978 +#, c-format +msgid "Password changed.\n" +msgstr "" + +#: src/groupadd.c:54 +#, c-format +msgid "" +"Usage: %s [-D binddn] [-g gid [-o]] [-r] [-P path] [-p password] group\n" +msgstr "" + +#: src/groupadd.c:62 +#, c-format +msgid "" +"%s - create a new group\n" +"\n" +msgstr "" + +#: src/groupadd.c:65 +msgid " -g gid Force the new groupid to be the given number\n" +msgstr "" + +#: src/groupadd.c:67 src/groupmod.c:70 src/useradd.c:80 src/usermod.c:79 +msgid " -o Allow duplicate (non-unique) UID\n" +msgstr "" + +#: src/groupadd.c:68 src/groupdel.c:67 src/groupmod.c:71 src/grpck.c:61 +#: src/pwck.c:61 src/useradd.c:81 src/userdel.c:71 src/usermod.c:84 +msgid " -P path Search passwd, shadow and group file in \"path\"\n" +msgstr "" + +#: src/groupadd.c:70 src/groupmod.c:73 src/useradd.c:83 src/usermod.c:86 +msgid " -p password Encrypted password as returned by crypt(3)\n" +msgstr "" + +#: src/groupadd.c:72 src/useradd.c:89 +msgid " -r, --system Create a system account\n" +msgstr "" + +#: src/groupadd.c:73 src/groupdel.c:69 src/useradd.c:91 src/userdel.c:73 +msgid " --service srv Add account to nameservice 'srv'\n" +msgstr "" + +#: src/groupadd.c:75 src/groupmod.c:79 src/useradd.c:93 src/usermod.c:97 +msgid " --usage Give a short usage message\n" +msgstr "" + +#: src/groupadd.c:77 src/groupdel.c:73 src/useradd.c:95 src/userdel.c:77 +msgid "Valid services for --service are: files, ldap\n" +msgstr "" + +#: src/groupadd.c:257 +#, c-format +msgid "%s: Can't get unique gid in range %u - %u.\n" +msgstr "" + +#: src/groupadd.c:312 +#, c-format +msgid "%s: You are using an undocumented option (-f)!\n" +msgstr "" + +#: src/groupadd.c:320 src/groupadd.c:330 +#, c-format +msgid "%s: Invalid numeric argument `%s' for Group ID.\n" +msgstr "" + +#: src/groupadd.c:352 src/useradd.c:1328 src/usermod.c:925 +#, c-format +msgid "%s: Invalid characters in password `%s'.\n" +msgstr "" + +#: src/groupadd.c:398 +#, c-format +msgid "%s: You cannot use --gid and --preferred-gid at the same time.\n" +msgstr "" + +#: src/groupadd.c:419 src/groupdel.c:255 src/groupmod.c:339 src/useradd.c:1517 +#: src/userdel.c:485 src/usermod.c:1020 +#, c-format +msgid "%s: Too few arguments.\n" +msgstr "" + +#: src/groupadd.c:425 +#, c-format +msgid "%s: You cannot use -f with -o.\n" +msgstr "" + +#: src/groupadd.c:474 +#, c-format +msgid "%s: GID %u is not unique, using another one.\n" +msgstr "" + +#: src/groupadd.c:484 src/groupmod.c:398 +#, c-format +msgid "%s: GID %u is not unique.\n" +msgstr "" + +#: src/groupadd.c:495 src/groupmod.c:411 +#, c-format +msgid "%s: Invalid group name `%s'.\n" +msgstr "" + +#: src/groupadd.c:513 src/groupmod.c:421 +#, c-format +msgid "%s: Group `%s' already exists.\n" +msgstr "" + +#: src/groupadd.c:555 +#, c-format +msgid "%s: Cannot add group to LDAP database without DN.\n" +msgstr "" + +#: src/groupadd.c:572 +#, c-format +msgid "%s: Group not added to LDAP database.\n" +msgstr "" + +#: src/groupadd.c:604 +#, c-format +msgid "%s: GROUPADD_CMD fails with exit code %d.\n" +msgstr "" + +#: src/groupdel.c:54 +#, c-format +msgid "Usage: %s [-D binddn] [-P path] group\n" +msgstr "" + +#: src/groupdel.c:61 +#, c-format +msgid "" +"%s - delete a group\n" +"\n" +msgstr "" + +#: src/groupdel.c:130 src/groupdel.c:147 +#, c-format +msgid "%s: GID `%u' is primary group of `%s'.\n" +msgstr "" + +#: src/groupdel.c:297 src/groupmod.c:381 src/useradd.c:214 src/usermod.c:179 +#, c-format +msgid "%s: Group `%s' not found in service `%s'.\n" +msgstr "" + +#: src/groupdel.c:310 +#, c-format +msgid "%s: Cannot remove user's primary group.\n" +msgstr "" + +#: src/groupdel.c:325 +#, c-format +msgid "%s: Cannot delete group from LDAP database without DN.\n" +msgstr "" + +#: src/groupdel.c:342 +#, c-format +msgid "%s: Group not deleted from LDAP database.\n" +msgstr "" + +#: src/groupdel.c:355 +#, c-format +msgid "%s: GROUPDEL_PRECMD fails with exit code %d.\n" +msgstr "" + +#: src/groupdel.c:373 +#, c-format +msgid "%s: Error deleting group `%s'.\n" +msgstr "" + +#: src/groupdel.c:397 +#, c-format +msgid "%s: GROUPDEL_POSTCMD fails with exit code %d.\n" +msgstr "" + +#: src/groupmod.c:54 +#, c-format +msgid "Usage: %s [-g gid [-o]] [-n new_name] group\n" +msgstr "" + +#: src/groupmod.c:61 +#, c-format +msgid "" +"%s - modify a group entry\n" +"\n" +msgstr "" + +#: src/groupmod.c:65 +msgid " -g gid Change the groupid to the given number\n" +msgstr "" + +#: src/groupmod.c:67 src/useradd.c:76 +msgid " -k skeldir Specify an alternative skel directory\n" +msgstr "" + +#: src/groupmod.c:69 +msgid " -n name Change group name.\n" +msgstr "" + +#: src/groupmod.c:75 +msgid " -A user Add the user to the group entry\n" +msgstr "" + +#: src/groupmod.c:76 +msgid " -R user Remove the user from the group entry\n" +msgstr "" + +#: src/groupmod.c:81 src/usermod.c:99 +msgid "Valid services are: files, ldap\n" +msgstr "" + +#: src/groupmod.c:245 +#, c-format +msgid "%s: invalid numeric argument `%s' for Group ID.\n" +msgstr "" + +#: src/groupmod.c:271 +#, c-format +msgid "%s: invalid characters in password `%s'.\n" +msgstr "" + +#: src/groupmod.c:467 +#, c-format +msgid "%s: Cannot modify group in LDAP database without DN.\n" +msgstr "" + +#: src/groupmod.c:485 +#, c-format +msgid "%s: Group not modified in LDAP database.\n" +msgstr "" + +#: src/grpck.c:51 +#, c-format +msgid "Usage: %s [-P path] [-q|-r]\n" +msgstr "" + +#: src/grpck.c:59 +#, c-format +msgid "" +"%s - check integrity of group file\n" +"\n" +msgstr "" + +#: src/grpck.c:63 src/pwck.c:63 +msgid " -q, --quiet Don't print warnings, only errors\n" +msgstr "" + +#: src/grpck.c:64 src/pwck.c:64 +msgid " -r, --read-only Run in read-only mode, don't make changes\n" +msgstr "" + +#: src/grpck.c:66 +msgid " -s, --sort Sort the group file, no checks are done\n" +msgstr "" + +#: src/grpck.c:78 src/pwck.c:78 +#, c-format +msgid "No\n" +msgstr "" + +#: src/grpck.c:222 src/pwck.c:229 +#, c-format +msgid "Checking `%s'\n" +msgstr "" + +#: src/grpck.c:337 src/grpck.c:384 +#, c-format +msgid "Invalid group entry.\n" +msgstr "" + +#: src/grpck.c:338 src/pwck.c:346 src/pwck.c:616 +#, c-format +msgid "Delete empty line? " +msgstr "" + +#: src/grpck.c:356 +#, c-format +msgid "Invalid group entry with comment.\n" +msgstr "" + +#: src/grpck.c:357 src/grpck.c:385 src/grpck.c:402 src/grpck.c:418 +#: src/pwck.c:365 src/pwck.c:381 src/pwck.c:397 src/pwck.c:413 src/pwck.c:635 +#: src/pwck.c:650 src/pwck.c:666 src/pwck.c:682 src/pwck.c:700 +#, c-format +msgid "Delete line `%s'? " +msgstr "" + +#: src/grpck.c:401 +#, c-format +msgid "Invalid group name `%s'.\n" +msgstr "" + +#: src/grpck.c:417 +#, c-format +msgid "Duplicate group entry\n" +msgstr "" + +#: src/grpck.c:445 +#, c-format +msgid "Group `%s': unknown user `%s'\n" +msgstr "" + +#: src/grpck.c:451 +#, c-format +msgid "Group `%s': Duplicate user entry `%s', already primary group.\n" +msgstr "" + +#: src/grpck.c:812 src/pwck.c:1074 +#, c-format +msgid "%s: -s and -r are incompatibile.\n" +msgstr "" + +#: src/grpconv.c:33 src/grpunconv.c:51 src/pwconv.c:44 src/pwunconv.c:44 +#, c-format +msgid "Usage: %s\n" +msgstr "" + +#: src/grpconv.c:40 +#, c-format +msgid "" +"%s - convert to shadow group\n" +"\n" +msgstr "" + +#: src/grpconv.c:105 +#, c-format +msgid "%s: /etc/gshadow is not supported by this system.\n" +msgstr "" + +#: src/grpunconv.c:58 +#, c-format +msgid "" +"%s - convert from shadow groups\n" +"\n" +msgstr "" + +#: src/grpunconv.c:61 +msgid " -P path Search group and gshadow file in \"path\"\n" +msgstr "" + +#: src/grpunconv.c:219 +#, c-format +msgid "%s: No gshadow file found.\n" +msgstr "" + +#: src/grpunconv.c:243 src/pwconv.c:243 src/pwconv.c:267 src/pwunconv.c:190 +#, c-format +msgid "Cannot create backup file `%s': %m\n" +msgstr "" + +#: src/grpunconv.c:266 src/pwunconv.c:214 +#, c-format +msgid "Error while moving password for `%s'.\n" +msgstr "" + +#: src/newgrp.c:52 +#, c-format +msgid "Usage: %s [-l|-c command] [group]\n" +msgstr "" + +#: src/newgrp.c:60 +#, c-format +msgid "" +"%s - change the effective group id\n" +"\n" +msgstr "" + +#: src/newgrp.c:63 +msgid " -l, --login reinitialize environment as if logged in\n" +msgstr "" + +#: src/newgrp.c:65 +msgid " -c command Execute `command' with new group\n" +msgstr "" + +#: src/newgrp.c:161 +#, c-format +msgid "%s: -l and -c are exclusive\n" +msgstr "" + +#: src/newgrp.c:167 +#, c-format +msgid "%s: -c requires a group argument\n" +msgstr "" + +#: src/newgrp.c:174 +#, c-format +msgid "%s: Unknown user.\n" +msgstr "" + +#: src/newgrp.c:195 +#, c-format +msgid "%s: bad group `%s'.\n" +msgstr "" + +#: src/newgrp.c:218 src/newgrp.c:313 +#, c-format +msgid "%s: calling getgroups failed: %s\n" +msgstr "" + +#: src/newgrp.c:271 +#, c-format +msgid "%s: failure to get group entry for %d.\n" +msgstr "" + +#: src/newgrp.c:281 +msgid "Password: " +msgstr "" + +#: src/newgrp.c:284 +#, c-format +msgid "%s: password incorrect.\n" +msgstr "" + +#: src/newgrp.c:351 +#, c-format +msgid "%s: too many groups, not added.\n" +msgstr "" + +#: src/newgrp.c:358 +#, c-format +msgid "%s: calling setgroups failed: %s\n" +msgstr "" + +#: src/newgrp.c:365 src/newgrp.c:380 +#, c-format +msgid "%s: calling setgid failed: %s\n" +msgstr "" + +#: src/newgrp.c:374 +#, c-format +msgid "%s: calling initgroups failed: %s\n" +msgstr "" + +#: src/newgrp.c:389 +#, c-format +msgid "%s: calling setuid failed: %s\n" +msgstr "" + +#: src/newgrp.c:401 +#, c-format +msgid "Cannot change to directory %s: %s\n" +msgstr "" + +#: src/newgrp.c:439 +#, c-format +msgid "%s: execl failed: %s\n" +msgstr "" + +#: src/pam_rpasswd.c:219 src/pam_rpasswd.c:223 src/pam_rpasswd.c:330 +#: src/pam_rpasswd.c:334 src/rpasswd.c:211 src/rpasswd.c:214 src/rpasswd.c:297 +#: src/rpasswd.c:300 +#, c-format +msgid "error while reading request: %s" +msgstr "" + +#: src/pam_rpasswd.c:220 src/rpasswd.c:212 src/rpasswd-client.c:58 +#: src/rpasswd-client.c:71 src/rpasswd-client.c:82 src/rpasswd-client.c:108 +#: src/rpasswd-client.c:121 +msgid "Peer has closed the TLS connection" +msgstr "" + +#: src/pam_rpasswd.c:235 src/pam_rpasswd.c:344 +#, c-format +msgid "error while allocating memory: %m" +msgstr "" + +#: src/pam_rpasswd.c:242 src/rpasswd.c:223 src/rpasswd.c:312 +#, c-format +msgid "error while reading request data: %s" +msgstr "" + +#: src/pam_rpasswd.c:296 src/rpasswd.c:269 src/rpasswd.c:358 +#, c-format +msgid "Cannot send input back to server: %s\n" +msgstr "" + +#: src/pam_rpasswd.c:331 src/rpasswd.c:298 +msgid "wrong data received" +msgstr "" + +#: src/pam_rpasswd.c:352 +#, c-format +msgid "error while reading request data: %m" +msgstr "" + +#: src/pam_rpasswd.c:403 +#, c-format +msgid "Cannot send input back to server: %m\n" +msgstr "" + +#: src/pam_rpasswd.c:565 +#, c-format +msgid "SLP: Found Server on %s, port %s (%s)\n" +msgstr "" + +#: src/pam_rpasswd.c:568 +#, c-format +msgid "SLP: Found Server on %s, port %s\n" +msgstr "" + +#: src/pam_rpasswd.c:574 +#, c-format +msgid "SLP: Found Server on %s (%s)\n" +msgstr "" + +#: src/pam_rpasswd.c:577 +#, c-format +msgid "SLP: Found Server on %s\n" +msgstr "" + +#: src/passwd.c:210 +#, c-format +msgid "Unable to initialize BioAPI framework, BioAPI error #:%x.\n" +msgstr "" + +#: src/passwd.c:220 +#, c-format +msgid "Unable to parse UUID (BioAPI error #:%x) : %s\n" +msgstr "" + +#: src/passwd.c:241 +#, c-format +msgid "Unable to load BioAPI BSP with UUID of %s, BioAPI error #%x.\n" +msgstr "" + +#: src/passwd.c:252 +#, c-format +msgid "" +"Unable to attach default device to BioAPI BSP with UUID of %s, BioAPI error #" +"%x.\n" +msgstr "" + +#: src/passwd.c:278 +#, c-format +msgid "Unable to create BIR database directory, \"%s\"\n" +msgstr "" + +#: src/passwd.c:291 +#, c-format +msgid "" +"Unable to create BSP-specific subdirectory in BIR database directory, \"%s" +"\"\n" +msgstr "" + +#: src/passwd.c:306 +#, c-format +msgid "" +"Unable to write biometric identification record, \"%s\": BioAPI error #%x\n" +msgstr "" + +#: src/passwd.c:318 +#, c-format +msgid "Unable to open BIR for writing, \"%s\"\n" +msgstr "" + +#: src/passwd.c:349 +#, c-format +msgid "Unable to enroll user %s using BSP with UUID of %s, BioAPI error #%x.\n" +msgstr "" + +#: src/passwd.c:367 +#, c-format +msgid "Usage: %s [-f|-g|-s|-k[-q]] [account]\n" +msgstr "" + +#: src/passwd.c:368 +#, c-format +msgid " %s [-D binddn] [-n min] [-x max] [-w warn] [-i inact] account\n" +msgstr "" + +#: src/passwd.c:369 +#, c-format +msgid " %s {-l|-u|-d|-S[-a]|-e} account\n" +msgstr "" + +#: src/passwd.c:371 +#, c-format +msgid " %s --bioapi [account]\n" +msgstr "" + +#: src/passwd.c:373 +#, c-format +msgid " %s --stdin [account]\n" +msgstr "" + +#: src/passwd.c:380 src/rpasswd.c:93 src/rpasswdd.c:114 +#, c-format +msgid "" +"%s - change password information\n" +"\n" +msgstr "" + +#: src/passwd.c:382 +msgid " -f Change the finger (GECOS) information\n" +msgstr "" + +#: src/passwd.c:384 +msgid " -s Change the login shell\n" +msgstr "" + +#: src/passwd.c:385 +msgid " -g Change the group password\n" +msgstr "" + +#: src/passwd.c:386 +msgid " -k Change the password only if expired\n" +msgstr "" + +#: src/passwd.c:387 +msgid " -q Try to be quiet\n" +msgstr "" + +#: src/passwd.c:388 +msgid " -S Show the password attributes\n" +msgstr "" + +#: src/passwd.c:389 +msgid " -a Only with -S, show for all accounts\n" +msgstr "" + +#: src/passwd.c:390 +msgid " -d Delete the password for the named account\n" +msgstr "" + +#: src/passwd.c:391 +msgid " -l Locks the password entry for \"account\"\n" +msgstr "" + +#: src/passwd.c:392 +msgid " -u Try to unlock the password entry for \"account\"\n" +msgstr "" + +#: src/passwd.c:393 +msgid " -e Force the user to change password at next login\n" +msgstr "" + +#: src/passwd.c:394 +msgid " -n min Set minimum field for \"account\"\n" +msgstr "" + +#: src/passwd.c:395 +msgid " -x max Set maximum field for \"account\"\n" +msgstr "" + +#: src/passwd.c:396 +msgid " -w warn Set warn field for \"account\"\n" +msgstr "" + +#: src/passwd.c:398 +msgid " --bioapi Authentication token is handled via BioAPI\n" +msgstr "" + +#: src/passwd.c:405 +msgid " --stdin Read new password from stdin (root only)\n" +msgstr "" + +#: src/passwd.c:597 +#, c-format +msgid "%s: User argument missing\n" +msgstr "" + +#: src/passwd.c:690 +#, c-format +msgid "%s: User `%s' is not known to service `%s'\n" +msgstr "" + +#: src/passwd.c:715 +#, c-format +msgid "%s: %s is not authorized to change the password of %s\n" +msgstr "" + +#: src/passwd.c:744 +#, c-format +msgid "%s: Permission denied\n" +msgstr "" + +#: src/passwd.c:753 +#, c-format +msgid "You cannot change the shadow data for `%s'.\n" +msgstr "" + +#: src/passwd.c:781 +#, c-format +msgid "%s: -P flag not supported in this mode!\n" +msgstr "" + +#: src/passwd.c:811 +#, c-format +msgid "Changing password for %s.\n" +msgstr "" + +#: src/passwd.c:960 +#, c-format +msgid "Error while changing password expiry information.\n" +msgstr "" + +#: src/passwd.c:962 +#, c-format +msgid "Error while changing password.\n" +msgstr "" + +#: src/passwd.c:974 +#, c-format +msgid "Password expiry information changed.\n" +msgstr "" + +#: src/passwd.c:976 +#, c-format +msgid "Password deleted.\n" +msgstr "" + +#: src/passwd.c:1038 +#, c-format +msgid "passwd: Cannot execute %s" +msgstr "" + +#: src/pwck.c:51 +#, c-format +msgid "Usage: %s [-P path] [-q|-r|-s]\n" +msgstr "" + +#: src/pwck.c:59 +#, c-format +msgid "" +"%s - check integrity of password files\n" +"\n" +msgstr "" + +#: src/pwck.c:66 +msgid " -s, --sort Sort the password file, no checks are done\n" +msgstr "" + +#: src/pwck.c:345 src/pwck.c:380 +#, c-format +msgid "Invalid password entry.\n" +msgstr "" + +#: src/pwck.c:364 +#, c-format +msgid "Invalid password entry with comment.\n" +msgstr "" + +#: src/pwck.c:396 src/pwck.c:665 +#, c-format +msgid "Invalid account name `%s'.\n" +msgstr "" + +#: src/pwck.c:412 +#, c-format +msgid "Duplicate password entry\n" +msgstr "" + +#: src/pwck.c:431 +#, c-format +msgid "User `%s': unknown group `%u'\n" +msgstr "" + +#: src/pwck.c:440 +#, c-format +msgid "User `%s': directory `%s' does not exist.\n" +msgstr "" + +#: src/pwck.c:449 +#, c-format +msgid "User `%s': shell `%s' is not executable.\n" +msgstr "" + +#: src/pwck.c:506 +#, c-format +msgid "Checking `%s'.\n" +msgstr "" + +#: src/pwck.c:615 src/pwck.c:649 +#, c-format +msgid "Invalid shadow entry.\n" +msgstr "" + +#: src/pwck.c:634 +#, c-format +msgid "Invalid shadow entry with comment.\n" +msgstr "" + +#: src/pwck.c:681 +#, c-format +msgid "Duplicate shadow entry\n" +msgstr "" + +#: src/pwck.c:699 +#, c-format +msgid "No matching password file entry.\n" +msgstr "" + +#: src/pwck.c:714 +#, c-format +msgid "User `%s': last password change in the future.\n" +msgstr "" + +#: src/pwconv.c:51 +#, c-format +msgid "" +"%s - convert to shadow account\n" +"\n" +msgstr "" + +#: src/pwconv.c:307 +#, c-format +msgid "Orphaned entry '%s' removed from shadow database.\n" +msgstr "" + +#: src/pwconv.c:316 +#, c-format +msgid "Error while deleting `%s' shadow account.\n" +msgstr "" + +#: src/pwconv.c:343 +#, c-format +msgid "%s: Error trying to get data for `%s'\n" +msgstr "" + +#: src/pwconv.c:365 src/pwconv.c:388 src/pwconv.c:419 src/pwconv.c:435 +#, c-format +msgid "Error while converting `%s' to shadow account.\n" +msgstr "" + +#: src/pwconv.c:466 +#, c-format +msgid "Error while renaming temporary shadow file: %m\n" +msgstr "" + +#: src/pwconv.c:491 +#, c-format +msgid "Error while renaming temporary password file: %m\n" +msgstr "" + +#: src/pwunconv.c:51 +#, c-format +msgid "" +"%s - convert from shadow account\n" +"\n" +msgstr "" + +#: src/pwunconv.c:166 +#, c-format +msgid "%s: No shadow file found.\n" +msgstr "" + +#: src/rpasswd.c:85 +#, c-format +msgid "Usage: %s [-4|-6][-a][-f config-file][-h hostname][-p port][-v][name]\n" +msgstr "" + +#: src/rpasswd.c:95 +msgid " -4 Use IPv4 only\n" +msgstr "" + +#: src/rpasswd.c:96 +msgid " -6 Use IPv6 only\n" +msgstr "" + +#: src/rpasswd.c:98 +msgid " -a Admin mode, special admin password is required\n" +msgstr "" + +#: src/rpasswd.c:100 +msgid " -f config-file Specify a different config file\n" +msgstr "" + +#: src/rpasswd.c:101 +msgid " -h hostname Specify the remote server\n" +msgstr "" + +#: src/rpasswd.c:102 +msgid " -p port Specify port remote server is listening on\n" +msgstr "" + +#: src/rpasswd.c:104 +msgid " -r level Specify level of SSL certificate checks\n" +msgstr "" + +#: src/rpasswd.c:107 +msgid " --no-slp Don't use SLP to find a server\n" +msgstr "" + +#: src/rpasswd.c:109 +msgid " -v, --verbose Be verbose, print SSL connection data\n" +msgstr "" + +#: src/rpasswd.c:150 +#, c-format +msgid "Warning: cannot turn echo off\n" +msgstr "" + +#: src/rpasswd.c:515 +#, c-format +msgid "SLP: Found Server on %s, port %s" +msgstr "" + +#: src/rpasswd.c:518 +#, c-format +msgid "SLP: Found Server on %s" +msgstr "" + +#: src/rpasswd.c:554 +#, c-format +msgid "Go away, you do not exist!" +msgstr "" + +#: src/rpasswd.c:568 +#, c-format +msgid "No server specified\n" +msgstr "" + +#: src/rpasswd-client.c:57 src/rpasswd-client.c:60 +#, c-format +msgid "error while sending start request: %s\n" +msgstr "" + +#: src/rpasswd-client.c:70 src/rpasswd-client.c:73 +#, c-format +msgid "error while sending locale data: %s\n" +msgstr "" + +#: src/rpasswd-client.c:81 src/rpasswd-client.c:84 +#, c-format +msgid "error while sending username: %s\n" +msgstr "" + +#: src/rpasswd-client.c:107 src/rpasswd-client.c:110 src/rpasswd-client.c:120 +#: src/rpasswd-client.c:123 +#, c-format +msgid "error while sending string: %s\n" +msgstr "" + +#: src/rpasswd-client.c:318 +msgid "Searching a server...\n" +msgstr "" + +#: src/rpasswd-client.c:323 +#, c-format +msgid "Error opening SLP handle: %i.\n" +msgstr "" + +#: src/rpasswd-client.c:334 +msgid "No service found with SLP.\n" +msgstr "" + +#: src/rpasswd-client.c:353 +msgid "Error while searching for SLP description.\n" +msgstr "" + +#: src/rpasswd-client.c:372 +#, c-format +msgid "" +"\n" +"Please select a server:\n" +msgstr "" + +#: src/rpasswd-client.c:378 +#, c-format +msgid " (port %s)" +msgstr "" + +#: src/rpasswd-client.c:388 +#, c-format +msgid "Enter number of choice [1-%d]: " +msgstr "" + +#: src/rpasswd-client.c:458 +msgid "parsing config file" +msgstr "" + +#: src/rpasswd-client.c:501 src/rpasswd-client.c:504 +msgid "Trying entry:" +msgstr "" + +#: src/rpasswd-client.c:543 +#, c-format +msgid "Entry \"%s\" is not valid!\n" +msgstr "" + +#: src/rpasswd-client.c:547 +#, c-format +msgid "Entry \"%s\" is not valid, ignored!\n" +msgstr "" + +#: src/rpasswd-client.c:560 +msgid "Bad entries found.\n" +msgstr "" + +#: src/rpasswd-client.c:565 +msgid "No entry found.\n" +msgstr "" + +#: src/rpasswd-client.c:575 +msgid "No entry found." +msgstr "" + +#: src/rpasswd-client.c:609 +msgid "Hostname or service not known for specified protocol\n" +msgstr "" + +#: src/rpasswd-client.c:623 +#, c-format +msgid "bad port: %s\n" +msgstr "" + +#: src/rpasswd-client.c:648 src/rpasswd-client.c:657 +#, c-format +msgid "Trying %s port %d...\n" +msgstr "" + +#: src/rpasswd-client.c:663 +#, c-format +msgid "Trying %s...\n" +msgstr "" + +#: src/rpasswd-client.c:677 +#, c-format +msgid "connect to address %s: %s\n" +msgstr "" + +#: src/rpasswd-client.c:732 src/rpasswd-client.c:1028 +msgid "Server certificate info:\n" +msgstr "" + +#: src/rpasswd-client.c:742 +#, c-format +msgid " Certificate is valid since: %s" +msgstr "" + +#: src/rpasswd-client.c:744 +#, c-format +msgid " Certificate expires: %s" +msgstr "" + +#: src/rpasswd-client.c:750 +#, c-format +msgid " Certificate public key: %s" +msgstr "" + +#: src/rpasswd-client.c:756 +#, c-format +msgid " Certificate version: #%d\n" +msgstr "" + +#: src/rpasswd-client.c:761 src/rpasswd-client.c:1034 +#, c-format +msgid " DN: %s\n" +msgstr "" + +#: src/rpasswd-client.c:765 src/rpasswd-client.c:1041 +#, c-format +msgid " Issuer's DN: %s\n" +msgstr "" + +#: src/rpasswd-client.c:846 +#, c-format +msgid "Handshake failed: %s\n" +msgstr "" + +#: src/rpasswd-client.c:869 +#, c-format +msgid "TLS certificate error: %s\n" +msgstr "" + +#: src/rpasswd-client.c:880 +#, c-format +msgid "" +"%s connection using %s-%s (%s)\n" +"\n" +msgstr "" + +#: src/rpasswd-client.c:898 +msgid "TLS authentication error: server certificate issuer is unknown.\n" +msgstr "" + +#: src/rpasswd-client.c:906 +msgid "TLS authentication error: server certificate is NOT trusted.\n" +msgstr "" + +#: src/rpasswd-client.c:917 +msgid "TLS authentication error: server certificate not yet activated.\n" +msgstr "" + +#: src/rpasswd-client.c:925 +msgid "TLS authentication error: server certificate expired.\n" +msgstr "" + +#: src/rpasswd-client.c:960 +#, c-format +msgid "error loading default verify locations: %s\n" +msgstr "" + +#: src/rpasswd-client.c:968 +#, c-format +msgid "error setting default verify path: %s\n" +msgstr "" + +#: src/rpasswd-client.c:1003 +msgid "Unable to get certificate from peer.\n" +msgstr "" + +#: src/rpasswd-client.c:1017 +#, c-format +msgid "" +"SSL connection using %s\n" +"\n" +msgstr "" + +#: src/rpasswd-client.c:1022 +msgid "Server does not have a certificate?\n" +msgstr "" + +#: src/rpasswdd.c:102 +#, c-format +msgid "" +"Usage: %s [-4] [-6] [-d] [-c certificate] [-k privatekey] [-p port]\n" +" [--slp [--slp-timeout timeout] [--slp-descr description]]\n" +msgstr "" + +#: src/rpasswdd.c:105 +#, c-format +msgid "Usage: %s [-4] [-6] [-d] [-c certificate] [-k privatekey] [-p port]\n" +msgstr "" + +#: src/rpasswdd.c:116 +msgid " -4 Use IPv4\n" +msgstr "" + +#: src/rpasswdd.c:117 +msgid " -6 Use IPv6\n" +msgstr "" + +#: src/rpasswdd.c:118 +msgid " -c certificate Specify alternate certificate file\n" +msgstr "" + +#: src/rpasswdd.c:119 +msgid " -k privatekey Specify alternate file with private key\n" +msgstr "" + +#: src/rpasswdd.c:121 +msgid " -d Run in debug mode\n" +msgstr "" + +#: src/rpasswdd.c:122 +msgid " -p port Port on which the server should listen\n" +msgstr "" + +#: src/rpasswdd.c:125 +msgid " --slp Register at local SLP server\n" +msgstr "" + +#: src/rpasswdd.c:126 +msgid " --slp-timeout Set timeout for re-registration\n" +msgstr "" + +#: src/rpasswdd.c:127 +msgid " --slp-descr Set a description shown to SLP clients\n" +msgstr "" + +#: src/rpasswdd.c:710 +#, c-format +msgid "Please authenticate as %s on %s" +msgstr "" + +#: src/rpasswdd.c:749 +#, c-format +msgid "" +"\n" +"Now enter the new password for %s" +msgstr "" + +#: src/rpasswdd.c:770 +#, c-format +msgid "setresuid failed on server: %s" +msgstr "" + +#: src/rpasswdd.c:813 +msgid "Password not changed" +msgstr "" + +#: src/rpasswdd.c:816 +msgid "Password changed" +msgstr "" + +#: src/rpasswdd.c:1349 +msgid "already running" +msgstr "" + +#: src/useradd.c:54 src/usermod.c:55 +#, c-format +msgid "Usage: %s ...\n" +msgstr "" + +#: src/useradd.c:61 +#, c-format +msgid "" +"%s - create a new user\n" +"\n" +msgstr "" + +#: src/useradd.c:63 src/usermod.c:64 +msgid " -c comment Set the GECOS field for the new account\n" +msgstr "" + +#: src/useradd.c:65 +msgid " --show-defaults Print default values\n" +msgstr "" + +#: src/useradd.c:66 +msgid " --save-defaults Save modified default values\n" +msgstr "" + +#: src/useradd.c:68 src/usermod.c:69 +msgid " -d homedir Home directory for the new user\n" +msgstr "" + +#: src/useradd.c:69 src/usermod.c:70 +msgid " -e expire Date on which the new account will be disabled\n" +msgstr "" + +#: src/useradd.c:71 src/usermod.c:72 +msgid "" +" -f inactive Days after a password expires until account is disabled\n" +msgstr "" + +#: src/useradd.c:73 src/usermod.c:74 +msgid " -G group,... List of supplementary groups\n" +msgstr "" + +#: src/useradd.c:74 src/usermod.c:75 +msgid " -g gid Name/number of the users primary group\n" +msgstr "" + +#: src/useradd.c:78 +msgid " -m Create home directory for the new user\n" +msgstr "" + +#: src/useradd.c:85 +msgid " -u uid Force the new userid to be the given number\n" +msgstr "" + +#: src/useradd.c:87 +msgid " -U umask Umask value used for creating home directory\n" +msgstr "" + +#: src/useradd.c:90 src/usermod.c:88 +msgid " -s shell Name of the user's login shell\n" +msgstr "" + +#: src/useradd.c:186 +#, c-format +msgid "%s: Invalid numeric argument `%s' for group ID.\n" +msgstr "" + +#: src/useradd.c:196 src/usermod.c:160 +#, c-format +msgid "%s: Group `%u' not found in service `%s'.\n" +msgstr "" + +#: src/useradd.c:202 src/usermod.c:166 +#, c-format +msgid "%s: Unknown group `%u'.\n" +msgstr "" + +#: src/useradd.c:301 +#, c-format +msgid "%s: Unknown group `%s' in %s.\n" +msgstr "" + +#: src/useradd.c:316 +#, c-format +msgid "%s: Invalid home directory `%s' in %s.\n" +msgstr "" + +#: src/useradd.c:335 +#, c-format +msgid "%s: Invalid numeric argument `%s' for `INACTIVE' in %s.\n" +msgstr "" + +#: src/useradd.c:358 +#, c-format +msgid "%s: Expiredate `%s' is no date and no integer value >= -1 in %s.\n" +msgstr "" + +#: src/useradd.c:374 +#, c-format +msgid "%s: Invalid shell `%s' in %s.\n" +msgstr "" + +#: src/useradd.c:388 +#, c-format +msgid "%s: Skel directory \"%s\" in %s does not exist.\n" +msgstr "" + +#: src/useradd.c:449 +#, c-format +msgid "%s: Invalid value `%s' for option CREATE_MAIL_SPOOL in %s.\n" +msgstr "" + +#: src/useradd.c:465 +#, c-format +msgid "%s: Invalid numeric argument `%s' for `UMASK' in %s.\n" +msgstr "" + +#: src/useradd.c:913 +#, c-format +msgid "%s: Can't get unique uid in range %u - %u.\n" +msgstr "" + +#: src/useradd.c:987 +#, c-format +msgid "%s: Can't stat `%s': %m\n" +msgstr "" + +#: src/useradd.c:1018 +#, c-format +msgid "" +"%s: No group named \"mail\" exists, creating mail spool with mode 0600.\n" +msgstr "" + +#: src/useradd.c:1026 +#, c-format +msgid "%s: Can't create mail spool for user %s.\n" +msgstr "" + +#: src/useradd.c:1095 src/usermod.c:520 +#, c-format +msgid "%s: Cannot create directory `%s'.\n" +msgstr "" + +#: src/useradd.c:1100 src/usermod.c:525 src/usermod.c:549 +#, c-format +msgid "%s: Warning: chown on `%s' failed: %m\n" +msgstr "" + +#: src/useradd.c:1103 src/usermod.c:528 +#, c-format +msgid "%s: Warning: chmod on `%s' failed: %m\n" +msgstr "" + +#: src/useradd.c:1126 +#, c-format +msgid "%s: Copying of skel directory failed.\n" +msgstr "" + +#: src/useradd.c:1136 +#, c-format +msgid "%s: Warning: home directory already exists, not modifying it.\n" +msgstr "" + +#: src/useradd.c:1197 +#, c-format +msgid "%s: Reading of `%s' was not successful.\n" +msgstr "" + +#: src/useradd.c:1226 src/usermod.c:798 +#, c-format +msgid "%s: Invalid comment `%s'.\n" +msgstr "" + +#: src/useradd.c:1243 src/usermod.c:812 +#, c-format +msgid "%s: Invalid home directory `%s'.\n" +msgstr "" + +#: src/useradd.c:1264 src/usermod.c:836 +#, c-format +msgid "%s: Expiredate `%s' is no date and no integer value >= -1.\n" +msgstr "" + +#: src/useradd.c:1280 +#, c-format +msgid "%s: Invalid numeric argument `%s' for `-f'.\n" +msgstr "" + +#: src/useradd.c:1299 +#, c-format +msgid "%s: Skel directory `%s' does not exist.\n" +msgstr "" + +#: src/useradd.c:1341 src/usermod.c:935 +#, c-format +msgid "%s: Invalid shell `%s'.\n" +msgstr "" + +#: src/useradd.c:1350 src/useradd.c:1374 +#, c-format +msgid "%s: Invalid numeric argument `%s' for User ID.\n" +msgstr "" + +#: src/useradd.c:1364 +#, c-format +msgid "%s: Invalid numeric argument `%s' for `-U'.\n" +msgstr "" + +#: src/useradd.c:1425 +#, c-format +msgid "%s: You cannot use --uid and --preferred-uid at the same time.\n" +msgstr "" + +#: src/useradd.c:1576 +#, c-format +msgid "%s: Writing of `%s' was not successful.\n" +msgstr "" + +#: src/useradd.c:1604 src/usermod.c:1335 +#, c-format +msgid "%s: UID %u is not unique.\n" +msgstr "" + +#: src/useradd.c:1616 src/usermod.c:1349 +#, c-format +msgid "%s: Invalid account name `%s'.\n" +msgstr "" + +#: src/useradd.c:1637 src/usermod.c:1360 +#, c-format +msgid "%s: Account `%s' already exists.\n" +msgstr "" + +#: src/useradd.c:1721 +#, c-format +msgid "%s: Error: Cannot clear old faillog entry: %s\n" +msgstr "" + +#: src/useradd.c:1734 +#, c-format +msgid "%s: Error: Cannot clear old lastlog entry: %s\n" +msgstr "" + +#: src/useradd.c:1748 +#, c-format +msgid "%s: Cannot add user to LDAP database without DN.\n" +msgstr "" + +#: src/useradd.c:1765 +#, c-format +msgid "%s: User not added to LDAP database.\n" +msgstr "" + +#: src/useradd.c:1793 src/usermod.c:397 src/usermod.c:635 src/usermod.c:1563 +#, c-format +msgid "%s: ERROR: Cannot find group `%s' anymore!\n" +msgstr "" + +#: src/useradd.c:1797 src/usermod.c:1567 src/usermod.c:1667 +#, c-format +msgid "%s: Cannot find group `%s' in service `%s', ignored.\n" +msgstr "" + +#: src/useradd.c:1813 src/usermod.c:1583 +#, c-format +msgid "%s: Cannot add user to groups stored in LDAP database without DN.\n" +msgstr "" + +#: src/useradd.c:1821 src/useradd.c:1839 src/useradd.c:1856 src/usermod.c:1591 +#: src/usermod.c:1610 src/usermod.c:1628 +#, c-format +msgid "%s: User not added to LDAP group `%s'.\n" +msgstr "" + +#: src/useradd.c:1908 +#, c-format +msgid "%s: USERADD_CMD fails with exit code %d.\n" +msgstr "" + +#: src/userdel.c:54 +#, c-format +msgid "Usage: %s [-D binddn] [-P path] [-r [-f]] user\n" +msgstr "" + +#: src/userdel.c:61 +#, c-format +msgid "" +"%s - delete a user and related files\n" +"\n" +msgstr "" + +#: src/userdel.c:63 +msgid " -r Remove home directory and mail spool\n" +msgstr "" + +#: src/userdel.c:65 +msgid " -f Force removal of files, even if not owned by user\n" +msgstr "" + +#: src/userdel.c:175 src/userdel.c:194 +#, c-format +msgid "%s: directory `%s' is in use by `%s'.\n" +msgstr "" + +#: src/userdel.c:262 src/usermod.c:1663 +#, c-format +msgid "%s: ERROR: cannot find group `%s' anymore!\n" +msgstr "" + +#: src/userdel.c:279 src/usermod.c:652 src/usermod.c:1683 +#, c-format +msgid "" +"%s: Cannot remove user from groups stored in LDAP database without DN.\n" +msgstr "" + +#: src/userdel.c:287 src/userdel.c:306 src/usermod.c:664 src/usermod.c:687 +#: src/usermod.c:1691 src/usermod.c:1710 src/usermod.c:1728 +#, c-format +msgid "%s: User not removed from LDAP group `%s'.\n" +msgstr "" + +#: src/userdel.c:327 src/usermod.c:709 +#, c-format +msgid "%s: User not removed from group `%s'.\n" +msgstr "" + +#: src/userdel.c:537 +#, c-format +msgid "%s: account `%s' is currently in use.\n" +msgstr "" + +#: src/userdel.c:559 +#, c-format +msgid "%s: USERDEL_PRECMD fails with exit code %d.\n" +msgstr "" + +#: src/userdel.c:587 src/userdel.c:605 +#, c-format +msgid "%s: `%s' is not owned by `%s', not removed.\n" +msgstr "" + +#: src/userdel.c:593 src/userdel.c:615 +#, c-format +msgid "%s: warning: can't remove `%s': %s" +msgstr "" + +#: src/userdel.c:625 +#, c-format +msgid "%s: directory `%s' not removed.\n" +msgstr "" + +#: src/userdel.c:637 +#, c-format +msgid "%s: error deleting user `%s'.\n" +msgstr "" + +#: src/userdel.c:659 +#, c-format +msgid "%s: USERDEL_POSTCMD fails with exit code %d.\n" +msgstr "" + +#: src/usermod.c:62 +#, c-format +msgid "" +"%s - modify a user account\n" +"\n" +msgstr "" + +#: src/usermod.c:77 +msgid " -l login Change login name.\n" +msgstr "" + +#: src/usermod.c:78 +msgid " -m Move home directory to the new path\n" +msgstr "" + +#: src/usermod.c:80 +msgid " -A group,... List of groups the user should be added to\n" +msgstr "" + +#: src/usermod.c:82 +msgid " -R group,... List of groups the user should be removed from\n" +msgstr "" + +#: src/usermod.c:89 +msgid " -u uid Change the userid to the given number\n" +msgstr "" + +#: src/usermod.c:92 +msgid " -L Locks the password entry for \"user\"\n" +msgstr "" + +#: src/usermod.c:94 +msgid " -U Try to unlock the password entry for \"user\"\n" +msgstr "" + +#: src/usermod.c:149 src/usermod.c:853 src/usermod.c:948 +#, c-format +msgid "%s: Invalid numeric argument `%s'.\n" +msgstr "" + +#: src/usermod.c:416 +#, c-format +msgid "%s: User not renamed in LDAP group `%s'.\n" +msgstr "" + +#: src/usermod.c:433 +#, c-format +msgid "%s: User not renamed from LDAP group `%s'.\n" +msgstr "" + +#: src/usermod.c:455 +#, c-format +msgid "%s: User not renamed in group `%s'.\n" +msgstr "" + +#: src/usermod.c:558 +#, c-format +msgid "%s: Cannot copy directory %s to %s.\n" +msgstr "" + +#: src/usermod.c:565 +#, c-format +msgid "%s: Cannot rename directory %s to %s.\n" +msgstr "" + +#: src/usermod.c:1067 +#, c-format +msgid "%s: Account `%s' does not exist.\n" +msgstr "" + +#: src/usermod.c:1175 src/usermod.c:1240 +#, c-format +msgid "%s: `%s' is primary group name.\n" +msgstr "" + +#: src/usermod.c:1323 +#, c-format +msgid "%s: Account `%s' is currently in use.\n" +msgstr "" + +#: src/usermod.c:1418 +#, c-format +msgid "%s: Shadow passwords required for -e and -f.\n" +msgstr "" + +#: src/usermod.c:1443 +#, c-format +msgid "%s: Cannot modify user in LDAP database without DN.\n" +msgstr "" + +#: src/usermod.c:1461 +#, c-format +msgid "%s: User not modified in LDAP database.\n" +msgstr "" + +#: src/usermod.c:1780 src/usermod.c:1791 src/usermod.c:1817 +#, c-format +msgid "%s: Error: Cannot copy faillog entry: %s\n" +msgstr "" + +#: src/usermod.c:1806 +#, c-format +msgid "%s: Error: Cannot copy lastlog entry: %s\n" +msgstr "" + +#: src/vipw.c:58 +#, c-format +msgid "Usage: %s [-g|-p|-s]\n" +msgstr "" + +#: src/vipw.c:66 +#, c-format +msgid "" +"%s - edit the password, group or shadow file\n" +"\n" +msgstr "" + +#: src/vipw.c:69 +msgid " -g, --group Edit the /etc/group file\n" +msgstr "" + +#: src/vipw.c:70 +msgid " -p, --passwd Edit the /etc/passwd file\n" +msgstr "" + +#: src/vipw.c:71 +msgid " -s, --shadow Edit the /etc/shadow file\n" +msgstr "" + +#: src/vipw.c:164 +#, c-format +msgid "Cannot lock `%s': already locked.\n" +msgstr "" + +#: src/vipw.c:278 +#, c-format +msgid "%s: no changes made\n" +msgstr "" + +#: src/vipw.c:318 +#, c-format +msgid "Warning: cannot create backup file: %m\n" +msgstr "" diff --git a/po/quot.sed b/po/quot.sed new file mode 100644 index 0000000..0122c46 --- /dev/null +++ b/po/quot.sed @@ -0,0 +1,6 @@ +s/"\([^"]*\)"/“\1”/g +s/`\([^`']*\)'/‘\1’/g +s/ '\([^`']*\)' / ‘\1’ /g +s/ '\([^`']*\)'$/ ‘\1’/g +s/^'\([^`']*\)' /‘\1’ /g +s/“”/""/g diff --git a/po/remove-potcdate.sin b/po/remove-potcdate.sin new file mode 100644 index 0000000..2436c49 --- /dev/null +++ b/po/remove-potcdate.sin @@ -0,0 +1,19 @@ +# Sed script that remove the POT-Creation-Date line in the header entry +# from a POT file. +# +# The distinction between the first and the following occurrences of the +# pattern is achieved by looking at the hold space. +/^"POT-Creation-Date: .*"$/{ +x +# Test if the hold space is empty. +s/P/P/ +ta +# Yes it was empty. First occurrence. Remove the line. +g +d +bb +:a +# The hold space was nonempty. Following occurrences. Do nothing. +x +:b +} diff --git a/po/stamp-po b/po/stamp-po new file mode 100644 index 0000000..9788f70 --- /dev/null +++ b/po/stamp-po @@ -0,0 +1 @@ +timestamp diff --git a/po/sv.gmo b/po/sv.gmo new file mode 100644 index 0000000000000000000000000000000000000000..2fa1324f3405fe0e7e4801a9d8e128299158e003 GIT binary patch literal 61460 zcmb`Q2Y}p1b^kXQ2$JK9amDt}vSmrOR>cilZaV8ESy;`wlMA-7S9g1-_1*2Bw@4P4 z5`*a_U|PTsifu|TC4i{`gD@>5riB^^HS|CN{DF|b|MPus=2v$2PA4a4|McCNdDGv# zdGls|^ZVA}4}EEgze^udDm@y!_V7~akq4AYcbp>MQt3x4N~J@3;rJi z$+Gk#Q1r)~St>092f%Z|X^^B!Zw6O^-vBQHk37rM+YTz;t>CfXTfh^+`-A%j!CgAr z^G!gdcO7^!_(D+mJpl55>5u$#9(dL{rBWHJgL2;it_Hsx@TkX>O8hKc1uFgv!3)6; zgDT&DgR8;wsf5zK1*D3lzXK^!=?9?FJ(hni1&6`&!B>MPgI@zx&i?@iz~xkaHFy)K zeE$w4i_(w5HQ-4^7JU^|d%PUn0Dc5ix#rR6r-SQ3vM#kimGiB^{ZsHX+^0ai9NZG{ zDWKxL9aKHO0aB#WVMJE`mw_tJ(?F&Bf#CiXC>A@7My80REug}m11g=p;3eSiL6!T0 z)lOdr)lRpA;)_p!qWdjK5lgFR4AJifmEM~{`F|HwIZuT6B=9nD0XPN1GNr!)RnCut zYX3igs>cc%Px;&kDxFt>OTe#!i@}Esdid!9uLYIQ^FhUbKd5-W0#}18V1BAzx(QVK zyaS}kNJ`fk7@*84bH2PXL606rT0OYk`GHQ+q(1K{D{ z$HDpFS3srrT~O_K7|eAlI0&8qPJl}1Ip8ti8^HzON5NCT?}LlLc`%RCSqaMj25>QW z8>sre4OG0Jf@<%BAM52@0VHY=H)saRQ{KO z2{;|xF9PYZ()&U6<9`P{bED^TBdGE{9aMSl0aecjg8OHn+T-9&9zGCo1XOu$1DAkr z1y%kpgQtVP33$?G_umAnK9iu*yA4#oy$@9Regdk!%3HjBwt?b<4!97!2NeH*G2pzd z&W{&^bXlnlsvaK#RjwZd_g`G@?z2IKUkj?9w}C3>8v}k3JRbL-z!Smaw|Tq^!DYBd z1Ktj*z8?$tGjIU+kwY$rt^(D+F9FNod%B0C*JcuYxPU zUxLfQldkk}cX_}kgOVG63!V*r9~AwuSGnB13{?L&0=@t|8uvXQqO|l0P~~{Y)uqxp zFagECarH>m#kCU`M; z(Dja+K$YwHpwhnwJO=y{_-OFoL6!5s8(cn|3ySV)@Cfj!p!njYp!oN_;0fT@LHYka zxR0xNyj5U=e+3lXtpQ&Ls(kl>j{<)QsvRD_!|S;W6yID0sy&_!o(#SRR61V+Ri590 z>W70yJfBm+1-RFPYNs2)!@w7Us^{y#GsCxTxA75}&3Bf&#QJ)KiPm1ixeewqTs zZ?}Vr|CZqY2~g$v8L09cSanQ5#XmdXb)d?18>sre2|OA6FnAL9T`&P3I_CK;40su+ za^3`<0=@`Tyn8|Q*Vn;A!QY1PM~r)T8B~6kgW`uasCIlcxDfm_sC0h;D*r=vdU`8C zg>Men4*1G|_kqg)-$0dTe$B`0a!`D|36%d%@L=%y;3420;QPS0g37OYqqo~LL5;_| zLHU0^xPJvM!hOPo%kOpI8MvPas=wX_YW#i@RKNWzsB!lzQ2q4qN$>CDLD4-1JQdsm zitl!Ts^{IH`t7rz_~SdE+T{=6S>SO~J|Auc75+?6?fN=U{r+)K_5B{W7<@$C`FABK zx@$m{`^liveJ7~)`#h+4zX6X2k8OCl&IQ#TI|JShs@xw2MfU?x`5rLs^Wp+h%s#^j{9{UxO=gAA6Jc^F}biT?6NV&jHncF99zC-wrCDe+QNSK~3k|v%vYd z9}7ypZwC(sp9?DfD?yEq_kah1p9j?r{|bulAJX!6JQ`Fv&j8h*SAlAmn?Uv7ON0BZ zpwj;wDE|0Ya2fb#ZC^*N0M&mNfXeUk;J!Y%+o0OzRxknI1}*^~0M7w`4?Y}R(eZp9 z10H~T9Vq^LEO-dm1P=vo1rGyn2UVWCz$3s16l#! z4IYdCZ$Opv&|928E&vs80(=zsdQklFzJQ+qFUS2QQ2cc2lUUP$+rf3<>p;c-5x5FG z@yVY5<3QE#6`iOOQ zUV{63AVH;5|I+#AZV*vj`ZB0?z35igXR9DXv~&;nXz;|RdAnTzj^Vx*RJ-m474M7S zQt-b(wacQXJ0DyK9*6q|Q2l-jD7o@RP~+t*;0fTLQCQVG0p(r?CSVm*J3J%cd%&}C ze;-u4ANvf?cX7b&pvKp&pwf8@sP_3ZsC2#ro(dlDOy|4PK$ZLP;3?p9LG{Z!z?I-n z!85?)pXL3u6#mD!6$ABLV{@(yqkN*MB1y6gf*M9`mc)Ar-yjOwO{TXr? z)ObJW`7RGm0M(u=K>1$;+V}=l&QVa~{Mn%T^A1q;dmpIuzX+}Ye+DiDSG>T>a|L)I z?x%t0fgcV2e*n+Nz4(RRKBJ)8`>()t;KxA4oA+04ms$@#7WeZ(`F|B$0v`Dyujgt| z`CcE~w*~i|;A;Fo11kRmU+m*)Ew~u>3qY0Qz2L>*ufS#CnYa6Tc?YQS{0+Do{5MeJ zchO5c|Hp$Ha6b!N3w{B-96b7^PIn`?0{82{p ze4Gt{hvI%5cqBLh&IfM=RnO;xYL^d#;)maXCxR#6?Q(n#cs%YKz>~ozg9-S0P<*f# zRQz9nD(8|n`gj-uH{-q)RCzuRD*ms*lfa|jYTw6#r+~Y`#o!&_8t{Jb0&w12yg$}~%I7aZ)$^60%5gt<0{BBv<$L(w zdihTSRi3NCM}xaT#d`^;arqHY`Thb_KOFH^_kS$71osob)4@AI@x$l9i@^i$@o{(= zD7rg9mE#kj_~%Dp8BE^h?YbFM{htLY{Da_T@K?eAlDB)l9Z>Cj7q|@k6sYun3nt)6 z@9_4zBwzzneeVDlf%k#S!5@Juz@y*kxB*l>o)GYEQ2BoW+yI{Rcb?w_sCcggj|2Y! zRD1mpRDBMAm-pvtP;^aD?f!<~|1nT>zYgvN@Amm(7+i{f1624OpvwChQ2q0t;HluD z@9}tS?w1C97brgXJa`uP6Hw#t#CyG5R|R}FsDAqZsPNx_qF?r2&u;`& z`JV$Szc+(Q_mkj-;J3j9JmGyV-!BG5{~}QB^A7M>@U!3}!5@N;0{;MtuMT^^x8FIS z`m+M6AN~qdeLn<>Z@vc}1wQNpp5E~R&kZ;Ps{QJq+Wl3a`uVe<`1-#=#XshQjw?a= zZwT%&Q29O?JQI8icrN%YQ1w3QL!R#0;Musxz%#%*g8P9G{;oxfDieIx6=Tq_80@ze$NLV4ZZp<1(CQ$jk0z4GFA5^?AgR1B6!IQuvKkj^V zE_f{Njo^vkIH+&*dZv|EEw*>qOsB%2?lb&7~6klHrs+`XP)edh0RsWBJi@;xis_#*s z^75|&#V-|5>Aw&ZAAJb4_5@GBedwp1UzZ0Q0Y&$6Q0adPR6TwLo(vxS8E?l6K$YY1 zp!}Zz9uB?+)Hr=7_>bWI;Hlv4|KRz4091Lt2`&NWf7bIm3siZl;A-%8P<;F)@JR5H zB&Kvv0}lf)0+rv^;6DPYKX!vhfG+|UgLi|<=K=6E@b@A7lz;N}JP$k`|Es~rfV;s9 z!MB5|-_Jpnf8GP$&MQET@2fzi|GeP;9&jPzn%uJ1n&lyf?owi|FADO{W4JbTn(xmH-l=w*MO?WH$kQI zdvHGZ=r4MEEdmE|4}j{&XMkn!Euhl-DtI9HTkvA=fG_!aW(}zHE(g`_ZSWBA1)#>+ zYrw<7`$G5^LDlo;pvKh^|Lk;S@R7K;fU4gJco_InQ0?%oWOz6x9pUI(h&&j(em*9P~yL6!fL z;G@8Q2NUq2U-kSJf@k2qGPs`u4&eR}sQmv3UH~rtn&&?WD!n$S^j-xj-*;yGFTHxv6Yryls&w!$P=)X80od_nl&j-aX*Mds-si4N$U7+~(0Z`@pId~HIux~m) zEdn2ndmVT%I0CAEO;G*y3{d^>ZczDuAG`oO;ajd}Tmv47`(>cgy$4kN9{?`_{|Kty z1OMv$aV4nstb&(=PXJZV&w`hNzXdM?SAW~r3(o`3#{ETbH8}4(KJFh2s$H6(%J~{_ z9r#&L<$vUNy}paU)wnMP4+WnJD*qRO%I9wIh2VdJ8^K$@=l&0XFTs7>_nlAQ0q(;6 zOHlkX{sZ>Vj4@xLEb{V)2V*K-&=6ZccVf`H-J@I~@v&?jlh6 zOoPhz)u8(SBO&~sz{R*rKlS{VfO0<$R5_jot^(f}@Vnq+a3B9Omvh@e@y$!X)4-2| z%J&!Gf#69$_wiK*#m}q3bHHmrmHWk@`0}%$`1!{H5B_)O_cKA2V;Ecn-VCZ9uMO^x zff{!|0gnL>_=Sfb52~COgX_TEpvLKk!4tsmgW{6|eu=FPJc)na0_tx&&r5N)6~Nz3 zJWu6m^62kT_}}I~?cZPEemlQz5A>gl@xa&Me>yk?E&-npK9lD${C*y&zw>$4HPjMsK2uxLfv>K_`MiBkLQ0Zgz|y!<9ShV3!YEBKZ1W9{7%JvKF>MCdoz9`Ja>e! zd%-9291`4ukA>gw2N#7hTnYX;@jnI5!ymCwdL_RP4&h(L{k`ye4Rovd{qx|yj0k}0bSMYl&s6X}T$L$w75O^T8k0M-u zPjX2AJsJOp;rb~w`uieyC-^FGCC}gT`?=ufz~#{X7r*c3`5Mm;d47fe-+;#uwgcRO zJO6hk{=dS1Bai+Lz^%W(!u=`#S$bXw`%mz&;HPmN{}vLbisKVJNAUa1K(FxU>L32* z<5%Z-E5Db4=Z1U~b`Q@Qo}YzyXM@XepBvo#O#dDm{5~CgP7Lm!;{Hzf&9Erdc$j`l zEAYFJ=PaHt;$BL=59fIozh92u)jW^qY4F6qPxAZSIrkR`xSHpXT$zt1{50J2z|RwQ z6c5uu>Fpuj3&7X$9KiEE{D03QnV~<)TK%2JbGZFtjtueS{20FxnWeqpAbGr!-+#_? zE06v*^85v1w}USW@zz84VtyYE>U`oR!lrP45R8BSjr&HPH{tOK@HyaJJQwq<<=Mug zzuyw}6(0S)4}3Pb6#NdjgtX(|Hv`SB;L~}2Oh6gDGx*oQ!=V2G{$J+ze}#yf!F9Ob z8{C3*(0v8`Wr+LnfSOM)55MP&kiXTT44vRFzwP`!gXbWgLEN7KH3$AJco>G%J^X%v--z?{@5qqfS){R;-~SfeB6ui%?*`w6-&x?_gMSGw z!~X=HQGT!Fd8ER4^!F2Jp5i}C|Bv5)$FmAr{hh?K8Mpq{fPaSnJ;8km_|N!Xh+i8V z#eF}|2YFtG``MuW-UBj?rGKx-9g;U4O98LvIRnoh5SH+4;kg^X7buXwi*Re6{SBzU zkMNwv??0G}^oaXf+#lijIez~L9*EyF_}$|7k>G+rdoAvB!|%87TYvuyKAPvf!TpMW z9_l*MIF8%!|5FHiR15^)fZyAAUd`_-c#a7)|H-v6^Qxc+3xJZNYsI&jURF1O3JLzntHf^W2R4N4YePC2SM!rv$$-@D`po zKpX#V;m6~6w&DM8!E>D73wZQ*JZbzP{C))ZS)M)kf1l@Ip2y*CfQRzLzZ39#Esn9^ z@!#Nb{C4r^Zwb#`{62-Wj{u*^^LO}N1HKX53GU(1-x)lw;yDiYdhpM{tH7V|e2qtc z$MZDtUkDx*;#~&*d-(ky;CFfEk)Qtln%}SHndaHbQ|0*<{*UFkm*4t(14R{pzNc_LWa~+TV4h2v2pQYXWp5*xx?hAOn&F?FC z-WkH*#P3T;<8V-a7dqI#EAc-s`2Q0=Z{+uhA>S_r|A$9<+{g3$4eqVMZvgje0^L92 z_cVSV%k#7tXWqKb?WDqw z<}MPPUrPLMVJj(@chnk{=~{A4Wn`q$skg5yhPK+HwfYQ!lSzjZ^Yqu02a_GO`sir= zy5yR2J(;T6kDHUJ%FXiGo$RhO&8wEw>Xni9bxFuJpUM-Mc*XTyKk$YIW*LvW>B1`Dk_5@^*WVM^8ImIq$3U85J#cwEb;u*6QtKy4e_SR;H2=WQm^T z1mRzG$cC-E&YC62>SN*O^ox4VEJ0b+fn>bd=u9tNwrm-RY@~BlTk~t#*w-i&V|OM; zlO5HhGCB&2wi}lCfQ`|Z`M@XvNDGTW59_xjBuUcrmWw0UIGs8{S+$l z#=(KD$!M*Kd})OE>-!eB)tR22tWJ?lrMV{*-U_%emd$WuV`RcBl?pQ}nTfOoD)s`4 zwH0C4-Wj6~RV&SrouMWS(PX@}voeZ&9IH)=XOab?-e=6YQd`j&t7NpF`FPBwF`5-s zecP{~+xoWS%-!CsPBnJX@fsY~M%xNqzs-WP-nTK-um6W)s~Qd=3@lRGAC-2yS=-TR zS6wJcFt0)<(qywjh0y-8C4iJfuz%2O-%i zOx$6b@;Z+s$w*^rO5Mlb+MBB*G)Hnn@LS|bXhyc)vW!NOk!rJD8`G46$XDsc_K-4y zx-Or5sQ55OA{!dcswqjW4qLx=&6XiJrpjax-apWGUi$q`7C>qHc|fK_(=s zbqj@GtiFS5sqm)3vlG(WG1=HXR%`9FB3KR6Rvtu?ps>m@ZPK&|%uNgm*CP7F-PU0W ztuxc?=!{z@1sZiLy=r-wPLy_Wp>`Vk7Q<%qv_$I~O(sYcD9W@ECTS-3w0um1_3F)< z3&(5qkV5t5X;{D$8C3Hl`*-iGAw#+vlh&d05vrrLR%HiMzbBy9&026c*Bq^+Lc-KD z3#Ng5K#rxQ){iw_PG!i{KaL1rY(2Y#*ouyvK`5Ub4p$W!J|H%5l+q;EaXxGxQB!#NbtYd0cs!oUUr&dLKnWSMLG;f=BLjS7W zVjo*M#uX|3%eAgga9yLKD;K>0J|8L6V*NF znLV=7SlGl?pi3YO`L!kxi$R*CG3%+I6_<*nYaW>_l+#o!IIpprLDWLGpM?LUa$0k{ zhh^6lZC2eS2u4>z_9vosZ;WO_EEG00r+cYCmU*GXDk)vFTC3OE%!IWkRFO%$YRyL7 zW|T@x%?{l-l?;M$s?ZE;H1SrurrrKBxfpR1dPsM)Fra*y+V;6+DrvwrF8K@G(W#GC zk%<&+n$;SLc`J^O+}vlCwIya+YR!U|PyQx!Ml5F2FXeDV-L}qsrU1?=(*ad&qH&c00LWKWq?Wa=- zsA8^7r}T7m(aFtfyVDG_flc{~&-4WrkzGV6ZXBEW0{2J?VrcOk{w2QH5h&0JuA4N!PP4{CO85-JH&?ZNAR#{Vpn8t)&$bMbk z&7)1V7GhwuY!wbFT;}1r_NbXMrYaLm*rwEk+!VRB2QH9!2+{-#jQivj#a1YhLvEUI zF=i6iD$sIq9LP6oAm=8|MR1RlJSXZCVLOZ2MV8v4grOl})Dyu9?W@ObZp$t9JaMCq zLt;oj)OXo@ycA`OCQm`;*Q((%1ings*d#z>=H$7~_9&uFDx zu^x@_+!(ZVMnjO>F=Iby+L36Oan6Ap>uo<3E6fc&qSh>?F@3YqVL_d3UR#q}T?TDi zrsNU>FBgIwVRcO(wQBVdvpaVYOm}uL$w{B;6FZo~RwXAdG(~N2vsO5*g&t|}JCu}WvM-AaaVX#vP$m>E8Jt6Uv3DL|e#dnU431@@I%u1Pu) zL=z}cSgU6_c*pgmyjJpB>pYA?yPIf5OfoktY%QV|EYM^O5ArJv;W!-U7X$MmqZkq+ z6jpFW5($VZOD-6XR&Y^K8|}(Lqrue_nHciR!D3=Ymu70+zNbGqB8Y%?b)0JNk<845 zRF-!SQJS>EBc#70>f z+8=hzPb#4SY;0g03Pff&i#euYo@21KgovGKBw4QM6|+`F(XS^vD(#V-o(K#5DEKww2jr5#p&fYn^H=nf9zxjx#sHaBW%Oq|2%^tRb>sUrAvs zvG#77^=@GYVZ5+Y$W%!MS}7nDYi8Qk?Af;3SOry-DEe0=lt)d%=1J&OWQXr=pd9Sb zHmWQR+W8vXoE0lZv8q3)7%th^1Z!ZER;A{a=}2RGPiDkO7>VSbZ+n$2bW>(fRh5f{ z4{|L`2QqTZE&oyMz)jZL)x?&JR{yYm7Mq9Gv^`BvTUo1maqgCTX;K@ntKP*j1sUh@ z=G-D7mX&1Ak<5%5Y{zEed63B(yArvlJ1^ktTY>wQbd~UkINb; zL1BDW5Ljzq09z%Gbs4mhF-B$Dq=RToa02SyWM{ORESOy227k9bNaO{H>Pz8?I+l*z zI~g4tn3-%HKiUX2Si5c8mTfb3ZKb|vimnV&GSH6rpz3CWE?QH|OifUQqPUN_TBxz9 zLNjJ6gtK|6P{x3yg!K7T+PK^`-7hWt2nQpYNkbbbG!_b-?|-^FEB>8{e6rGN@0(m> zb8ZQXa;7wGkHRK&A3KuSsv0}I%pm+Wg$_;8H_R@&Fe$Ip2ur2F+6R+DXx4ScL~78{ zW&`^T23fdjylS()H|hEfgNW!jow{UR%2c6_sK9hG?Xlnu3HGDT1>LZ)V>5GM=yc8A z>$h#$zI9-5@cK2I2CaQt&dW?=nq*+_g;A0i>EPOp*Kgf2G`v6L+t$v3+O}-1Q~FM} z>$C7Me`{FTk&3+Zi?z?FHB!eogk$r-ETlBm+(@Hhf>pGoeko+BB;r|tqSWsp^I3w? z(lbHykeV3Q!me8e2g(g~Ux5aV-IqCP%dYU803@X-6!OYkOiA0WXe#}JTw0jK?UO~9 zea<>GKYn5cedxLho9(QuvSRoEiSdu$>dg>E@`r`nS!9hR42VqrI&5i2gw$q{sIc)DR=JullfEmWp(45U zXkWr%Y&tn{wTRU-_T|1>+i-(}embiWR*Z3dCV$S8u;}j&;6P1fyn!r#XF`tp> z_BGe03HtIRKY!1hXn}S%GM7e~O0aL*s1nSHvWMtO-+f!fSfk?FdbFOAqFo)$7Vzdt*8l5&_LOa_6qt*_6aAmL`?^BLl-RPJshKtw;SWkS}O1k5l-`wJlxsF|qt3YdW zS#*#|nEyDRGtOzCO#Fpn7+GIwnIBG7J36O>RrzQ^X-*F@DTa4M;LR@L;+i2R@S~0y zvz)=EwS)7+J=~_FN1CWuPg)p9Kq8}s6?3G}0gHW*V2)BZ&Xj_JHNnrE2NdeF?gTP3 zLaZV~Ol*UhP(Gody2!-R#g>Gt&^psaHYvD>4Dmf!W<|A#jd(k>9az?aIifLQ?K`?O zS;)dVo4A#oTc(3C&zi77!WBNtKG(<*OYjXVz@j zn_87>k90U|$Vr4r9D#id>YOx^g&?C1Yb)DKh{fop>4b^RS~eQ7S;A8Zj{dcn`$vO; zIHo|QMj8zEktlK6QAKc8@d07$x6n)Bbb=Kg8?E=SwTHB|QZxaZRlxUa24zfGd^LaN zO`FPtgG-7;EcWM>1~^NZoi#;QVs!525Yadx;)c9s-)o~acyE}vAQxVI!6NiM5iemZ zs?)V?VM}52gQEvG8yh%VL~hqcMHhj!aQDCubXX;2yvF3tltBZHcP23dv4Pb@^+bbp ztu|2k9+7hLxy8NBl!YHB5vrJ1+kW&c7p4uq%^Qa3QF{qPtN8d1k5e_KIZ{YFimAhp z%I9mr-MMzzt4SzpPCM+`jHdueG(<*973ro^P2Dq}iB2}3c%q+zriHUCWw7dv=xw#5 zGBOd*vIiRWRbwHXCQEsyR9YO0w#LzMWIM6cl|)Jq4=T@2McdU!E4&reH?2KW4CIO4 zDp^09*`N7XU6r2jl*%6J)R#yM*iF;gGqnSwu2p%yhJQ?e^Uq%QeX2=*=t z@i_vZVyb>BbVI5TC|FI@Zu2y5L z&6HF<-xgrXw#DIbP6ntl+P+doD3a`r>x3uoHnEP@o@guCyk$Ny+1+dJIo}j;JKL^! zo7QeybLqh5;ekswY}_z>wO&_Pw_$km+M%Ij-Ii_1K(cjU+wg`p+cyquOSW#`hV^%? z60v`w89 z5Z-vm1>o<;CaP1@96OQ9ba4{>Oo38q)K|R_2{@tSN-~kYKh7{$bw<5gQIq zr4g<7P1`~X4P?=(U<&L~tUzjNE%AK|Y-eSfxmp&jK%XX->Sjw5>8EC(fy&;-wf)nr z;f6jkgXZ+UM3W8MRttlddB+q%TIR#)cJ6<)Q4&MhBOl=4-v?eSO(kB3RY@kDZOvs8*xGrNR>-CKX1-dq&y8#ZDz}>rQy6` zz85yK>=f>k3?STJ~Udk$M3P+;T^s!Y$&(MjR z!rMSa688)wEK^R`CK|g}dQYmLcZcC)vOvo=qqQdGoTJQ^##Y9x&YBs4?%~L{RZmjb zP3;V@D*!#meDs2X-*&K=BZO66~NoC_J z(x^RkFt*BqaC8|Wpuzi8?8HiUoelyZA1NFu$$RzcTRDqinp@N>yo+Q(V`X8c4b;e# zO5#2Yxy&;&dPh3O&ekfuvy;&_f|5ngNLL%)IHaX%I3`^R_vq-5GyUc-0TMyx8JY4* z+p4?`u2-J(l_lwI*)2Y$p|u-p_0G*IwanGQ7Uyq5u(7UXAK|p({JE3TcrjVkm!pMx zMLnwK{mmANvvKRHWSyNe8Zz@_sKyNbGe+jj<_vF-m<y7(lKdDxcDr`Ra!b%wOU#g>aI+R_H{r{P_znLY+0knh7bI@4I`aOCK@X@H$~i z8oH=!t)f|MnAHM3$(E|FYg#1b(4F>H*&>^Vbc8iOZF@AyHX=Gdj~Zu@nEU2kCe&Az zw%a(=vH-(jg-a!(k%tS4#7+eGytW?%@jM&VVfn<+zDokJ+ zZL;Je`ebJGW8`L8g7?i-pgzkgu3gsf8hdDcmucldbA%v&jaVN)Nil8#}bs zZ4Nls22sL1msPQHDa)vIL5B;=pM@HC(bLvz!O$2zGbyFPPEAHM7iOwY@fMZs zx;QNqIsQy+D5N1=_jZ=`aO(mMw-n$+>SYU@fSUaqB# zx0+6Az;6S&E*eF>%u~_( znsT^_K~ZkfKOOzEi+{u^bIQL-gt6Y0nf=?)H6&}0<+nsQVBWSv4!hH3jc-^Q9DoivV`ktGC+*%pkj zi6zs`;Ww8d_$n9w4TxN~GvHVoCw1f@&MWOTVvE$LA+w_0bPI(o7N;0^OS#n*p795} z&ZwoTYyP$5wD}`%_}j`N3l~-B=RTQZtUKFV%HtH~mhyxmlSG)>yU2&g(G;Z zs(5=+Wpw36rxANBH1tmH#9my7GrePosPX<+xPYiHnQh}FWCjU$)D~m+wHByl_AiDt zW-bZ?E=pTW68l?3yZg;+r~$51ZIaDBRmsz}8!RE3joq^n$qq(>XPkxR(6PfJ(O}-} z)U}CL(vd_hH(bREYhGJXjE>s&Up$xNDxWl5El1))gNaht3t|>AOHnw(5R9^!;Mu52Shp(tJ^ybmvP#0>z3j28VP2WGvz@P zpjF8kD^{*7uQSu0Op zu@XA%B$S6aHPYf$3E5BvE4+`wo!fgR*)T##UNGHQJ!*dS;I*t(y@+`A@ea$G@^G~> zwJI6n);DgyOfG0oms`75OMW++%gkZqn>K7(n^k`0vK8|sSXla(hxbfV3BBsRe0q{K z&XoIk)E!PR4k2NK^?NhbH+3xl(M z#67n6UWxY7{44g}Ie8O=U?5tsR$~w}Er~xnAlU*eq2xVcJo()~Zg*QcnVKkSZI;(ejzEAWu7Yu1pmcyFSp;*x_385NH)Y%Spn&v2SO% znLGxEil4oN2Xgea( zQwCjUK6l<|!x!3&^dV>My)DNBG(AJp2tw0xa3~DVF2*QcXMP3ZC)Y{wV6SCRyvckW z^P(DEHhf~-MLde1i>nTHdDPRreQq@`)7i|ooPkZ}k08yIJ_BN!S*bde=fvXOP!WTjIxf%{dD+y~&?$U!y1y9;WzY0?D}x&4G!knBrQOeR`!>*PTl;he>2|vf}ft zk1eh{pK!y9?nNDvW?e}ZM6U&!9TBzOzm`vG=%qSbpDOJm-gM3^9Cm&PgNp*a5@Xin zZH)Z(CY4-CT3)y&2E0ZL- zH0^b7ebq3N7v2NmR#}gb4C|m>fykItdKUG~id$z6q^D|J#y>uuYAf7!(;jCc45A0k zo7-}y_ud5qOiEYDT9~PlG{-R*?Xq&iZ~1G_)7B;u%uRLErk1?`lL;(Wyt{nw)2)bp zTr+30Acb)Gd7nt3x*F~6iq(SxxwIr-UC_;#GBt=Xfm|oByZy%0Q{ndWz>q}4IK;UR z59x$)6gWo!iFS?VS5PP|HU|9oMhky~90ul{BD(=yQ+?JQ z*6iHo%4E_CoYURHT{oaxKNqJ?NsI1|4p-Y2FF+4PHfflaA*GbvJO1S<%lP|zOFlMy zjMZUzUu9T@-C7%?hwd?5%W_j1DyBuxj~0^P0CJxsHq(^42%Tk2kU*KT;I}EkUtwbO z=;A~-lTwUrEZ8uDA-$ND!aa4tZVU%c|AiRdSgheB zyhDhUaA#ryKk$#sz%f+qChI{hy`6O?Vk72r30hUI)5PFvNLG^xLzlMgcr(TgwE7-i z?V0S6w6urGJl)=-&mb6;6>q{WjWY2})+V7fAj0P;U}asB4*TZkqj=-6mwBTWPgZ>j zgea864KwgQu1TL&Q!JkKirXmxxR*+_^ z+3}gA@xN+-oaUxXFAGXRUOr1T3%8{+8K@mivB>UA598YkotFq!7qopd)#M}zJBU(Y z!{1i@&dswy4rt&clY3h5rS()Xl8sDDMWrhUkPr!L_ujiarr0@H8~Y1I4>aQ9P3ft! zYcjjd4c$(p6w}MnuYkF1noTEeR||^wrTa?N=rFgCo)nJ?7l{Y4hDu~<7q31a4%$3Y zG>9Bq07=K5*n96R5%N+psAn?p7?Xx*_1Z32D*Rc4x{r~I$?RAQ-Oa7gC&t&uky9i9Ms356}cmWgj=yPzs#QBzt6j1={AsQ=Hp~ep?UFik4 zzERa0Ve#6Z6+O`NG2%ECu=Su#=$vPijVtyPI)a+eS2XM~l2Lculqp(i0yKBu z1d4Z|r{iD_i$3cMmy-`75rn+)--6uCRlFcQ^l92nsb;3NM^PawM$9W@Y3zbh)<>r+ zUay{-o5X)}uz<#U)AbF7BymBZB>={Kf@~C+@l{4N_(lUwX8KM$U6sTX{O0vE|32m} zy$Z+9Yxv8IjX~73W|+(Pidj$tjWI(^YJ!FCN?+UYp?)lH5W< zGgUF9Y64e$DmB|x?d*63Ii>Y;G@ZIFLn>^x?Qe$Vyv5GOhc~4%i+1J(5Ngy&KIHFg zPrJM~lXa-JyI_CgBXNx8X1%LO1<(z&KM~hNHk#7mA1}=g3#M*KRg9X(;?;n_yL^G9 zNTZwEwbJ9=T^X|&R9yt=cvF>a3Y$5xunf;<*R}ddixhLoL|9%xN__j(?nwMl;5=oT zjEO^Tl%1VCl*`MK#?FaynpGkuV~bKV zQqGi0MxjJvHq2I7)=Z@iNoxD6`WUSlSKU1Q$pK;0ooCqnxki@m661wCVH9=2!V$h~>Pr_N9V`$Pp!<=>u@P}B5L?*2qaH~8S&hRY zrqS`%iAXtpW|meOQIn>1aJ&pIP;e<7mUakLNqs<*2~c~AAy_vk5!}q$0IR574nJ85 zo2i-`szEg)%CW&wRU8V=_TOm$`P zqWH`D#x!>a=MGNAYUHqbL`}_H}h1x6B;Ey8PTw@6t-y;Hkynf zd^)r}Cv7P1V3$KIkfc}2_l=qkbzStvUfBOOz7+*Ng}F6AYja9)qA@KqLlT!~%(_;X z-fnd^h;+GOmR2rGS8o%aA?8x4G4^U>Pnn4zZ5d6sJ?v%s;GTy{K}Ay~1SiW1yL_H) z`Rn&_XZBQAyE4yP4WiWL`#);T% zz1x<6mX{fe1pTaNK(y;HC$T@GM#kpeP@mA9^pwk_hpwjA1`U!0FO$3t zj*?4KUBN&%nq9E#jeMm87PCcQl#A=uZp;lkKLC;Ic*bFUJiVLVh$rG0-4}7tJ*|I3 z)zT>_G-cFJyLKqD0(8-7+Df+;gM5=XaFHoi^=gxDu2xdpsda_#4*TVKtk}yEwywsj zoo0!kQ_K5`5Qn(l=bkHV|8!YsXosmqtuUY1;PZ*yuDmf%&2`qNnl0IDVF$hy_DI7` z_SuZ_e~?`0f=ygi9NEw`6K%_J0xw~cl$Vaicj~hiS%Zd4>%HvgKQ;?-y@A_8!c?zq zq??(*3 z&3E4sOflyyh2&_jDzRR{`F@tYMnlGHmKVFRhFJ_7frtfXhoX?qQzLb(`DUQE;Fhif zv^G)tQUBsavx#~t=B=<$Pf8YfrZ$rm1$I6i4&Jg0YTRn8g5DXcKy8FRA#~5Kfo@A& z>Py*ZnDAB07DG`ST-MeyW!~DjNQS}^_s)CM2#V+oIpj_pc<0r!F&B#1P12Qjw(I3z zjq=7%tEYVX2iP_6EmXR+kDRrn1DfDuZC%XEwjep~HAAFy0^Q$;3(DKO8h#%+Ehvxe zX9TXqzlA6yMOjo~Z9W@ij*l89I?M^kw z_pGOVeU?Q*GdUNm!=)Q52XCg&|y%Z^BA8NbCUYmH38&(d9)x zTL!tC@f<(HAq%n`eGH1`xHlfAdK8LAu_s#j5iyhVqZ zY5g#Ud4>kt$ia=gor|p=*PKiS1)?FDR8mzW9P@E`%kB8KluU2OS9eXZ?}}K~+Kma! zE}hj}qKoq5R%4oSe(yKPRpZ?t`X%6IrS%yiM>dQktA~{OFSTWQr}THF0wH8z{*>KL zyoAf~b3vv@VPMg*o1A8{Pi*j?N&NhtIQkjiwDO$D`lDgI0%~PSBZJ%ME!gY{K`!gjUOa5qM z!td;t#UxByxm)|8Pgj&7VudXZ*{e(vcir93rTrXgXRjv|YKG`~XQw;5{N@&Y%x1at z;(lv;8mPK+?_GBEvEfQ+R5L?SjI2j~n{PVWF?}`LJ1X&u8zC^N$YFCPY}=-MoKIgV z6|E9t+G=bL(~6y0LSxQod}OZG**lJ;r3;FXQHAR&re&yO&1t8>xMe-JlFAl&DWOgP z&5e?GdepW1NKaILt^d9W)vf)hqD979Ic<*6$f2%*22MAsq5ugrw3O|lby+DQw+4~k zMa=5hH4&F5ac>S070ljBmF&=^#>QAr`Q87SR$?VdHzlH}+dlx%zq)x}w+A88q!(BR zqrUmmPGtTAcb8TJS z6l~e79GbNqoc@d4*rzwTN%O3f?=^q(#uKp3OB#iBY`(-!Vl`)}zRLGFXCg}{2R|A% zBek>ea(Y0++_;lL$C-2Z-h@lO1Yz*;K_o5*oM`b4gicsQ#Zz_ub%V4Kqqv=g8zYIV z4}F=HoV0Vo87pG}6>&!eFDt7Hi>@KunwVRhJg3F&Ha13Mw`$k5XWuien)imJL)z3t zNV^xc!OvZ>&3%_m5_utSWM(3ZL};QM?Vp{d>s*g#R!Ai+%4}h=m@eBaz9u%E4rP*m3MO?z+KD7NMcWnmE-WTxL2?k_a^ zR7E%D$nyKLX5*7KKQjq8E_Y34rx%HXaPZS^U6W&9$|zOy(|{c+2m&grQAoOnFh9mJ zYJ1Z-4uKgn@gbKRq*($nF2iTe(Ro9yJX+1>2d)a3q}K8-dUB;#mSFMU5D`lUl7=&@Od88{{E(5$q-%8VQiU8Zqh$edml3C%nOtI7*)nTJ0FnJuX4}a$WMdpuFw$9ArUtT z`@2Qiw-x*txYYAtllGHXroqKeD`+gnPIIbI6i(W}l$8*bdsl5a?Qys9p*BvZ+CVHu zW@K&E@WFYJj)HBfKx(w+O)ON2@F59r?=sg>mcJmC$ z?<-uBxc1s-h)(e7-QjA$divgB80P3Gu@zV-_$kHE64t>!3#X?ZbJ-QhXC~`frrTg7 zDmOAJ{akuudW|S{Z(4olz%J5uW76J571M+R7P*8l9`c^FL z;BB3+)bKqrvvW#*=!*=}wY;lbcDLIS+Rgx(j&CGOgK}IreLzn6M0)KKN<7kpC3V;h zUz|2UYUay-qhW$=cMXcXO~>Yu(y*V!*Y0xZ3fgs4d=dp|xRJ!0JDwzn@1}>hA5fyW zS_RciA5gHjZ`02WH>%IL`<{ka2d9)iaayZRv1gWUxYKeWMmn`-UVXOS zBXKrfW=*q5mZi*QCR=~AMolS*wLP2(4&uos(!4_5+dD%n@!+7qton|F`&8X4B$O5} z=`jcm>E+N-4r=Z9kl9dt5h;GoAtz#dMv4Jl-+4&O)QV*Of@2`N1mpL;`h*#Vf_xLy z{Jz9cVMd@$jWR(DS9UPHyW1v*G>2$i@}b~ty)j-uP)OYpQ{>p9S@N6xD-ayOa}6cs zc}b)2Vl7Hjw#-|s#5&UV>~jzUlg!jyT(Y@fY19`XsyAw6XxFKC3O9i{u31gSr%+co z#p#W)e4H=q<7H%=165=BYrknsyVl%pNwPF@rdUl3DOphd{Vk+=%r+hpN+pbj8dE@s z#%82WV8_xHs*pdCg__(iMl{mUl(O8RWCqcQnb5x*p~_2FwcvbaG3qkjlSU7e0;MQ? zXUH$mpow#rZ%AtloyWxqD45PveR_dnh7|1c5rs(Fpx1eQzoH=S&od>EJn9@9TjIlD z=nPhWJESBz95(+<21pok%($u@+;DXm*MXY(SEm5>-ohCP1K7W&As=wbp$j^$XkfRSUrBS^Yl+>M-~2U@}UW44_#ZP zeb2%e$mc)>;{2o(zXC&j8^ePYWimQAqX%yNF7_)DqX^=k&PIpzhYbHQxxfe zo>Kf|gvlC?wrOoxPhU^v)u%SA<2LqlzF!bNTCq=3nkmxSvc@=rbQx#yl(n5G=(P(f zroKmUsZML_9W%QgA=YT-pxL6u&qd6bZu((~S@KS4X3Hrhidh!kY|P0R<`U9DzeRYs zcIy?jJJUC0FP!Q1NDs;0L{2|f5sx59P-VefBsuIV6U<@UX_7KkBZqYQ#~E7OZ%*r^ zz~uN1??JFNwOvs#O0Z4tD6t{HTqz}}kib}Y;6 zOU;UH=bx*{#nR@Ty^8c;TYsm&Sj7e@M<8mp9`gNrF>x-Vuy0|Xt`K*ni{U=4E89WE z86bSV!h1gV@rqo^mJ-Iv@c9Z>=JER#ZbcRgdM5GX6_JlvQu)Ss)CX;+Klr7~S#=2S zj5#eSWpYaj7aEwor0Opp>IE0wyvZeHG%S;2W`dGI&r~`sQ(cAc^6-yZbbHSHX$!bk z7v&c(=8=!z>%q;b|A%P>bF6>Ef;{XV&Uk@lc59}x&t1`(GpXn+7k$c;|JDU99WKt| z0|mKTjc|o3#cy5I`z97IW>g_~i;@|T1|OGe)~{adXIl1ogSt}XqdRu>t$t5;z4KrA z$U(dg022gtNw3#Yyy9mLD$XKod+%qV;x{p}1p2l1%njrhcc?%Q<`WrNuKQJN+auUl zIg8(G2p`VK_ib+XPoG=BL^W%Y1=dKvqrv_bJrh2p;STl?f@y&e`;>-W$LIIjsB!o^ zNBCT6_e97FK{8PjqZ9iTq{x`z^BTPaqnFITL(xl_@gtwx=!CCrM2-s#8h2APtYVOu z(U>?~_O##Js1I=TDNgriI7|cSOIqw&-DA~m>suTQt{M9=`yxkg*7jWvS5M0Gb<>QZpb(z)^Tv1cQ+*$=`MXSoh8C96ov1Q?kYaO%G^!xNiZwym#m_))Y(lo|CGw~?J0`0mddzGYm^WC-^TMaUP1B!{0noL*U~MjT?H?hv2xXRxnFzCc66_$v zpl-f2p;5SmaG6~qz+xXonM=c}Q$<6VjVg3>1%vBW4s{|vv1NmiSuC)w74lt zT;e9&+fZVuCBq6I;bp1k>Z;%3;fu9O@zWq$m`UqJ-9_(>JA~<`G>Z5bYZG{gZ~Ihq zBEwV6qR9Y|?Hu=u7^nPVOfD6yS6Mi5SG=XK!KAWVY4T-pBc5%i=~EsVk(MmIgyB-8 znN#W_Knm1HW4-O-dZk+|Yk`I;a<1Jhi=Nc{wAfvA8k}Ll5Q|fws6?GnGpFZh3#g_B z5&CrQy4my#BIyw-b-9jmc6~v_Il<;2UxN31L8OafXLf8foJe33f^^}-;>Scho)Tql sZTRk(@tB$6W=SUdv`Bsv$zr*wMO7~qzA%y}%(}wXsNA$K8+Pgc1G0`cE&u=k literal 0 HcmV?d00001 diff --git a/po/sv.po b/po/sv.po new file mode 100644 index 0000000..53d1b07 --- /dev/null +++ b/po/sv.po @@ -0,0 +1,3086 @@ +# Swedish translation of pwdutils. +# Copyright (C) 2006, 2007, 2009, 2010 Thorsten Kukuk +# This file is distributed under the same license as the pwdutils package. +# Daniel Nylander , 2006, 2007, 2009, 2010. +# +msgid "" +msgstr "" +"Project-Id-Version: pwdutils 3.2.10\n" +"Report-Msgid-Bugs-To: kukuk@thkukuk.de\n" +"POT-Creation-Date: 2011-05-10 16:46+0200\n" +"PO-Revision-Date: 2010-08-09 10:41+0100\n" +"Last-Translator: Daniel Nylander \n" +"Language-Team: Swedish \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: lib/authentication.c:46 src/passwd.c:840 +#, c-format +msgid "%s: PAM Failure, aborting: %s\n" +msgstr "%s: PAM-fel, avbryter: %s\n" + +#: lib/authentication.c:100 +#, c-format +msgid "Enter login(%s) password:" +msgstr "Ange inloggningslösenord (%s):" + +#: lib/call_script.c:68 src/vipw.c:89 +#, c-format +msgid "Cannot fork: %s\n" +msgstr "Kan inte grena process: %s\n" + +#: lib/call_script.c:76 +#, c-format +msgid "waitpid (%d) failed: %s\n" +msgstr "waitpid (%d) misslyckades: %s\n" + +#: lib/check_name.c:70 +#, c-format +msgid "Can't compile regular expression: %s\n" +msgstr "Kan inte bygga reguljärt uttryck: %s\n" + +#: lib/chown_dir_rec.c:54 lib/copy_dir_rec.c:147 lib/group.c:389 +#: lib/user.c:495 lib/user.c:759 src/grpck.c:277 src/grpck.c:654 +#: src/pwck.c:284 src/pwck.c:554 src/pwck.c:916 src/pwconv.c:206 +#: src/useradd.c:564 src/useradd.c:1036 src/useradd.c:1111 src/vipw.c:295 +#, c-format +msgid "Cannot change owner/group for `%s': %s\n" +msgstr "Kan inte ändra ägare/grupp för \"%s\": %s\n" + +#: lib/copy_dir_rec.c:77 lib/group.c:369 lib/user.c:475 lib/user.c:739 +#: src/grpck.c:259 src/grpck.c:634 src/pwck.c:266 src/pwck.c:536 +#: src/pwck.c:896 src/pwconv.c:198 src/useradd.c:547 src/usermod.c:543 +#: src/vipw.c:189 +#, c-format +msgid "Can't create `%s': %m\n" +msgstr "Kan inte skapa \"%s\": %m\n" + +#: lib/copy_dir_rec.c:99 +#, c-format +msgid "Cannot create directory `%s': %s\n" +msgstr "Kan inte skapa katalog \"%s\": %s\n" + +#: lib/copy_dir_rec.c:113 lib/copy_dir_rec.c:199 lib/group.c:378 +#: lib/user.c:484 lib/user.c:748 src/grpck.c:267 src/grpck.c:643 +#: src/pwck.c:274 src/pwck.c:544 src/pwck.c:905 src/pwconv.c:215 +#: src/useradd.c:554 src/useradd.c:1046 src/useradd.c:1117 src/vipw.c:287 +#, c-format +msgid "Cannot change permissions for `%s': %s\n" +msgstr "Kan inte ändra rättigheter för \"%s\": %s\n" + +#: lib/copy_dir_rec.c:138 +#, c-format +msgid "Cannot create symlink `%s': %s\n" +msgstr "Kan inte skapa symbolisk länk \"%s\": %s\n" + +#: lib/copy_dir_rec.c:185 src/vipw.c:230 src/vipw.c:238 +#, c-format +msgid "Cannot copy `%s': %s\n" +msgstr "Kan inte kopiera \"%s\": %s\n" + +#: lib/copy_dir_rec.c:215 +#, c-format +msgid "Warning: ignoring `%s', not a regular file\n" +msgstr "" + +#: lib/copy_xattr.c:51 lib/copy_xattr.c:69 +#, c-format +msgid "Cannot get attributes for `%s': %m\n" +msgstr "Kan inte hämta attribut för \"%s\": %m\n" + +#: lib/copy_xattr.c:93 lib/copy_xattr.c:113 +#, c-format +msgid "Cannot get attribute %s of `%s': %m\n" +msgstr "Kan inte hämta attribut %s för \"%s\": %m\n" + +#: lib/copy_xattr.c:127 +#, c-format +msgid "SELinux not enabled, ignore attribute %s for `%s'.\n" +msgstr "SELinux inte aktiverat, ignorerar attribut %s för \"%s\".\n" + +#: lib/copy_xattr.c:133 +#, c-format +msgid "Cannot set attribute %s for `%s': %m\n" +msgstr "Kan inte ställa in attributet %s för \"%s\": %m\n" + +#: lib/copy_xattr.c:154 +#, c-format +msgid "%s: Can't get context for `%s'" +msgstr "%s: Kan inte hämta kontext för \"%s" + +#: lib/copy_xattr.c:161 +#, c-format +msgid "%s: Can't set context for `%s'" +msgstr "%s: Kan inte ställa in kontext för \"%s\"" + +#: lib/get_ldap_password.c:39 src/chpasswd.c:224 src/chsh.c:516 +#: src/passwd.c:881 +#, c-format +msgid "Enter LDAP Password:" +msgstr "Ange LDAP-lösenord:" + +#: lib/group.c:305 src/groupadd.c:506 src/groupdel.c:365 src/grpck.c:820 +#, c-format +msgid "Cannot lock group file: already locked.\n" +msgstr "Kan inte lÃ¥sa gruppfil: redan lÃ¥st.\n" + +#: lib/group.c:334 lib/group.c:409 lib/user.c:440 lib/user.c:514 +#: lib/user.c:704 lib/user.c:778 src/grpck.c:227 src/grpck.c:294 +#: src/grpck.c:599 src/grpck.c:674 src/pwck.c:234 src/pwck.c:301 +#: src/pwck.c:571 src/pwck.c:861 src/pwck.c:936 src/useradd.c:582 +#, c-format +msgid "Can't open `%s': %m\n" +msgstr "Kan inte öppna \"%s\": %m\n" + +#: lib/group.c:340 lib/user.c:446 lib/user.c:710 src/grpck.c:233 +#: src/grpck.c:605 src/grpunconv.c:225 src/pwck.c:240 src/pwck.c:510 +#: src/pwck.c:867 src/pwconv.c:224 src/pwunconv.c:172 src/useradd.c:538 +#: src/vipw.c:249 src/vipw.c:258 src/vipw.c:272 +#, c-format +msgid "Can't stat `%s': %m\n" +msgstr "Kan inte ta status pÃ¥ \"%s\": %m\n" + +#: lib/group.c:435 lib/group.c:478 lib/group.c:492 lib/user.c:540 +#: lib/user.c:591 lib/user.c:605 lib/user.c:803 lib/user.c:873 src/grpck.c:703 +#: src/pwck.c:965 +#, c-format +msgid "Error while writing `%s': %m\n" +msgstr "Fel vid skrivning av \"%s\": %m\n" + +#: lib/group.c:503 +#, c-format +msgid "Group not found (and not deleted): %s\n" +msgstr "Grupp hittades inte (och inte borttagen): %s\n" + +#: lib/group.c:511 lib/group.c:540 lib/user.c:623 lib/user.c:653 +#: lib/user.c:883 lib/user.c:912 src/grpck.c:715 src/grpck.c:723 +#: src/pwck.c:977 src/pwck.c:985 +#, c-format +msgid "Error while closing `%s': %m\n" +msgstr "Fel vid stängning av \"%s\": %m\n" + +#: lib/group.c:520 lib/user.c:632 lib/user.c:893 +#, c-format +msgid "Error while writing to disk `%s': %m\n" +msgstr "Fel vid skrivning till disk \"%s\": %m\n" + +#: lib/group.c:530 lib/user.c:642 lib/user.c:903 +#, c-format +msgid "Error while syncing to disk `%s': %m\n" +msgstr "Fel vid synkronisering till disk \"%s\": %m\n" + +#: lib/group.c:547 lib/user.c:661 lib/user.c:919 src/grpck.c:472 +#: src/grpck.c:730 src/pwck.c:468 src/pwck.c:734 src/pwck.c:992 +#, c-format +msgid "Warning: cannot create backup file `%s': %m\n" +msgstr "Varning: kan inte skapa säkerhetskopia \"%s\": %m\n" + +#: lib/group.c:552 lib/user.c:666 lib/user.c:923 +#, c-format +msgid "Error while renaming `%s': %m\n" +msgstr "Fel vid byte av namn pÃ¥ \"%s\": %m\n" + +#: lib/group.c:693 lib/user.c:1094 +#, c-format +msgid "LDAP information update failed: %s\n" +msgstr "Uppdatering av LDAP-information misslyckades: %s\n" + +#: lib/group.c:702 +#, c-format +msgid "Cannot modify/add NIS group entries.\n" +msgstr "Kan inte ändra/lägga till NIS-grupposter.\n" + +#: lib/group.c:707 lib/user.c:1103 +#, c-format +msgid "Unknown service %d.\n" +msgstr "Okänd tjänst %d.\n" + +#: lib/libldap.c:1364 lib/libldap.c:1429 lib/libldap.c:1484 lib/libldap.c:1610 +#: lib/libldap.c:1752 lib/libldap.c:1992 +#, c-format +msgid "Authentication failure.\n" +msgstr "Autentiseringsfel.\n" + +#: lib/libldap.c:1760 +#, c-format +msgid "Cannot find base ou for new users.\n" +msgstr "Kan inte hitta avdelning för nya användare.\n" + +#: lib/libldap.c:1763 +#, c-format +msgid "Base DN for user account `%s' is \"%s\".\n" +msgstr "Namn för användarkonto \"%s\" är \"%s\".\n" + +#: lib/libldap.c:2000 +#, c-format +msgid "Cannot find base ou for new groups.\n" +msgstr "Kan inte hitta avdelning för nya grupper.\n" + +#: lib/libldap.c:2003 +#, c-format +msgid "Base DN for group `%s' is \"%s\".\n" +msgstr "Namn för grupp \"%s\" är \"%s\".\n" + +#: lib/logging.c:65 +#, c-format +msgid "" +"Cannot open logging plugin:\n" +"%s\n" +msgstr "" +"Kan inte öppna insticksmodul för loggning:\n" +"%s\n" + +#: lib/logging.c:81 lib/logging.c:99 +#, c-format +msgid "" +"Cannot find symbol `%s':\n" +"%s\n" +msgstr "" +"Kan inte hitta symbol \"%s\":\n" +"%s\n" + +#: lib/logging.c:140 +#, c-format +msgid "Error setting up logging subsystem!\n" +msgstr "Fel vid inställning av undersystem för loggning!\n" + +#: lib/parse_crypt_arg.c:87 +#, c-format +msgid "Can't open %s for reading: %s\n" +msgstr "Kan inte öppna %s för läsning: %s\n" + +#: lib/parse_crypt_arg.c:95 +#, c-format +msgid "Unable to obtain entropy from %s\n" +msgstr "Kunde inte hämta entropidata frÃ¥n %s\n" + +#: lib/parse_crypt_arg.c:110 +#, c-format +msgid "Unable to generate a salt, check your crypt settings.\n" +msgstr "Kunde inte generera salt, kontrollera dina inställningar för crypt.\n" + +#: lib/parse_crypt_arg.c:144 +#, c-format +msgid "No support for blowfish compiled in, using MD5.\n" +msgstr "Inget stöd för blowfish inbyggt, använder MD5.\n" + +#: lib/parse_crypt_arg.c:149 +#, c-format +msgid "No support for %s available, using DES.\n" +msgstr "Inget stöd för %s tillgänglig, använder DES.\n" + +#: lib/passwd_nisplus.c:306 +#, c-format +msgid "Could not determine hostname!\n" +msgstr "Kunde inte fastställa värdnamn!\n" + +#: lib/passwd_nisplus.c:322 +#, c-format +msgid "Can't find %s's secret key\n" +msgstr "Kan inte hitta hemlig nyckel för %s\n" + +#: lib/passwd_nisplus.c:338 lib/passwd_nisplus.c:359 +#, c-format +msgid "Could not get public key for %s!\n" +msgstr "Kunde inte hämta publik nyckel för %s!\n" + +#: lib/passwd_nisplus.c:348 +#, c-format +msgid "Could not determine the NIS+ root server!\n" +msgstr "Kunde inte fastställa rotserver för NIS+!\n" + +#: lib/passwd_nisplus.c:366 +#, c-format +msgid "Could not create conversion key!\n" +msgstr "Kunde inte skapa konverteringsnyckel!\n" + +#: lib/passwd_nisplus.c:378 +#, c-format +msgid "DES encryption failure\n" +msgstr "DES-krypteringsfel\n" + +#: lib/passwd_nisplus.c:390 +#, c-format +msgid "rpc.nispasswd not running on %s?\n" +msgstr "rpc.nispasswd körs inte pÃ¥ %s?\n" + +#: lib/passwd_nisplus.c:411 +#, c-format +msgid "ERROR: password incorrect, try again\n" +msgstr "FEL: lösenordet felaktigt, försök igen\n" + +#: lib/passwd_nisplus.c:413 lib/passwd_nisplus.c:481 +#, c-format +msgid "" +"ERROR: %s\n" +" password not changed\n" +msgstr "" +"FEL: %s\n" +" lösenordet inte ändrat\n" + +#: lib/passwd_nisplus.c:429 lib/passwd_nisplus.c:456 +#, c-format +msgid "DES decryption failure!\n" +msgstr "DES-dekrypteringsfel!\n" + +#: lib/passwd_nisplus.c:514 +#, c-format +msgid "ERROR: Unknown error, don't know what happened\n" +msgstr "FEL: Okänt fel, vet inte vad som hände\n" + +#: lib/passwd_nisplus.c:519 +#, c-format +msgid "NIS+ password information changed for %s\n" +msgstr "Lösenordsinformation för NIS+ ändrad för %s\n" + +#: lib/passwd_nisplus.c:521 +#, c-format +msgid "NIS+ credential information changed for %s\n" +msgstr "Behörighetsinformation i NIS+ ändrades för %s\n" + +#: lib/passwd_nisplus.c:590 +#, c-format +msgid "NIS+ passwd table not found: %s\n" +msgstr "Tabell för NIS+-lösenord hittades inte: %s\n" + +#: lib/passwd_nisplus.c:606 +#, c-format +msgid "User not found in NIS+ table.\n" +msgstr "Användaren hittades inte i NIS+-tabell.\n" + +#: lib/print_error.c:30 src/rpasswd.c:120 src/rpasswdd.c:139 +#, c-format +msgid "Try `%s --help' or `%s --usage' for more information.\n" +msgstr "Försök med \"%s --help\" eller \"%s --usage\" för mer information.\n" + +#: lib/print_version.c:31 src/rpasswd.c:73 src/rpasswdd.c:90 +#, c-format +msgid "" +"Copyright (C) %s Thorsten Kukuk.\n" +"This is free software; see the source for copying conditions. There is NO\n" +"warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n" +msgstr "" +"Copyright © %s Thorsten Kukuk.\n" +"Detta är fri programvara; se källkoden för villkor för kopiering. Det finns " +"INGEN\n" +"garanti, inte ens för SÄLJBARHET eller LÄMPLIGHET FÖR NÅGOT SPECIELLT " +"ÄNDAMÅL.\n" + +#: lib/remove_dir_rec.c:74 +#, c-format +msgid "Cannot remove file `%s': %s\n" +msgstr "Kan inte ta bort fil \"%s\": %s\n" + +#: lib/remove_dir_rec.c:83 +#, c-format +msgid "Cannot remove directory `%s': %s\n" +msgstr "Kan inte ta bort katalog \"%s\": %s\n" + +#: lib/selinux_utils.c:80 +#, c-format +msgid "Couldn't get security context `%s': %s\n" +msgstr "Kunde inte hämta säkerhetskontext \"%s\": %s\n" + +#: lib/selinux_utils.c:88 +#, c-format +msgid "Couldn't get default security context: %s\n" +msgstr "Kunde inte hämta standardsäkerhetskontext: %s\n" + +#: lib/selinux_utils.c:97 +#, c-format +msgid "Couldn't set default security context to `%s': %s\n" +msgstr "Kunde inte ställa in standardsäkerhetskontext till \"%s\": %s\n" + +#: lib/selinux_utils.c:117 +#, c-format +msgid "Couldn't reset default security context to `%s': %s\n" +msgstr "Kunde inte Ã¥terställa standardsäkerhetskontext till \"%s\": %s\n" + +#: lib/user.c:81 +#, c-format +msgid "Can't find the NIS master server: %s\n" +msgstr "Kan inte hitta huvudserver för NIS: %s\n" + +#: lib/user.c:88 +#, c-format +msgid "rpc.yppasswdd not running on NIS master %s.\n" +msgstr "rpc.yppasswdd körs inte pÃ¥ huvudservern för NIS %s.\n" + +#: lib/user.c:94 +#, c-format +msgid "rpc.yppasswdd running on illegal port on NIS master %s.\n" +msgstr "rpc.yppasswdd körs pÃ¥ en ogiltig port pÃ¥ huvudservern för NIS %s.\n" + +#: lib/user.c:411 src/groupmod.c:434 src/pwck.c:1082 src/useradd.c:1630 +#: src/userdel.c:569 src/usermod.c:1373 +#, c-format +msgid "Cannot lock password file: already locked.\n" +msgstr "Kan inte lÃ¥sa lösenordsfilen: redan lÃ¥st.\n" + +#: lib/user.c:615 +#, c-format +msgid "User not found (and not deleted): %s\n" +msgstr "Användaren hittades inte (och inte borttagen): %s\n" + +#: lib/user.c:858 +#, c-format +msgid " Error while writing `%s': %m\n" +msgstr " Fel vid skrivning av \"%s\": %m\n" + +#: lib/user.c:982 +#, c-format +msgid "Error while changing the NIS data.\n" +msgstr "Fel vid ändring av NIS-data.\n" + +#: lib/user.c:991 +#, c-format +msgid "Error while changing the NIS+ data.\n" +msgstr "Fel vid ändring av NIS+-data.\n" + +#: src/chage.c:56 +#, c-format +msgid "" +"Usage: %s [-D binddn][-P path][-m mindays][-M maxdays][-d lastday][-I " +"inactive][-E expiredate][-W warndays] user\n" +msgstr "" +"Användning: %s [-D binddn][-P sökväg][-m mindagar][-M maxdagar][-d sistadag]" +"[-I inaktiv][-E utgÃ¥ngsdatum][-W varnadagar] användare\n" + +#: src/chage.c:58 +#, c-format +msgid " %s -l user\n" +msgstr " %s -l användare\n" + +#: src/chage.c:66 +#, c-format +msgid "" +"%s - change user password expiry information\n" +"\n" +msgstr "" +"%s - ändra utgÃ¥ngsinformation för användarlösenord\n" +"\n" + +#: src/chage.c:70 src/chfn.c:112 src/chpasswd.c:70 src/chsh.c:65 +#: src/gpasswd.c:94 src/groupadd.c:64 src/groupdel.c:64 src/groupmod.c:63 +#: src/passwd.c:401 src/useradd.c:67 src/userdel.c:68 src/usermod.c:67 +msgid " -D binddn Use dn \"binddn\" to bind to the LDAP directory\n" +msgstr "" +" -D binddn Använd namn \"binddn\" för att binda till LDAP-katalog\n" + +#: src/chage.c:73 src/chfn.c:115 src/chpasswd.c:73 src/chsh.c:68 +#: src/passwd.c:403 src/pwconv.c:54 src/pwunconv.c:54 +msgid " -P path Search passwd and shadow file in \"path\"\n" +msgstr " -P sökväg Sök lösenord och skuggfil i \"sökväg\"\n" + +#: src/chage.c:76 src/chfn.c:88 src/chfn.c:123 src/chpasswd.c:79 src/chsh.c:74 +#: src/gpasswd.c:93 src/groupmod.c:77 src/passwd.c:400 src/usermod.c:91 +msgid " --service srv Use nameservice 'srv'\n" +msgstr " --service srv Använd namntjänst 'srv'\n" + +#: src/chage.c:77 src/chfn.c:86 src/chfn.c:124 src/chsh.c:75 +msgid " -q, --quiet Don't be verbose\n" +msgstr " -q, --quiet Var inte informativ\n" + +#: src/chage.c:78 src/chfn.c:89 src/chfn.c:125 src/chpasswd.c:80 src/chsh.c:76 +#: src/expiry.c:52 src/groupadd.c:74 src/groupdel.c:70 src/groupmod.c:78 +#: src/grpck.c:68 src/grpconv.c:43 src/grpunconv.c:63 src/newgrp.c:66 +#: src/pwck.c:68 src/pwconv.c:56 src/pwunconv.c:56 src/useradd.c:92 +#: src/userdel.c:74 src/usermod.c:96 src/vipw.c:72 +msgid " --help Give this help list\n" +msgstr " --help Skriv ut denna hjälplista\n" + +#: src/chage.c:79 src/chfn.c:90 src/chfn.c:126 src/chpasswd.c:81 src/chsh.c:77 +#: src/expiry.c:53 src/groupdel.c:71 src/grpck.c:69 src/grpconv.c:44 +#: src/grpunconv.c:64 src/newgrp.c:67 src/pwck.c:69 src/pwconv.c:57 +#: src/pwunconv.c:57 src/userdel.c:75 src/vipw.c:73 +msgid " -u, --usage Give a short usage message\n" +msgstr " -u, --usage Skriv ut ett kort meddelande om användning\n" + +#: src/chage.c:80 src/chfn.c:91 src/chfn.c:127 src/chpasswd.c:82 src/chsh.c:78 +#: src/expiry.c:54 src/groupadd.c:76 src/groupdel.c:72 src/groupmod.c:80 +#: src/grpck.c:70 src/grpconv.c:45 src/grpunconv.c:65 src/newgrp.c:68 +#: src/pwck.c:70 src/pwconv.c:58 src/pwunconv.c:58 src/useradd.c:94 +#: src/userdel.c:76 src/usermod.c:98 src/vipw.c:74 +msgid " -v, --version Print program version\n" +msgstr " -v, --version Skriv ut programversion\n" + +#: src/chage.c:81 src/chfn.c:94 src/chfn.c:130 src/chpasswd.c:83 src/chsh.c:81 +#: src/passwd.c:409 +msgid "Valid services are: files, nis, nisplus, ldap\n" +msgstr "Giltiga tjänster är: files, nis, nisplus, ldap\n" + +#: src/chage.c:109 +#, c-format +msgid "Minimum:\t%ld\n" +msgstr "Minimum:\t%ld\n" + +#: src/chage.c:110 +#, c-format +msgid "Maximum:\t%ld\n" +msgstr "Maximum:\t%ld\n" + +#: src/chage.c:111 +#, c-format +msgid "Warning:\t%ld\n" +msgstr "Varning:\t%ld\n" + +#: src/chage.c:112 +#, c-format +msgid "Inactive:\t%ld\n" +msgstr "Inaktiv:\t%ld\n" + +#: src/chage.c:113 +#, c-format +msgid "Last Change:\t\t" +msgstr "Senast ändrad:\t\t" + +#: src/chage.c:115 +#, c-format +msgid "Unknown, password is forced to change at next login\n" +msgstr "Okänt, lösenordet är tvingad att bytas vid nästa inloggning\n" + +#: src/chage.c:117 src/chage.c:123 src/chage.c:129 src/chage.c:135 +#, c-format +msgid "Never\n" +msgstr "Aldrig\n" + +#: src/chage.c:120 +#, c-format +msgid "Password Expires:\t" +msgstr "Lösenordet gÃ¥r ut:\t" + +#: src/chage.c:126 +#, c-format +msgid "Password Inactive:\t" +msgstr "Lösenord inaktivt:\t" + +#: src/chage.c:133 +#, c-format +msgid "Account Expires:\t" +msgstr "Kontot gÃ¥r ut:\t" + +#: src/chage.c:147 +msgid "Minimum Password Age" +msgstr "Minimum lösenordsÃ¥lder" + +#: src/chage.c:154 src/chage.c:170 src/chage.c:186 +#, c-format +msgid "Input is no integer value\n" +msgstr "Indata är inte ett heltalsvärde\n" + +#: src/chage.c:156 src/chage.c:172 src/chage.c:188 +#, c-format +msgid "Negative numbers are not allowed as input (except -1)\n" +msgstr "Negativa nummer är inte tillÃ¥tna som inmatning (förutom -1)\n" + +#: src/chage.c:163 +msgid "Maximum Password Age" +msgstr "Maximum lösenordsÃ¥lder" + +#: src/chage.c:179 +msgid "Password Expiration Warning" +msgstr "Varning angÃ¥ende utgÃ¥ng av lösenord" + +#: src/chage.c:195 +msgid "Password Inactive" +msgstr "Lösenord inaktivt" + +#: src/chage.c:203 +msgid "Last Password Change (YYYY-MM-DD)" +msgstr "Senaste ändring av lösenord (ÅÅÅÅ-MM-DD)" + +#: src/chage.c:217 src/chage.c:237 +#, c-format +msgid "Invalid date\n" +msgstr "Ogiltigt datum\n" + +#: src/chage.c:223 +msgid "Account Expiration Date (YYYY-MM-DD)" +msgstr "Datum för utgÃ¥ng av konto (ÅÅÅÅ-MM-DD)" + +#: src/chage.c:340 src/chfn.c:478 src/chsh.c:337 +#, c-format +msgid "Only root is allowed to specify another path\n" +msgstr "Endast root tillÃ¥ts att ange en annan sökväg\n" + +#: src/chage.c:370 src/chfn.c:439 src/chpasswd.c:171 src/chsh.c:320 +#: src/gpasswd.c:197 src/groupadd.c:376 src/groupdel.c:224 src/groupmod.c:300 +#: src/passwd.c:523 src/useradd.c:1403 src/userdel.c:454 src/usermod.c:978 +#, c-format +msgid "Service `%s' not supported.\n" +msgstr "Tjänsten \"%s\" stöds inte.\n" + +#: src/chage.c:395 src/chfn.c:510 src/chpasswd.c:208 src/chsh.c:363 +#: src/chsh.c:370 src/expiry.c:247 src/gpasswd.c:230 src/groupadd.c:413 +#: src/groupdel.c:249 src/groupmod.c:333 src/grpck.c:806 src/grpconv.c:100 +#: src/grpunconv.c:197 src/newgrp.c:155 src/passwd.c:589 src/pwck.c:1068 +#: src/pwconv.c:170 src/pwunconv.c:144 src/rpasswd.c:491 src/rpasswdd.c:1339 +#: src/useradd.c:1511 src/userdel.c:479 src/usermod.c:1014 src/vipw.c:410 +#, c-format +msgid "%s: Too many arguments.\n" +msgstr "%s: För mÃ¥nga argument.\n" + +#: src/chage.c:402 +#, c-format +msgid "%s: Do not include \"l\" with other flags\n" +msgstr "%s: Inkludera inte \"l\" med andra flaggor\n" + +#: src/chage.c:427 src/chfn.c:531 src/chsh.c:397 src/expiry.c:267 +#: src/gpasswd.c:265 src/groupadd.c:450 src/groupdel.c:278 src/groupmod.c:362 +#: src/passwd.c:656 src/useradd.c:1545 src/userdel.c:507 src/usermod.c:1048 +#, c-format +msgid "%s: Cannot determine your user name.\n" +msgstr "%s: Kan inte fastställa ditt användarnamn.\n" + +#: src/chage.c:446 src/chfn.c:566 src/chsh.c:431 src/userdel.c:527 +#, c-format +msgid "%s: User `%s' is not known to service `%s'.\n" +msgstr "%s: Användare \"%s\" är inte känd för tjänsten \"%s\".\n" + +#: src/chage.c:449 src/chfn.c:555 src/chfn.c:569 src/chsh.c:421 src/chsh.c:434 +#: src/passwd.c:675 src/passwd.c:696 src/userdel.c:530 +#, c-format +msgid "%s: Unknown user `%s'.\n" +msgstr "%s: Okänd användare \"%s\".\n" + +#: src/chage.c:467 +#, c-format +msgid "Only an administrator is allowed to change aging information.\n" +msgstr "Endast en administratör tillÃ¥ts att ändra Ã¥ldersinformation.\n" + +#: src/chage.c:483 +#, c-format +msgid "This system does not support shadow accounts.\n" +msgstr "Detta system har inte stöd för skuggkonton.\n" + +#: src/chage.c:489 +#, c-format +msgid "This account does not have a shadow entry.\n" +msgstr "Detta konto har ingen skuggpost.\n" + +#: src/chage.c:535 +#, c-format +msgid "You can only list your own aging information.\n" +msgstr "Du kan endast lista din egna Ã¥ldersinformation.\n" + +#: src/chage.c:542 src/expiry.c:306 src/passwd.c:1019 +#, c-format +msgid "%s: Failed to drop privileges: %s\n" +msgstr "%s: Misslyckades att släppa rättigheter: %s\n" + +#: src/chage.c:554 +#, c-format +msgid "No aging information available for %s.\n" +msgstr "Ingen Ã¥ldersinformation tillgänglig för %s.\n" + +#: src/chage.c:574 +#, c-format +msgid "Changing aging information for %s.\n" +msgstr "Ändrar Ã¥ldersinformation för %s.\n" + +#: src/chage.c:580 src/chage.c:667 +#, c-format +msgid "Aging information not changed.\n" +msgstr "Åldersinformation inte ändrad.\n" + +#: src/chage.c:623 +#, c-format +msgid "Lastday is no date and no integer value >= -1\n" +msgstr "Sistadag är inget datum och inte ett heltalsvärde >=-1\n" + +#: src/chage.c:643 +#, c-format +msgid "Expiredate is no date and no integer value >= -1\n" +msgstr "UtgÃ¥ngsdatum är inget datum och inte ett heltalsvärde >=-1\n" + +#: src/chage.c:652 +#, c-format +msgid "Error while parsing options.\n" +msgstr "Fel vid tolkning av flaggor.\n" + +#: src/chage.c:698 +#, c-format +msgid "Error while converting to shadow account.\n" +msgstr "Fel vid konvertering till skuggkonto.\n" + +#: src/chage.c:716 +#, c-format +msgid "Error while changing aging information.\n" +msgstr "Fel vid ändring av Ã¥ldersinformation.\n" + +#: src/chage.c:726 +#, c-format +msgid "Aging information changed.\n" +msgstr "Åldersinformation ändrad.\n" + +#: src/chfn.c:71 +#, c-format +msgid "" +"Usage: %s [-f name] [-r room] [-w work_phone]\n" +" [-h home_phone] [-o other] [-q] [-u] [-v] [user]\n" +msgstr "" +"Användning: %s [-f namn] [-r rum] [-w telefon_arbete]\n" +" [-h telefon_hem] [-o övrigt] [-q] [-u] [-v] [användare]\n" + +#: src/chfn.c:79 src/chfn.c:109 +#, c-format +msgid "" +"%s - change user name and information\n" +"\n" +msgstr "" +"%s - ändra användarnamn och information\n" +"\n" + +#: src/chfn.c:81 src/chfn.c:117 +msgid " -f full-name Change your real name\n" +msgstr " -f hela-namn Ändra ditt riktiga namn\n" + +#: src/chfn.c:82 +msgid " -r room Change your office room number\n" +msgstr " -r rum Ändra ditt rumsnummer\n" + +#: src/chfn.c:83 +msgid " -w work_phone Change your office phone number\n" +msgstr " -w telefon_arbete Ändra ditt telefonnummer till din arbetstelefon\n" + +#: src/chfn.c:84 +msgid " -h home_phone Change your home phone number\n" +msgstr " -h telefon_hem Ändra ditt telefonnummer till din hemtelefon\n" + +#: src/chfn.c:85 +msgid " -o other Change the undefined portions of the GECOS field\n" +msgstr " -o övrigt Ändra odefinierade delar av GECOS-fältet\n" + +#: src/chfn.c:101 +#, c-format +msgid "" +"Usage: %s [-D binddn] [-P path] [-f name] [-o office] [-p office-phone]\n" +" [-h home-phone][-m other] [-q] [-u] [-v] [user]\n" +msgstr "" +"Användning: %s [-D binddn] [-P sökväg] [-f namn] [-o arbete] [-p " +"telefon_arbete]\n" +" [-h telefon_hem][-m övrigt] [-q] [-u] [-v] [användare]\n" + +#: src/chfn.c:118 +msgid " -o office Change your office room number\n" +msgstr " -o arbete Ändra nummer pÃ¥ ditt kontorsrum\n" + +#: src/chfn.c:119 +msgid " -p phone Change your office phone number\n" +msgstr " -p telefon Ändra ditt arbetstelefonnummer\n" + +#: src/chfn.c:120 +msgid " -h home-phone Change your home phone number\n" +msgstr " -h telefon_hem Ändra ditt hemtelefonnummer\n" + +#: src/chfn.c:121 +msgid " -m other Change the undefined portions of the GECOS field\n" +msgstr " -m övrigt Ändra odefinierade delar av GECOS-fältet\n" + +#: src/chfn.c:165 +#, c-format +msgid "Enter the new value, or press ENTER for the default\n" +msgstr "Ange nytt värde eller tryck ENTER för standardvärde\n" + +#: src/chfn.c:171 +msgid "Full Name" +msgstr "Fullt namn" + +#: src/chfn.c:173 +#, c-format +msgid "\tFull Name: %s\n" +msgstr "\tFullt namn: %s\n" + +#: src/chfn.c:176 +msgid "Room Number" +msgstr "Rumsnummer" + +#: src/chfn.c:178 +#, c-format +msgid "\tRoom Number: %s\n" +msgstr "\tRumsnummer: %s\n" + +#: src/chfn.c:181 +msgid "Work Phone" +msgstr "Telefon arbete" + +#: src/chfn.c:183 +#, c-format +msgid "\tWork Phone: %s\n" +msgstr "\tTelefon arbete: %s\n" + +#: src/chfn.c:186 +msgid "Home Phone" +msgstr "Telefon hem" + +#: src/chfn.c:188 +#, c-format +msgid "\tHome Phone: %s\n" +msgstr "\tTelefon hem: %s\n" + +#: src/chfn.c:191 +msgid "Other" +msgstr "Övrigt" + +#: src/chfn.c:193 +#, c-format +msgid "\tOther: %s\n" +msgstr "\tÖvrigt: %s\n" + +#: src/chfn.c:255 +#, c-format +msgid "%s: The characters '%s\"' are not allowed.\n" +msgstr "%s: Tecknen \"%s\"\" tillÃ¥ts inte.\n" + +#: src/chfn.c:261 src/chsh.c:204 +#, c-format +msgid "%s: Control characters are not allowed.\n" +msgstr "%s: Kontrolltecken tillÃ¥ts inte.\n" + +#: src/chfn.c:331 src/chsh.c:257 +#, c-format +msgid "%s: Don't know what I should do.\n" +msgstr "%s: Vet inte vad jag ska göra.\n" + +#: src/chfn.c:377 src/chfn.c:395 src/chfn.c:407 src/chfn.c:451 src/chfn.c:460 +#: src/gpasswd.c:296 src/passwd.c:614 src/passwd.c:628 +#, c-format +msgid "%s: Permission denied.\n" +msgstr "%s: TillgÃ¥ng nekad.\n" + +#: src/chfn.c:586 src/chsh.c:451 src/passwd.c:712 +msgid "Unknown user context" +msgstr "Okänd användarkontext" + +#: src/chfn.c:588 +#, c-format +msgid "%s: %s is not authorized to change the finger information for %s.\n" +msgstr "%s: %s är inte auktoriserad att ändra fingerinformation för %s.\n" + +#: src/chfn.c:601 +#, c-format +msgid "SELinux is in permissive mode, continuing.\n" +msgstr "SELinux är i tolerant läge, fortsätter.\n" + +#: src/chfn.c:619 +#, c-format +msgid "You cannot change the finger information for `%s'.\n" +msgstr "Du kan inte ändra fingerinformation för \"%s\".\n" + +#: src/chfn.c:626 +#, c-format +msgid "Changing finger information for %s.\n" +msgstr "Ändrar fingerinformation för %s.\n" + +#: src/chfn.c:658 +#, c-format +msgid "%s: Invalid name: `%s'\n" +msgstr "%s: Ogiltigt namn: \"%s\"\n" + +#: src/chfn.c:666 +#, c-format +msgid "%s: Invalid room number: `%s'\n" +msgstr "%s: Ogiltigt rumsnummer: \"%s\"\n" + +#: src/chfn.c:674 +#, c-format +msgid "%s: Invalid work phone: `%s'\n" +msgstr "%s: Ogiltig arbetstelefon: \"%s\"\n" + +#: src/chfn.c:682 +#, c-format +msgid "%s: Invalid home phone: `%s'\n" +msgstr "%s: Ogiltig hemtelefon: \"%s\"\n" + +#: src/chfn.c:690 +#, c-format +msgid "%s: `%s' contains illegal characters.\n" +msgstr "%s: \"%s\" innehÃ¥ller ogiltiga tecken.\n" + +#: src/chfn.c:716 +#, c-format +msgid "Finger information not changed.\n" +msgstr "Fingerinformation ändrades inte.\n" + +#: src/chfn.c:724 +#, c-format +msgid "Error while changing finger information.\n" +msgstr "Fel vid ändring av fingerinformation.\n" + +#: src/chfn.c:734 +#, c-format +msgid "Finger information changed.\n" +msgstr "Fingerinformation ändrad.\n" + +#: src/chpasswd.c:59 +#, c-format +msgid "Usage: %s [-D binddn] [-P path] [-e] [-c des|md5|blowfish] [file]\n" +msgstr "" +"Användning: %s [-D binddn] [-P sökväg] [-e] [-c des|md5|blowfish] [fil]\n" + +# batch = sats ? +#: src/chpasswd.c:67 +#, c-format +msgid "" +"%s - update password entries in batch\n" +"\n" +msgstr "" +"%s - uppdatera lösenordsposter i en batch\n" +"\n" + +#: src/chpasswd.c:75 +msgid "" +" -c, --crypt Password should be encrypted with DES, MD5 or blowfish\n" +msgstr "" +" -c, --crypt Lösenord skall vara krypterade med DES, MD5 eller blowfish\n" + +#: src/chpasswd.c:77 +msgid " -e, --encrypted The passwords are in encrypted form\n" +msgstr " -e, --encrypted Lösenorden är i krypterad form\n" + +#: src/chpasswd.c:278 +#, c-format +msgid "%s: line %ld: missing new password\n" +msgstr "%s: rad %ld: saknar nytt lösenord\n" + +#: src/chpasswd.c:287 +#, c-format +msgid "%s: line %ld: unknown user %s\n" +msgstr "%s: rad %ld: okänd användare %s\n" + +#: src/chpasswd.c:318 src/gpasswd.c:425 +#, c-format +msgid "Cannot create salt for standard crypt" +msgstr "Kan inte skapa salt för standard kryptering" + +#: src/chpasswd.c:334 src/gpasswd.c:460 +#, c-format +msgid "Cannot create salt for MD5 crypt" +msgstr "Kan inte skapa salt för MD5-kryptering" + +#: src/chpasswd.c:350 src/gpasswd.c:441 +#, c-format +msgid "Cannot create salt for blowfish crypt" +msgstr "Kan inte skapa salt för blowfish-kryptering" + +#: src/chpasswd.c:380 +#, c-format +msgid "%s: line %ld: cannot update password entry\n" +msgstr "%s: rad %ld: kan inte uppdatera lösenordspost\n" + +#: src/chpasswd.c:395 +#, c-format +msgid "%s: errors occurred, %ld passwords not updated\n" +msgstr "%s: fel inträffade, %ld lösenord inte uppdaterade\n" + +#: src/chsh.c:54 +#, c-format +msgid "" +"Usage: %s [-D binddn] [-P path] [-s shell] [-l] [-q]\n" +" [--help] [--usage] [--version] [user]\n" +msgstr "" +"Användning: %s [-D binddn] [-P sökväg] [-s skal] [-l] [-q]\n" +" [--help] [--usage] [--version] [användare]\n" + +#: src/chsh.c:62 +#, c-format +msgid "" +"%s - change login shell\n" +"\n" +msgstr "" +"%s - ändra inloggningsskal\n" +"\n" + +#: src/chsh.c:70 +msgid " -l List allowed shells from /etc/shells\n" +msgstr " -l Lista tillÃ¥tna skal frÃ¥n /etc/shells\n" + +#: src/chsh.c:72 +msgid " -s shell Use 'shell' as new login shell\n" +msgstr " -s skal Använd 'skall' som nytt inloggningsskal\n" + +#: src/chsh.c:109 +#, c-format +msgid "No known shells.\n" +msgstr "Inga kända skal.\n" + +#: src/chsh.c:177 +#, c-format +msgid "%s: Shell must be a full path name.\n" +msgstr "%s: Skal mÃ¥ste vara anges med full sökväg.\n" + +#: src/chsh.c:183 +#, c-format +msgid "%s: `%s' does not exist.\n" +msgstr "%s: \"%s\" finns inte.\n" + +#: src/chsh.c:189 +#, c-format +msgid "%s: `%s' is not executable.\n" +msgstr "%s: \"%s\" är inte startbar.\n" + +#: src/chsh.c:199 +#, c-format +msgid "%s: '%c' is not allowed.\n" +msgstr "%s: \"%c\" tillÃ¥ts inte.\n" + +#: src/chsh.c:212 +#, c-format +msgid "Warning: \"%s\" is not listed in /etc/shells.\n" +msgstr "Varning: \"%s\" är inte listad i /etc/shells.\n" + +#: src/chsh.c:215 +#, c-format +msgid "%s: \"%s\" is not listed in /etc/shells.\n" +msgstr "%s: \"%s\" är inte listad i /etc/shells.\n" + +#: src/chsh.c:217 +#, c-format +msgid "%s: Use -l option to see list.\n" +msgstr "%s: Använd flaggan -l för att se listan.\n" + +#: src/chsh.c:453 +#, c-format +msgid "%s: %s is not authorized to change the shell of `%s'.\n" +msgstr "%s: %s är inte auktoriserad att ändra skalet för \"%s\".\n" + +#: src/chsh.c:466 src/passwd.c:728 +#, c-format +msgid "SELinux is in permissive mode, continuing\n" +msgstr "SELinux är i tolerant läge, fortsätter\n" + +#: src/chsh.c:484 +#, c-format +msgid "You cannot change the shell for %s.\n" +msgstr "Du kan inte ändra skalet för %s.\n" + +# restricted = skyddat ? +#: src/chsh.c:495 +#, c-format +msgid "You cannot change a restricted shell.\n" +msgstr "Du kan inte ändra ett begränsat skal.\n" + +#: src/chsh.c:501 +#, c-format +msgid "Changing login shell for %s.\n" +msgstr "Ändrar inloggningsskal för %s.\n" + +#: src/chsh.c:545 +#, c-format +msgid "Enter the new value, or press return for the default.\n" +msgstr "Ange det nya värdet eller tryck Return för standardvärde.\n" + +#: src/chsh.c:546 +msgid "Login Shell" +msgstr "Inloggningsskal" + +#: src/chsh.c:554 +#, c-format +msgid "Shell not changed.\n" +msgstr "Skal inte ändrad.\n" + +#: src/chsh.c:568 +#, c-format +msgid "Error while changing login shell.\n" +msgstr "Fel vid ändring av inloggningsskal.\n" + +#: src/chsh.c:578 +#, c-format +msgid "Shell changed.\n" +msgstr "Skal ändrat.\n" + +#: src/expiry.c:40 +#, c-format +msgid "Usage: %s [-f]\n" +msgstr "Användning: %s [-f]\n" + +#: src/expiry.c:48 +#, c-format +msgid "" +"%s - check password expiration and enforce password change\n" +"\n" +msgstr "" +"%s - kontrollera utgÃ¥ng för lösenord och framtvinga ändring av lösenord\n" +"\n" + +#: src/expiry.c:50 +msgid " -f, --force The caller is forced to change the password\n" +msgstr " -f, --force Tvingar användaren att ändra lösenordet\n" + +#: src/expiry.c:100 +#, c-format +msgid "Age field for %s is wrong" +msgstr "Åldersfält för %s är felaktigt" + +#: src/expiry.c:121 +#, c-format +msgid "Your password has expired. Choose a new password." +msgstr "Ditt lösenord är för gammalt. Välj ett nytt lösenord." + +#: src/expiry.c:139 +#, c-format +msgid "Your login has expired. Contact the system administrator.\n" +msgstr "Ditt konto har gÃ¥tt ut. Kontakta systemadministratören.\n" + +#: src/expiry.c:147 +#, c-format +msgid "Password changing requested. Choose a new password.\n" +msgstr "Ändring av lösenord begärd. Välj ett nytt lösenord.\n" + +#: src/expiry.c:157 +#, c-format +msgid "Your password is inactive. Contact the system administrator.\n" +msgstr "Ditt lösenord är inaktivt. Kontakta systemadministratören.\n" + +#: src/expiry.c:162 +#, c-format +msgid "Your password has expired. Choose a new password.\n" +msgstr "Ditt lösenord har gÃ¥tt ut. Välj ett nytt lösenord.\n" + +#: src/expiry.c:171 +#, c-format +msgid "Your password will expire in %ld days.\n" +msgstr "Ditt lösenord kommer att gÃ¥ ut om %ld dagar.\n" + +#: src/expiry.c:174 +#, c-format +msgid "Your password will expire tomorrow.\n" +msgstr "Ditt lösenord kommer att gÃ¥ ut imorgon.\n" + +#: src/expiry.c:176 +#, c-format +msgid "Your password will expire within 24 hours.\n" +msgstr "Ditt lösenord kommer att gÃ¥ ut inom 24 timmar.\n" + +#: src/gpasswd.c:63 src/passwd.c:796 +#, c-format +msgid "%s: error reading from stdin!\n" +msgstr "%s: fel vid läsning frÃ¥n standard in!\n" + +#: src/gpasswd.c:80 +#, c-format +msgid "Usage: %s [-r|-l|-u] group\n" +msgstr "Användning: %s [-r|-l|-u] grupp\n" + +#: src/gpasswd.c:87 +#, c-format +msgid "" +"%s - change group password\n" +"\n" +msgstr "" +"%s - ändra grupplösenord\n" +"\n" + +#: src/gpasswd.c:88 +msgid " -r Remove the password for this group\n" +msgstr " -r Ta bort lösenordet för denna grupp\n" + +#: src/gpasswd.c:89 +msgid " -l Locks the password entry for \"group\"\n" +msgstr " -l LÃ¥ser lösenordsposten för \"grupp\"\n" + +#: src/gpasswd.c:91 +msgid " -u Try to unlock the password entry for \"group\"\n" +msgstr " -u Försök att lÃ¥sa upp lösenordsposten för \"grupp\"\n" + +#: src/gpasswd.c:96 +msgid " -P path Search group file in \"path\"\n" +msgstr " -P sökväg Sök gruppfil i \"sökväg\"\n" + +#: src/gpasswd.c:98 src/passwd.c:406 src/rpasswd.c:111 src/rpasswdd.c:130 +msgid " --help Give this help list\n" +msgstr " --help Skriv ut denna hjälplista\n" + +#: src/gpasswd.c:99 src/passwd.c:407 src/rpasswd.c:112 src/rpasswdd.c:131 +msgid " --usage Give a short usage message\n" +msgstr " --usage Skriv ut ett kort meddelande om användning\n" + +#: src/gpasswd.c:100 src/passwd.c:408 src/rpasswd.c:113 src/rpasswdd.c:132 +msgid " --version Print program version\n" +msgstr " --version Skriv ut programversion\n" + +#: src/gpasswd.c:101 +msgid " --stdin Receive input from stdin instead of /dev/tty\n" +msgstr "" +" --stdin Ta emot indata frÃ¥n standard in istället för /dev/tty\n" + +#: src/gpasswd.c:102 +msgid "Valid services for -r are: files, nis, nisplus, ldap\n" +msgstr "Giltiga tjänster för -r är: files, nis, nisplus, ldap\n" + +#: src/gpasswd.c:238 +#, c-format +msgid "%s: Group argument missing.\n" +msgstr "%s: Gruppargument saknas.\n" + +#: src/gpasswd.c:277 +#, c-format +msgid "%s: Group `%s' is not known to service `%s'.\n" +msgstr "%s: Grupp \"%s\" är inte känd för tjänst \"%s\".\n" + +#: src/gpasswd.c:280 src/groupdel.c:300 src/groupmod.c:384 src/useradd.c:220 +#: src/usermod.c:185 +#, c-format +msgid "%s: Unknown group `%s'.\n" +msgstr "%s: Okänd grupp \"%s\".\n" + +#: src/gpasswd.c:314 src/passwd.c:909 src/usermod.c:1125 +#, c-format +msgid "Cannot unlock the password for `%s'!\n" +msgstr "Kan inte lÃ¥sa upp lösenordet för \"%s\"!\n" + +#: src/gpasswd.c:336 src/passwd.c:936 src/usermod.c:1104 +#, c-format +msgid "Password for `%s' is already locked!\n" +msgstr "Lösenord för \"%s\" är redan lÃ¥st!\n" + +#: src/gpasswd.c:348 +#, c-format +msgid "Changing the password for group %s.\n" +msgstr "Ändrar lösenordet för grupp %s.\n" + +#: src/gpasswd.c:355 src/gpasswd.c:357 +msgid "New Password: " +msgstr "Nytt lösenord: " + +#: src/gpasswd.c:366 +#, c-format +msgid "Password change aborted.\n" +msgstr "Ändring av lösenord avbröts.\n" + +#: src/gpasswd.c:379 src/gpasswd.c:381 +msgid "Re-enter new password: " +msgstr "Bekräfta nytt lösenord: " + +#: src/gpasswd.c:392 +#, c-format +msgid "Sorry, passwords do not match.\n" +msgstr "Tyvärr, lösenorden stämmer inte överens.\n" + +#: src/gpasswd.c:400 +#, c-format +msgid "%s: Try again later.\n" +msgstr "%s: Försök igen senare.\n" + +#: src/gpasswd.c:448 +#, c-format +msgid "No support for blowfish compiled in. Using MD5\n" +msgstr "Inget inbyggt stöd för blowfish. Använder MD5\n" + +#: src/gpasswd.c:475 +#, c-format +msgid "%s: Error changing password.\n" +msgstr "%s: Fel vid ändring av lösenord.\n" + +#: src/gpasswd.c:484 +#, c-format +msgid "Password removed.\n" +msgstr "Lösenord borttaget.\n" + +#: src/gpasswd.c:490 src/passwd.c:978 +#, c-format +msgid "Password changed.\n" +msgstr "Lösenord ändrat.\n" + +#: src/groupadd.c:54 +#, c-format +msgid "" +"Usage: %s [-D binddn] [-g gid [-o]] [-r] [-P path] [-p password] group\n" +msgstr "" +"Användning: %s [-D binddn] [-g gid [-o]] [-r] [-P sökväg] [-p lösenord] " +"grupp\n" + +#: src/groupadd.c:62 +#, c-format +msgid "" +"%s - create a new group\n" +"\n" +msgstr "" +"%s - skapa en ny grupp\n" +"\n" + +#: src/groupadd.c:65 +msgid " -g gid Force the new groupid to be the given number\n" +msgstr " -g gid Tvinga nytt grupp-id att vara det angivna numret\n" + +#: src/groupadd.c:67 src/groupmod.c:70 src/useradd.c:80 src/usermod.c:79 +msgid " -o Allow duplicate (non-unique) UID\n" +msgstr " -o TillÃ¥t dubbletta (icke-unika) UID\n" + +#: src/groupadd.c:68 src/groupdel.c:67 src/groupmod.c:71 src/grpck.c:61 +#: src/pwck.c:61 src/useradd.c:81 src/userdel.c:71 src/usermod.c:84 +msgid " -P path Search passwd, shadow and group file in \"path\"\n" +msgstr " -P sökväg Sök filerna passwd, shadow och group i \"sökväg\"\n" + +#: src/groupadd.c:70 src/groupmod.c:73 src/useradd.c:83 src/usermod.c:86 +msgid " -p password Encrypted password as returned by crypt(3)\n" +msgstr " -p lösenord Krypterat lösenord som returnerat av crypt(3)\n" + +#: src/groupadd.c:72 src/useradd.c:89 +msgid " -r, --system Create a system account\n" +msgstr " -r, --system Skapa ett nytt systemkonto\n" + +#: src/groupadd.c:73 src/groupdel.c:69 src/useradd.c:91 src/userdel.c:73 +msgid " --service srv Add account to nameservice 'srv'\n" +msgstr " --service srv Lägg till konto till namntjänst \"srv\"\n" + +#: src/groupadd.c:75 src/groupmod.c:79 src/useradd.c:93 src/usermod.c:97 +msgid " --usage Give a short usage message\n" +msgstr " --usage Skriv ut ett kort meddelande om användning\n" + +#: src/groupadd.c:77 src/groupdel.c:73 src/useradd.c:95 src/userdel.c:77 +msgid "Valid services for --service are: files, ldap\n" +msgstr "Giltiga tjänster för --service är: files, ldap\n" + +#: src/groupadd.c:257 +#, c-format +msgid "%s: Can't get unique gid in range %u - %u.\n" +msgstr "%s: Kan inte hämta unikt gid i intervallet %u - %u.\n" + +#: src/groupadd.c:312 +#, c-format +msgid "%s: You are using an undocumented option (-f)!\n" +msgstr "%s: Du använder en odokumenterad flagga (-f)!\n" + +#: src/groupadd.c:320 src/groupadd.c:330 +#, c-format +msgid "%s: Invalid numeric argument `%s' for Group ID.\n" +msgstr "%s: Ogiltigt numeriskt argument \"%s\" för grupp-id.\n" + +#: src/groupadd.c:352 src/useradd.c:1328 src/usermod.c:925 +#, c-format +msgid "%s: Invalid characters in password `%s'.\n" +msgstr "%s: Ogiltiga tecken i lösenord \"%s\".\n" + +#: src/groupadd.c:398 +#, c-format +msgid "%s: You cannot use --gid and --preferred-gid at the same time.\n" +msgstr "%s: Du kan inte använda --gid och --preferred-gid samtidigt.\n" + +#: src/groupadd.c:419 src/groupdel.c:255 src/groupmod.c:339 src/useradd.c:1517 +#: src/userdel.c:485 src/usermod.c:1020 +#, c-format +msgid "%s: Too few arguments.\n" +msgstr "%s: För fÃ¥ argument.\n" + +#: src/groupadd.c:425 +#, c-format +msgid "%s: You cannot use -f with -o.\n" +msgstr "%s: Du kan inte använda -f med -o.\n" + +#: src/groupadd.c:474 +#, c-format +msgid "%s: GID %u is not unique, using another one.\n" +msgstr "%s: GID %u är inte unikt, använder ett annat.\n" + +#: src/groupadd.c:484 src/groupmod.c:398 +#, c-format +msgid "%s: GID %u is not unique.\n" +msgstr "%s: GID %u är inte unikt.\n" + +#: src/groupadd.c:495 src/groupmod.c:411 +#, c-format +msgid "%s: Invalid group name `%s'.\n" +msgstr "%s: Ogiltigt gruppnamn \"%s\".\n" + +#: src/groupadd.c:513 src/groupmod.c:421 +#, c-format +msgid "%s: Group `%s' already exists.\n" +msgstr "%s: Gruppen \"%s\" finns redan.\n" + +#: src/groupadd.c:555 +#, c-format +msgid "%s: Cannot add group to LDAP database without DN.\n" +msgstr "%s: Kan inte lägga till grupp till LDAP-databas utan DN.\n" + +#: src/groupadd.c:572 +#, c-format +msgid "%s: Group not added to LDAP database.\n" +msgstr "%s: Gruppen lades inte till i LDAP-databas.\n" + +#: src/groupadd.c:604 +#, c-format +msgid "%s: GROUPADD_CMD fails with exit code %d.\n" +msgstr "%s: GROUPADD_CMD misslyckades med felkod %d.\n" + +#: src/groupdel.c:54 +#, c-format +msgid "Usage: %s [-D binddn] [-P path] group\n" +msgstr "Användning: %s [-D binddn] [-P sökväg] grupp\n" + +#: src/groupdel.c:61 +#, c-format +msgid "" +"%s - delete a group\n" +"\n" +msgstr "" +"%s - ta bort en grupp\n" +"\n" + +#: src/groupdel.c:130 src/groupdel.c:147 +#, c-format +msgid "%s: GID `%u' is primary group of `%s'.\n" +msgstr "%s: GID \"%u\" är primär grupp för \"%s\".\n" + +#: src/groupdel.c:297 src/groupmod.c:381 src/useradd.c:214 src/usermod.c:179 +#, c-format +msgid "%s: Group `%s' not found in service `%s'.\n" +msgstr "%s: Grupp \"%s\" hittades inte i tjänst \"%s\".\n" + +#: src/groupdel.c:310 +#, c-format +msgid "%s: Cannot remove user's primary group.\n" +msgstr "%s: Kan inte ta bort användarens primära grupp.\n" + +#: src/groupdel.c:325 +#, c-format +msgid "%s: Cannot delete group from LDAP database without DN.\n" +msgstr "%s: Kan inte ta bort grupp frÃ¥n LDAP-databas utan DN.\n" + +#: src/groupdel.c:342 +#, c-format +msgid "%s: Group not deleted from LDAP database.\n" +msgstr "%s: Grupp togs inte bort frÃ¥n LDAP-databas.\n" + +#: src/groupdel.c:355 +#, c-format +msgid "%s: GROUPDEL_PRECMD fails with exit code %d.\n" +msgstr "%s: GROUPDEL_PRECMD misslyckades med felkod %d.\n" + +#: src/groupdel.c:373 +#, c-format +msgid "%s: Error deleting group `%s'.\n" +msgstr "%s: Fel vid borttagning av grupp \"%s\".\n" + +#: src/groupdel.c:397 +#, c-format +msgid "%s: GROUPDEL_POSTCMD fails with exit code %d.\n" +msgstr "%s: GROUPDEL_POSTCMD misslyckades med felkod %d.\n" + +#: src/groupmod.c:54 +#, c-format +msgid "Usage: %s [-g gid [-o]] [-n new_name] group\n" +msgstr "Användning: %s [-g gid [-o]] [-n nytt_namn] grupp\n" + +#: src/groupmod.c:61 +#, c-format +msgid "" +"%s - modify a group entry\n" +"\n" +msgstr "" +"%s - ändra en gruppost\n" +"\n" + +#: src/groupmod.c:65 +msgid " -g gid Change the groupid to the given number\n" +msgstr " -g gid Ändra grupp-id till att vara angivet nummer\n" + +#: src/groupmod.c:67 src/useradd.c:76 +msgid " -k skeldir Specify an alternative skel directory\n" +msgstr " -k skelkat Ange en alternativ skelettkatalog\n" + +#: src/groupmod.c:69 +msgid " -n name Change group name.\n" +msgstr " -n namn Ändra gruppnamn.\n" + +#: src/groupmod.c:75 +msgid " -A user Add the user to the group entry\n" +msgstr " -A användare Lägg till användaren till grupposten\n" + +#: src/groupmod.c:76 +msgid " -R user Remove the user from the group entry\n" +msgstr " -R användare Ta bort användren frÃ¥n grupposten\n" + +#: src/groupmod.c:81 src/usermod.c:99 +msgid "Valid services are: files, ldap\n" +msgstr "Giltiga tjänster är: files, ldap\n" + +#: src/groupmod.c:245 +#, c-format +msgid "%s: invalid numeric argument `%s' for Group ID.\n" +msgstr "%s: ogiltigt numeriskt argument \"%s\" för grupp-id.\n" + +#: src/groupmod.c:271 +#, c-format +msgid "%s: invalid characters in password `%s'.\n" +msgstr "%s: ogiltiga tecken i lösenord \"%s\".\n" + +#: src/groupmod.c:467 +#, c-format +msgid "%s: Cannot modify group in LDAP database without DN.\n" +msgstr "%s: Kan inte ändra grupp i LDAP-databas utan DN.\n" + +#: src/groupmod.c:485 +#, c-format +msgid "%s: Group not modified in LDAP database.\n" +msgstr "%s: Grupp inte ändrad i LDAP-databas.\n" + +#: src/grpck.c:51 +#, c-format +msgid "Usage: %s [-P path] [-q|-r]\n" +msgstr "Användning: %s [-P sökväg] [-q|-r]\n" + +#: src/grpck.c:59 +#, c-format +msgid "" +"%s - check integrity of group file\n" +"\n" +msgstr "" +"%s - kontrollera gruppfilens integritet\n" +"\n" + +#: src/grpck.c:63 src/pwck.c:63 +msgid " -q, --quiet Don't print warnings, only errors\n" +msgstr " -q, --quiet Skriv inte ut varningar, endast fel\n" + +#: src/grpck.c:64 src/pwck.c:64 +msgid " -r, --read-only Run in read-only mode, don't make changes\n" +msgstr " -r, --read-only Kör i skrivskyddat läge, gör inga ändringar\n" + +#: src/grpck.c:66 +msgid " -s, --sort Sort the group file, no checks are done\n" +msgstr " -s, --sort Sortera gruppfilen, inte kontroller görs\n" + +#: src/grpck.c:78 src/pwck.c:78 +#, c-format +msgid "No\n" +msgstr "Nej\n" + +#: src/grpck.c:222 src/pwck.c:229 +#, c-format +msgid "Checking `%s'\n" +msgstr "Kontrollerar \"%s\"\n" + +#: src/grpck.c:337 src/grpck.c:384 +#, c-format +msgid "Invalid group entry.\n" +msgstr "Ogiltig gruppost.\n" + +#: src/grpck.c:338 src/pwck.c:346 src/pwck.c:616 +#, c-format +msgid "Delete empty line? " +msgstr "Ta bort tom rad? " + +#: src/grpck.c:356 +#, c-format +msgid "Invalid group entry with comment.\n" +msgstr "Ogiltig grupppost med kommentar.\n" + +#: src/grpck.c:357 src/grpck.c:385 src/grpck.c:402 src/grpck.c:418 +#: src/pwck.c:365 src/pwck.c:381 src/pwck.c:397 src/pwck.c:413 src/pwck.c:635 +#: src/pwck.c:650 src/pwck.c:666 src/pwck.c:682 src/pwck.c:700 +#, c-format +msgid "Delete line `%s'? " +msgstr "Ta bort rad \"%s\"? " + +#: src/grpck.c:401 +#, c-format +msgid "Invalid group name `%s'.\n" +msgstr "Ogiltigt gruppnamn \"%s\".\n" + +#: src/grpck.c:417 +#, c-format +msgid "Duplicate group entry\n" +msgstr "Dubblerad gruppost\n" + +#: src/grpck.c:445 +#, c-format +msgid "Group `%s': unknown user `%s'\n" +msgstr "Grupp \"%s\": okänd användare \"%s\"\n" + +#: src/grpck.c:451 +#, c-format +msgid "Group `%s': Duplicate user entry `%s', already primary group.\n" +msgstr "Grupp \"%s\": Dubblettpost för användare \"%s\", redan primär grupp.\n" + +#: src/grpck.c:812 src/pwck.c:1074 +#, c-format +msgid "%s: -s and -r are incompatibile.\n" +msgstr "%s: -s och -r är inte kompatibla.\n" + +#: src/grpconv.c:33 src/grpunconv.c:51 src/pwconv.c:44 src/pwunconv.c:44 +#, c-format +msgid "Usage: %s\n" +msgstr "Användning: %s\n" + +#: src/grpconv.c:40 +#, c-format +msgid "" +"%s - convert to shadow group\n" +"\n" +msgstr "" +"%s - konvertera till skuggrupp\n" +"\n" + +#: src/grpconv.c:105 +#, c-format +msgid "%s: /etc/gshadow is not supported by this system.\n" +msgstr "%s: /etc/gshadow stöds inte av detta system.\n" + +#: src/grpunconv.c:58 +#, c-format +msgid "" +"%s - convert from shadow groups\n" +"\n" +msgstr "" +"%s - konvertera frÃ¥n skuggrupper\n" +"\n" + +#: src/grpunconv.c:61 +msgid " -P path Search group and gshadow file in \"path\"\n" +msgstr " -P sökväg Sök filerna grupp och gshadow i \"sökväg\"\n" + +#: src/grpunconv.c:219 +#, c-format +msgid "%s: No gshadow file found.\n" +msgstr "%s: Ingen gshadow-fil hittad.\n" + +#: src/grpunconv.c:243 src/pwconv.c:243 src/pwconv.c:267 src/pwunconv.c:190 +#, c-format +msgid "Cannot create backup file `%s': %m\n" +msgstr "Kan inte skapa säkerhetskopia \"%s\": %m\n" + +#: src/grpunconv.c:266 src/pwunconv.c:214 +#, c-format +msgid "Error while moving password for `%s'.\n" +msgstr "Fel vid flyttning av lösenord för \"%s\".\n" + +#: src/newgrp.c:52 +#, c-format +msgid "Usage: %s [-l|-c command] [group]\n" +msgstr "Användning: %s [-l|-c kommando] [grupp]\n" + +#: src/newgrp.c:60 +#, c-format +msgid "" +"%s - change the effective group id\n" +"\n" +msgstr "" +"%s - ändra effektivt grupp-id\n" +"\n" + +#: src/newgrp.c:63 +msgid " -l, --login reinitialize environment as if logged in\n" +msgstr " -l, --login initiera om miljö som om inloggad\n" + +#: src/newgrp.c:65 +msgid " -c command Execute `command' with new group\n" +msgstr " -c kommando Starta \"kommando\" med ny grupp\n" + +#: src/newgrp.c:161 +#, c-format +msgid "%s: -l and -c are exclusive\n" +msgstr "%s: -l och -c är uteslutande\n" + +#: src/newgrp.c:167 +#, c-format +msgid "%s: -c requires a group argument\n" +msgstr "%s: -c kräver ett gruppargument\n" + +#: src/newgrp.c:174 +#, c-format +msgid "%s: Unknown user.\n" +msgstr "%s: Okänd användare.\n" + +#: src/newgrp.c:195 +#, c-format +msgid "%s: bad group `%s'.\n" +msgstr "%s: felaktig grupp \"%s\".\n" + +#: src/newgrp.c:218 src/newgrp.c:313 +#, c-format +msgid "%s: calling getgroups failed: %s\n" +msgstr "%s: anrop av getgroups misslyckades: %s\n" + +#: src/newgrp.c:271 +#, c-format +msgid "%s: failure to get group entry for %d.\n" +msgstr "%s: misslyckades med att fÃ¥ gruppost för %d.\n" + +#: src/newgrp.c:281 +msgid "Password: " +msgstr "Lösenord: " + +#: src/newgrp.c:284 +#, c-format +msgid "%s: password incorrect.\n" +msgstr "%s: felaktigt lösenord.\n" + +#: src/newgrp.c:351 +#, c-format +msgid "%s: too many groups, not added.\n" +msgstr "%s: för mÃ¥nga grupper, lades inte till.\n" + +#: src/newgrp.c:358 +#, c-format +msgid "%s: calling setgroups failed: %s\n" +msgstr "%s: anrop av setgroups misslyckades: %s\n" + +#: src/newgrp.c:365 src/newgrp.c:380 +#, c-format +msgid "%s: calling setgid failed: %s\n" +msgstr "%s: anrop av setgid misslyckades: %s\n" + +#: src/newgrp.c:374 +#, c-format +msgid "%s: calling initgroups failed: %s\n" +msgstr "%s: anrop av initgroups misslyckades: %s\n" + +#: src/newgrp.c:389 +#, c-format +msgid "%s: calling setuid failed: %s\n" +msgstr "%s: anrop av setuid misslyckades: %s\n" + +#: src/newgrp.c:401 +#, c-format +msgid "Cannot change to directory %s: %s\n" +msgstr "Kan inte ändra till katalog %s: %s\n" + +#: src/newgrp.c:439 +#, c-format +msgid "%s: execl failed: %s\n" +msgstr "%s: execl misslyckades: %s\n" + +#: src/pam_rpasswd.c:219 src/pam_rpasswd.c:223 src/pam_rpasswd.c:330 +#: src/pam_rpasswd.c:334 src/rpasswd.c:211 src/rpasswd.c:214 src/rpasswd.c:297 +#: src/rpasswd.c:300 +#, c-format +msgid "error while reading request: %s" +msgstr "fel vid läsning av begäran: %s" + +#: src/pam_rpasswd.c:220 src/rpasswd.c:212 src/rpasswd-client.c:58 +#: src/rpasswd-client.c:71 src/rpasswd-client.c:82 src/rpasswd-client.c:108 +#: src/rpasswd-client.c:121 +msgid "Peer has closed the TLS connection" +msgstr "Motpart har stängt TLS-anslutningen" + +#: src/pam_rpasswd.c:235 src/pam_rpasswd.c:344 +#, c-format +msgid "error while allocating memory: %m" +msgstr "fel vid minnesallokering: %m" + +#: src/pam_rpasswd.c:242 src/rpasswd.c:223 src/rpasswd.c:312 +#, c-format +msgid "error while reading request data: %s" +msgstr "fel vid dataläsning av begäran: %s" + +#: src/pam_rpasswd.c:296 src/rpasswd.c:269 src/rpasswd.c:358 +#, c-format +msgid "Cannot send input back to server: %s\n" +msgstr "Kan inte skicka inmatning tillbaka till server: %s\n" + +#: src/pam_rpasswd.c:331 src/rpasswd.c:298 +msgid "wrong data received" +msgstr "fel data mottogs" + +#: src/pam_rpasswd.c:352 +#, c-format +msgid "error while reading request data: %m" +msgstr "fel vid läsning av begärt data: %m" + +#: src/pam_rpasswd.c:403 +#, c-format +msgid "Cannot send input back to server: %m\n" +msgstr "Kan inte skicka inmatning tillbaka till server: %m\n" + +#: src/pam_rpasswd.c:565 +#, c-format +msgid "SLP: Found Server on %s, port %s (%s)\n" +msgstr "SLP: Hittade server pÃ¥ %s, port %s (%s)\n" + +#: src/pam_rpasswd.c:568 +#, c-format +msgid "SLP: Found Server on %s, port %s\n" +msgstr "SLP: Hittade server pÃ¥ %s, port %s\n" + +#: src/pam_rpasswd.c:574 +#, c-format +msgid "SLP: Found Server on %s (%s)\n" +msgstr "SLP: Hittade server pÃ¥ %s (%s)\n" + +#: src/pam_rpasswd.c:577 +#, c-format +msgid "SLP: Found Server on %s\n" +msgstr "SLP: Hittade server pÃ¥ %s\n" + +#: src/passwd.c:210 +#, c-format +msgid "Unable to initialize BioAPI framework, BioAPI error #:%x.\n" +msgstr "Kunde inte initiera BioAPI-ramverk, BioAPI-fel #:%x.\n" + +#: src/passwd.c:220 +#, c-format +msgid "Unable to parse UUID (BioAPI error #:%x) : %s\n" +msgstr "Kunde inte tolka UUID (BioAPI-fel #:%x) : %s\n" + +#: src/passwd.c:241 +#, c-format +msgid "Unable to load BioAPI BSP with UUID of %s, BioAPI error #%x.\n" +msgstr "Kunde inte läsa in BioAPI BSP med UUID pÃ¥ %s, BioAPI-fel #%x.\n" + +#: src/passwd.c:252 +#, c-format +msgid "" +"Unable to attach default device to BioAPI BSP with UUID of %s, BioAPI error #" +"%x.\n" +msgstr "" +"Kunde inte koppla standardenhet till BioAPI BSP med UUID pÃ¥ %s, BioAPI-fel #%" +"x.\n" + +#: src/passwd.c:278 +#, c-format +msgid "Unable to create BIR database directory, \"%s\"\n" +msgstr "Kunde inte skapa BIR-databaskatalog, \"%s\"\n" + +#: src/passwd.c:291 +#, c-format +msgid "" +"Unable to create BSP-specific subdirectory in BIR database directory, \"%s" +"\"\n" +msgstr "" +"Kunde inte skapa BSP-specifik underkatalog i BIR-databaskatalogen, \"%s\"\n" + +#: src/passwd.c:306 +#, c-format +msgid "" +"Unable to write biometric identification record, \"%s\": BioAPI error #%x\n" +msgstr "" +"Kunde inte skriva biometrisk identifieringspost, \"%s\": BioAPI-fel #%x\n" + +#: src/passwd.c:318 +#, c-format +msgid "Unable to open BIR for writing, \"%s\"\n" +msgstr "Kunde inte öppna BIR för skrivning, \"%s\"\n" + +#: src/passwd.c:349 +#, c-format +msgid "Unable to enroll user %s using BSP with UUID of %s, BioAPI error #%x.\n" +msgstr "" +"Kunde inte införa användaren %s med BSP med UUID pÃ¥ %s, BioAPI-fel #%x.\n" + +#: src/passwd.c:367 +#, c-format +msgid "Usage: %s [-f|-g|-s|-k[-q]] [account]\n" +msgstr "Användning: %s [-f|-g|-s|-k[-q]] [konto]\n" + +#: src/passwd.c:368 +#, c-format +msgid " %s [-D binddn] [-n min] [-x max] [-w warn] [-i inact] account\n" +msgstr " %s [-D binddn] [-n min] [-x max] [-w varn] [-i inakt] konto\n" + +#: src/passwd.c:369 +#, c-format +msgid " %s {-l|-u|-d|-S[-a]|-e} account\n" +msgstr " %s {-l|-u|-d|-S[-a]|-e} konto\n" + +#: src/passwd.c:371 +#, c-format +msgid " %s --bioapi [account]\n" +msgstr " %s --bioapi [konto]\n" + +#: src/passwd.c:373 +#, c-format +msgid " %s --stdin [account]\n" +msgstr " %s --stdin [konto]\n" + +#: src/passwd.c:380 src/rpasswd.c:93 src/rpasswdd.c:114 +#, c-format +msgid "" +"%s - change password information\n" +"\n" +msgstr "" +"%s - ändra lösenordsinformation\n" +"\n" + +#: src/passwd.c:382 +msgid " -f Change the finger (GECOS) information\n" +msgstr " -f Ändra fingerinformationen (GECOS)\n" + +#: src/passwd.c:384 +msgid " -s Change the login shell\n" +msgstr " -s Ändra inloggningsskalet\n" + +#: src/passwd.c:385 +msgid " -g Change the group password\n" +msgstr " -g Ändra grupplösenordet\n" + +#: src/passwd.c:386 +msgid " -k Change the password only if expired\n" +msgstr " -k Ändra endast lösenordet om det har gÃ¥tt ut\n" + +#: src/passwd.c:387 +msgid " -q Try to be quiet\n" +msgstr " -q Försök vara tyst\n" + +#: src/passwd.c:388 +msgid " -S Show the password attributes\n" +msgstr " -S Visa lösenordsattribut\n" + +#: src/passwd.c:389 +msgid " -a Only with -S, show for all accounts\n" +msgstr " -a Endast med -S, visa för alla konton\n" + +#: src/passwd.c:390 +msgid " -d Delete the password for the named account\n" +msgstr " -d Ta bort lösenord för det angivna kontot\n" + +#: src/passwd.c:391 +msgid " -l Locks the password entry for \"account\"\n" +msgstr " -l LÃ¥ser lösenordsposten för \"konto\"\n" + +#: src/passwd.c:392 +msgid " -u Try to unlock the password entry for \"account\"\n" +msgstr " -u Försök att lÃ¥sa upp lösenordspost för \"konto\"\n" + +#: src/passwd.c:393 +msgid " -e Force the user to change password at next login\n" +msgstr "" +" -e Tvinga användaren att ändra lösenord nästa inloggning\n" + +#: src/passwd.c:394 +msgid " -n min Set minimum field for \"account\"\n" +msgstr " -n min Ställ in minimumfält för \"konto\"\n" + +#: src/passwd.c:395 +msgid " -x max Set maximum field for \"account\"\n" +msgstr " -x max Ställ in maximumfält för \"konto\"\n" + +#: src/passwd.c:396 +msgid " -w warn Set warn field for \"account\"\n" +msgstr " -w varn Ställ in varningsfält för \"konto\"\n" + +#: src/passwd.c:398 +msgid " --bioapi Authentication token is handled via BioAPI\n" +msgstr " --bioapi Autentiseringstoken hanteras via BioAPI\n" + +#: src/passwd.c:405 +msgid " --stdin Read new password from stdin (root only)\n" +msgstr " --stdin Läs nytt lösenord frÃ¥n standard in (endast root)\n" + +#: src/passwd.c:597 +#, c-format +msgid "%s: User argument missing\n" +msgstr "%s: Användarargument saknas\n" + +#: src/passwd.c:690 +#, c-format +msgid "%s: User `%s' is not known to service `%s'\n" +msgstr "%s: Användare \"%s\" är inte känd av tjänst \"%s\"\n" + +#: src/passwd.c:715 +#, c-format +msgid "%s: %s is not authorized to change the password of %s\n" +msgstr "%s: %s är inte auktoriserad att ändra lösenordet för %s\n" + +#: src/passwd.c:744 +#, c-format +msgid "%s: Permission denied\n" +msgstr "%s: Åtkomst nekad\n" + +#: src/passwd.c:753 +#, c-format +msgid "You cannot change the shadow data for `%s'.\n" +msgstr "Du kan inte ändra skuggdata för \"%s\".\n" + +#: src/passwd.c:781 +#, c-format +msgid "%s: -P flag not supported in this mode!\n" +msgstr "%s: flaggan -P stöds inte i detta läge!\n" + +#: src/passwd.c:811 +#, c-format +msgid "Changing password for %s.\n" +msgstr "Ändrar lösenord för %s.\n" + +#: src/passwd.c:960 +#, c-format +msgid "Error while changing password expiry information.\n" +msgstr "Fel vid ändring av utgÃ¥ngsinformation för lösenord.\n" + +#: src/passwd.c:962 +#, c-format +msgid "Error while changing password.\n" +msgstr "Fel vid ändring av lösenord.\n" + +#: src/passwd.c:974 +#, c-format +msgid "Password expiry information changed.\n" +msgstr "UtgÃ¥ngsinformation för lösenord ändrades.\n" + +#: src/passwd.c:976 +#, c-format +msgid "Password deleted.\n" +msgstr "Lösenordet borttaget.\n" + +#: src/passwd.c:1038 +#, c-format +msgid "passwd: Cannot execute %s" +msgstr "passwd: Kan inte köra %s" + +#: src/pwck.c:51 +#, c-format +msgid "Usage: %s [-P path] [-q|-r|-s]\n" +msgstr "Användning: %s [-P sökväg] [-q|-r|-s]\n" + +#: src/pwck.c:59 +#, c-format +msgid "" +"%s - check integrity of password files\n" +"\n" +msgstr "" +"%s - kontrollera lösenordsfilers integritet\n" +"\n" + +#: src/pwck.c:66 +msgid " -s, --sort Sort the password file, no checks are done\n" +msgstr " -s, --sort Sortera lösenordsfilen, inga kontroller görs\n" + +#: src/pwck.c:345 src/pwck.c:380 +#, c-format +msgid "Invalid password entry.\n" +msgstr "Ogiltig lösenordspost.\n" + +#: src/pwck.c:364 +#, c-format +msgid "Invalid password entry with comment.\n" +msgstr "Ogiltig lösenordspost med kommentar.\n" + +#: src/pwck.c:396 src/pwck.c:665 +#, c-format +msgid "Invalid account name `%s'.\n" +msgstr "Ogiltigt kontonamn \"%s\".\n" + +#: src/pwck.c:412 +#, c-format +msgid "Duplicate password entry\n" +msgstr "Dubblerad lösenordspost\n" + +#: src/pwck.c:431 +#, c-format +msgid "User `%s': unknown group `%u'\n" +msgstr "Användare \"%s\": okänd grupp \"%u\"\n" + +#: src/pwck.c:440 +#, c-format +msgid "User `%s': directory `%s' does not exist.\n" +msgstr "Användare \"%s\": katalogen \"%s\" finns inte.\n" + +#: src/pwck.c:449 +#, c-format +msgid "User `%s': shell `%s' is not executable.\n" +msgstr "Användare \"%s\": skalet \"%s\" är inte körbart.\n" + +#: src/pwck.c:506 +#, c-format +msgid "Checking `%s'.\n" +msgstr "Kontrollerar \"%s\".\n" + +#: src/pwck.c:615 src/pwck.c:649 +#, c-format +msgid "Invalid shadow entry.\n" +msgstr "Ogiltig skuggpost.\n" + +#: src/pwck.c:634 +#, c-format +msgid "Invalid shadow entry with comment.\n" +msgstr "Ogiltig skuggpost med kommentar.\n" + +#: src/pwck.c:681 +#, c-format +msgid "Duplicate shadow entry\n" +msgstr "Dubblerad skuggpost\n" + +#: src/pwck.c:699 +#, c-format +msgid "No matching password file entry.\n" +msgstr "Ingen matchande post i lösenordsfil.\n" + +#: src/pwck.c:714 +#, c-format +msgid "User `%s': last password change in the future.\n" +msgstr "Användare \"%s\": senaste ändring av lösenord hände i framtiden.\n" + +#: src/pwconv.c:51 +#, c-format +msgid "" +"%s - convert to shadow account\n" +"\n" +msgstr "" +"%s - konvertera till skuggkonto\n" +"\n" + +#: src/pwconv.c:307 +#, c-format +msgid "Orphaned entry '%s' removed from shadow database.\n" +msgstr "Föräldralösa posten \"%s\" togs bort frÃ¥n skuggdatabasen.\n" + +#: src/pwconv.c:316 +#, c-format +msgid "Error while deleting `%s' shadow account.\n" +msgstr "Fel vid borttagning av skuggkonto \"%s\".\n" + +#: src/pwconv.c:343 +#, c-format +msgid "%s: Error trying to get data for `%s'\n" +msgstr "%s: Fel vid försök att hämta data för \"%s\"\n" + +#: src/pwconv.c:365 src/pwconv.c:388 src/pwconv.c:419 src/pwconv.c:435 +#, c-format +msgid "Error while converting `%s' to shadow account.\n" +msgstr "Fel vid konvertering av \"%s\" till skuggkonto.\n" + +#: src/pwconv.c:466 +#, c-format +msgid "Error while renaming temporary shadow file: %m\n" +msgstr "Fel vid namnbyte pÃ¥ temporär skuggfil: %m\n" + +#: src/pwconv.c:491 +#, c-format +msgid "Error while renaming temporary password file: %m\n" +msgstr "Fel vid namnbyte pÃ¥ temporär lösenordsfil: %m\n" + +#: src/pwunconv.c:51 +#, c-format +msgid "" +"%s - convert from shadow account\n" +"\n" +msgstr "" +"%s - konvertera frÃ¥n skuggkonto\n" +"\n" + +#: src/pwunconv.c:166 +#, c-format +msgid "%s: No shadow file found.\n" +msgstr "%s: Ingen skuggfil hittad.\n" + +#: src/rpasswd.c:85 +#, c-format +msgid "Usage: %s [-4|-6][-a][-f config-file][-h hostname][-p port][-v][name]\n" +msgstr "" +"Användning: %s [-4|-6][-a][-f konfig-fil][-h värdnamn][-p port][-v][namn]\n" + +#: src/rpasswd.c:95 +msgid " -4 Use IPv4 only\n" +msgstr " -4 Använd endast IPv4\n" + +#: src/rpasswd.c:96 +msgid " -6 Use IPv6 only\n" +msgstr " -6 Använd endast IPv6\n" + +#: src/rpasswd.c:98 +msgid " -a Admin mode, special admin password is required\n" +msgstr "" +" -a Administrationsläge, speciellt administrationslösenord " +"krävs\n" + +#: src/rpasswd.c:100 +msgid " -f config-file Specify a different config file\n" +msgstr " -f konfig-fil Ange en annan konfigurationsfil\n" + +#: src/rpasswd.c:101 +msgid " -h hostname Specify the remote server\n" +msgstr " -h värdnamn Ange fjärrservern\n" + +#: src/rpasswd.c:102 +msgid " -p port Specify port remote server is listening on\n" +msgstr " -p port Ange port som fjärrservern lyssnar pÃ¥\n" + +#: src/rpasswd.c:104 +msgid " -r level Specify level of SSL certificate checks\n" +msgstr " -r nivÃ¥ Ange nivÃ¥ för kontroll av SSL-certifikat\n" + +#: src/rpasswd.c:107 +msgid " --no-slp Don't use SLP to find a server\n" +msgstr " --no-slp Använd inte SLP för att hitta en server\n" + +#: src/rpasswd.c:109 +msgid " -v, --verbose Be verbose, print SSL connection data\n" +msgstr " -v, --verbose Var informativ, skriv ut data om SSL-anslutning\n" + +#: src/rpasswd.c:150 +#, c-format +msgid "Warning: cannot turn echo off\n" +msgstr "Varning: kan inte stänga av eko\n" + +#: src/rpasswd.c:515 +#, c-format +msgid "SLP: Found Server on %s, port %s" +msgstr "SLP: Hittade server pÃ¥ %s, port %s" + +#: src/rpasswd.c:518 +#, c-format +msgid "SLP: Found Server on %s" +msgstr "SLP: Hittade server pÃ¥ %s" + +#: src/rpasswd.c:554 +#, c-format +msgid "Go away, you do not exist!" +msgstr "Försvinn, du finns inte!" + +#: src/rpasswd.c:568 +#, c-format +msgid "No server specified\n" +msgstr "Ingen server angiven\n" + +#: src/rpasswd-client.c:57 src/rpasswd-client.c:60 +#, c-format +msgid "error while sending start request: %s\n" +msgstr "fel vid sändning av startbegäran: %s\n" + +#: src/rpasswd-client.c:70 src/rpasswd-client.c:73 +#, c-format +msgid "error while sending locale data: %s\n" +msgstr "fel vid sändning av lokaldata: %s\n" + +#: src/rpasswd-client.c:81 src/rpasswd-client.c:84 +#, c-format +msgid "error while sending username: %s\n" +msgstr "fel vid sändning av användarnamn: %s\n" + +#: src/rpasswd-client.c:107 src/rpasswd-client.c:110 src/rpasswd-client.c:120 +#: src/rpasswd-client.c:123 +#, c-format +msgid "error while sending string: %s\n" +msgstr "fel vid sändning av sträng: %s\n" + +#: src/rpasswd-client.c:318 +msgid "Searching a server...\n" +msgstr "Söker efter server...\n" + +#: src/rpasswd-client.c:323 +#, c-format +msgid "Error opening SLP handle: %i.\n" +msgstr "Fel vid öppning av SLP-hanterare: %i.\n" + +#: src/rpasswd-client.c:334 +msgid "No service found with SLP.\n" +msgstr "Ingen tjänst hittades med SLP.\n" + +#: src/rpasswd-client.c:353 +msgid "Error while searching for SLP description.\n" +msgstr "Fel vid sökning efter SLP-beskrivning.\n" + +#: src/rpasswd-client.c:372 +#, c-format +msgid "" +"\n" +"Please select a server:\n" +msgstr "" +"\n" +"Välj en server:\n" + +#: src/rpasswd-client.c:378 +#, c-format +msgid " (port %s)" +msgstr " (port %s)" + +#: src/rpasswd-client.c:388 +#, c-format +msgid "Enter number of choice [1-%d]: " +msgstr "Ange val med nummer [1-%d]: " + +#: src/rpasswd-client.c:458 +msgid "parsing config file" +msgstr "tolkar konfigurationsfil" + +#: src/rpasswd-client.c:501 src/rpasswd-client.c:504 +msgid "Trying entry:" +msgstr "Försöker med post:" + +#: src/rpasswd-client.c:543 +#, c-format +msgid "Entry \"%s\" is not valid!\n" +msgstr "Post \"%s\" är inte giltig!\n" + +#: src/rpasswd-client.c:547 +#, c-format +msgid "Entry \"%s\" is not valid, ignored!\n" +msgstr "Post \"%s\" är inte giltig, ignoreras!\n" + +#: src/rpasswd-client.c:560 +msgid "Bad entries found.\n" +msgstr "Felaktiga poster hittade.\n" + +#: src/rpasswd-client.c:565 +msgid "No entry found.\n" +msgstr "Ingen post hittad.\n" + +#: src/rpasswd-client.c:575 +msgid "No entry found." +msgstr "Ingen post hittad." + +#: src/rpasswd-client.c:609 +msgid "Hostname or service not known for specified protocol\n" +msgstr "Värdnamn eller tjänst är inte kända för angivet protokoll\n" + +#: src/rpasswd-client.c:623 +#, c-format +msgid "bad port: %s\n" +msgstr "felaktig port: %s\n" + +#: src/rpasswd-client.c:648 src/rpasswd-client.c:657 +#, c-format +msgid "Trying %s port %d...\n" +msgstr "Provar %s port %d...\n" + +#: src/rpasswd-client.c:663 +#, c-format +msgid "Trying %s...\n" +msgstr "Provar %s...\n" + +#: src/rpasswd-client.c:677 +#, c-format +msgid "connect to address %s: %s\n" +msgstr "anslut till adress %s: %s\n" + +#: src/rpasswd-client.c:732 src/rpasswd-client.c:1028 +msgid "Server certificate info:\n" +msgstr "Information om servercertifikat:\n" + +#: src/rpasswd-client.c:742 +#, c-format +msgid " Certificate is valid since: %s" +msgstr " Certifikatet giltigt sedan: %s" + +#: src/rpasswd-client.c:744 +#, c-format +msgid " Certificate expires: %s" +msgstr " Certifikatet utgÃ¥r: %s" + +#: src/rpasswd-client.c:750 +#, c-format +msgid " Certificate public key: %s" +msgstr " Certifikatets publika nyckel: %s" + +#: src/rpasswd-client.c:756 +#, c-format +msgid " Certificate version: #%d\n" +msgstr " Certifikatversion: %d\n" + +#: src/rpasswd-client.c:761 src/rpasswd-client.c:1034 +#, c-format +msgid " DN: %s\n" +msgstr " Namn (DN): %s\n" + +#: src/rpasswd-client.c:765 src/rpasswd-client.c:1041 +#, c-format +msgid " Issuer's DN: %s\n" +msgstr " Utgivarens namn: %s\n" + +#: src/rpasswd-client.c:846 +#, c-format +msgid "Handshake failed: %s\n" +msgstr "Handskakning misslyckades: %s\n" + +#: src/rpasswd-client.c:869 +#, c-format +msgid "TLS certificate error: %s\n" +msgstr "TLS-certifikatfel: %s\n" + +#: src/rpasswd-client.c:880 +#, c-format +msgid "" +"%s connection using %s-%s (%s)\n" +"\n" +msgstr "" +"%s anslutning använder %s-%s (%s)\n" +"\n" + +#: src/rpasswd-client.c:898 +msgid "TLS authentication error: server certificate issuer is unknown.\n" +msgstr "TLS-certifikatfel: utgivare av servercertifikat är okänd.\n" + +#: src/rpasswd-client.c:906 +msgid "TLS authentication error: server certificate is NOT trusted.\n" +msgstr "TLS-certifikatfel: servercertifikat är INTE pÃ¥litligt.\n" + +#: src/rpasswd-client.c:917 +msgid "TLS authentication error: server certificate not yet activated.\n" +msgstr "TLS-certifikatfel: servercertifikat ännu inte aktiverat.\n" + +#: src/rpasswd-client.c:925 +msgid "TLS authentication error: server certificate expired.\n" +msgstr "TLS-certifikatfel: servercertifikat utgÃ¥nget.\n" + +#: src/rpasswd-client.c:960 +#, c-format +msgid "error loading default verify locations: %s\n" +msgstr "fel vid inläsning av standardverifieringsplatser: %s\n" + +#: src/rpasswd-client.c:968 +#, c-format +msgid "error setting default verify path: %s\n" +msgstr "fel vid inställning av standardverifieringssökväg: %s\n" + +#: src/rpasswd-client.c:1003 +#, fuzzy +msgid "Unable to get certificate from peer.\n" +msgstr "Kunde inte hämta entropidata frÃ¥n %s\n" + +#: src/rpasswd-client.c:1017 +#, c-format +msgid "" +"SSL connection using %s\n" +"\n" +msgstr "" +"SSL-anslutning använder %s\n" +"\n" + +#: src/rpasswd-client.c:1022 +msgid "Server does not have a certificate?\n" +msgstr "Servern har inget certifikat?\n" + +#: src/rpasswdd.c:102 +#, c-format +msgid "" +"Usage: %s [-4] [-6] [-d] [-c certificate] [-k privatekey] [-p port]\n" +" [--slp [--slp-timeout timeout] [--slp-descr description]]\n" +msgstr "" +"Användning: %s [-4] [-6] [-d] [-c certifikat] [-k privatnyckel] [-p port]\n" +" [--slp [--slp-timeout tidsgräns] [--slp-descr beskrivning]]\n" + +#: src/rpasswdd.c:105 +#, c-format +msgid "Usage: %s [-4] [-6] [-d] [-c certificate] [-k privatekey] [-p port]\n" +msgstr "" +"Användning: %s [-4] [-6] [-d] [-c certifikat] [-k privatnyckel] [-p port]\n" + +#: src/rpasswdd.c:116 +msgid " -4 Use IPv4\n" +msgstr " -4 Använd IPv4\n" + +#: src/rpasswdd.c:117 +msgid " -6 Use IPv6\n" +msgstr " -6 Använd IPv6\n" + +#: src/rpasswdd.c:118 +msgid " -c certificate Specify alternate certificate file\n" +msgstr " -c certifikat Ange alternativ certifikatfil\n" + +#: src/rpasswdd.c:119 +msgid " -k privatekey Specify alternate file with private key\n" +msgstr " -k privatnyckel Ange alternativ fil med privat nyckel\n" + +#: src/rpasswdd.c:121 +msgid " -d Run in debug mode\n" +msgstr " -d Kör i felsökningsläge\n" + +#: src/rpasswdd.c:122 +msgid " -p port Port on which the server should listen\n" +msgstr " -p port Port pÃ¥ vilken servern ska lyssna\n" + +#: src/rpasswdd.c:125 +msgid " --slp Register at local SLP server\n" +msgstr " --slp Registrera mot lokal SLP-server\n" + +#: src/rpasswdd.c:126 +msgid " --slp-timeout Set timeout for re-registration\n" +msgstr " --slp-timeout Ställ in tidsgräns för Ã¥terregistrering\n" + +#: src/rpasswdd.c:127 +msgid " --slp-descr Set a description shown to SLP clients\n" +msgstr " --slp-descr Ställ in en beskrivning som visas för SLP-klienter\n" + +#: src/rpasswdd.c:710 +#, c-format +msgid "Please authenticate as %s on %s" +msgstr "Vänligen autentisera som %s pÃ¥ %s" + +#: src/rpasswdd.c:749 +#, c-format +msgid "" +"\n" +"Now enter the new password for %s" +msgstr "" +"\n" +"Ange nu det nya lösenordet för %s" + +#: src/rpasswdd.c:770 +#, c-format +msgid "setresuid failed on server: %s" +msgstr "setresuid misslyckades pÃ¥ server: %s" + +#: src/rpasswdd.c:813 +msgid "Password not changed" +msgstr "Lösenord ändrades inte" + +#: src/rpasswdd.c:816 +msgid "Password changed" +msgstr "Lösenord ändrades" + +#: src/rpasswdd.c:1349 +msgid "already running" +msgstr "körs redan" + +#: src/useradd.c:54 src/usermod.c:55 +#, c-format +msgid "Usage: %s ...\n" +msgstr "Användning: %s ...\n" + +#: src/useradd.c:61 +#, c-format +msgid "" +"%s - create a new user\n" +"\n" +msgstr "" +"%s - skapa en ny användare\n" +"\n" + +#: src/useradd.c:63 src/usermod.c:64 +msgid " -c comment Set the GECOS field for the new account\n" +msgstr " -c kommentar Ställ in GECOS-fältet för nya kontot\n" + +#: src/useradd.c:65 +msgid " --show-defaults Print default values\n" +msgstr " --show-defaults Skriv ut standardvärden\n" + +#: src/useradd.c:66 +msgid " --save-defaults Save modified default values\n" +msgstr " --save-defaults Spara ändrade standardvärden\n" + +#: src/useradd.c:68 src/usermod.c:69 +msgid " -d homedir Home directory for the new user\n" +msgstr " -d hemkat Hemkatalog för nya användaren\n" + +#: src/useradd.c:69 src/usermod.c:70 +msgid " -e expire Date on which the new account will be disabled\n" +msgstr " -e utgÃ¥ng Datum pÃ¥ vilken nya kontot stängs av\n" + +#: src/useradd.c:71 src/usermod.c:72 +msgid "" +" -f inactive Days after a password expires until account is disabled\n" +msgstr "" +" -f inaktiv Dagar efter ett lösenord utgÃ¥r tills kontot stängs av\n" + +#: src/useradd.c:73 src/usermod.c:74 +msgid " -G group,... List of supplementary groups\n" +msgstr " -G grupp,... Lista tilläggsgrupper\n" + +#: src/useradd.c:74 src/usermod.c:75 +msgid " -g gid Name/number of the users primary group\n" +msgstr " -g gid Namn/nummer för användarens primära grupp\n" + +#: src/useradd.c:78 +msgid " -m Create home directory for the new user\n" +msgstr " -m Skapa hemkatalog för den nya användaren\n" + +#: src/useradd.c:85 +msgid " -u uid Force the new userid to be the given number\n" +msgstr " -u uid Tvinga nytt användar-id att vara angivet nummer\n" + +#: src/useradd.c:87 +msgid " -U umask Umask value used for creating home directory\n" +msgstr " -U umask Umask-värde som används för att skapa hemkatalog\n" + +#: src/useradd.c:90 src/usermod.c:88 +msgid " -s shell Name of the user's login shell\n" +msgstr " -s skal Namn pÃ¥ användarens inloggningsskal\n" + +#: src/useradd.c:186 +#, c-format +msgid "%s: Invalid numeric argument `%s' for group ID.\n" +msgstr "%s: Ogiltigt numeriskt argument \"%s\" för grupp-id.\n" + +#: src/useradd.c:196 src/usermod.c:160 +#, c-format +msgid "%s: Group `%u' not found in service `%s'.\n" +msgstr "%s: Gruppen \"%u\" hittades inte i tjänsten \"%s\".\n" + +#: src/useradd.c:202 src/usermod.c:166 +#, c-format +msgid "%s: Unknown group `%u'.\n" +msgstr "%s: Okänd grupp \"%u\".\n" + +#: src/useradd.c:301 +#, c-format +msgid "%s: Unknown group `%s' in %s.\n" +msgstr "%s: Okänd grupp \"%s\" i %s.\n" + +#: src/useradd.c:316 +#, c-format +msgid "%s: Invalid home directory `%s' in %s.\n" +msgstr "%s: Ogiltig hemkatalog \"%s\" i %s.\n" + +#: src/useradd.c:335 +#, c-format +msgid "%s: Invalid numeric argument `%s' for `INACTIVE' in %s.\n" +msgstr "%s: Ogiltigt numeriskt argument \"%s\" för \"INAKTIV\" i %s.\n" + +#: src/useradd.c:358 +#, c-format +msgid "%s: Expiredate `%s' is no date and no integer value >= -1 in %s.\n" +msgstr "" +"%s: UtgÃ¥ngsdatum \"%s\" är inget datum och inte ett heltalsvärde >= -1 i %" +"s.\n" + +#: src/useradd.c:374 +#, c-format +msgid "%s: Invalid shell `%s' in %s.\n" +msgstr "%s: Ogiltigt skal \"%s\" i %s.\n" + +#: src/useradd.c:388 +#, c-format +msgid "%s: Skel directory \"%s\" in %s does not exist.\n" +msgstr "%s: Skelettkatalogen \"%s\" i %s finns inte.\n" + +#: src/useradd.c:449 +#, c-format +msgid "%s: Invalid value `%s' for option CREATE_MAIL_SPOOL in %s.\n" +msgstr "%s: Ogiltigt värde \"%s\" för flagga CREATE_MAIL_SPOOL i %s.\n" + +#: src/useradd.c:465 +#, c-format +msgid "%s: Invalid numeric argument `%s' for `UMASK' in %s.\n" +msgstr "%s: Ogiltigt numeriskt argument \"%s\" för \"UMASK\" i %s.\n" + +#: src/useradd.c:913 +#, c-format +msgid "%s: Can't get unique uid in range %u - %u.\n" +msgstr "%s: Kan inte hämta unikt id i rymden %u - %u.\n" + +#: src/useradd.c:987 +#, c-format +msgid "%s: Can't stat `%s': %m\n" +msgstr "%s: Kan inta läsa av status för \"%s\": %m\n" + +#: src/useradd.c:1018 +#, c-format +msgid "" +"%s: No group named \"mail\" exists, creating mail spool with mode 0600.\n" +msgstr "" +"%s: Ingen grupp med namnet \"mail\" finns, skapar postkö med rättigheterna " +"0600.\n" + +#: src/useradd.c:1026 +#, c-format +msgid "%s: Can't create mail spool for user %s.\n" +msgstr "%s: Kan inte skapa postkö för användare %s.\n" + +#: src/useradd.c:1095 src/usermod.c:520 +#, c-format +msgid "%s: Cannot create directory `%s'.\n" +msgstr "%s: Kan inte skapa katalog \"%s\".\n" + +#: src/useradd.c:1100 src/usermod.c:525 src/usermod.c:549 +#, c-format +msgid "%s: Warning: chown on `%s' failed: %m\n" +msgstr "%s: Varning: chown pÃ¥ \"%s\" misslyckades: %m\n" + +#: src/useradd.c:1103 src/usermod.c:528 +#, c-format +msgid "%s: Warning: chmod on `%s' failed: %m\n" +msgstr "%s: Varning: chmod pÃ¥ \"%s\" misslyckades: %m\n" + +#: src/useradd.c:1126 +#, c-format +msgid "%s: Copying of skel directory failed.\n" +msgstr "%s: Kopiering av skelettkatalog misslyckades.\n" + +#: src/useradd.c:1136 +#, c-format +msgid "%s: Warning: home directory already exists, not modifying it.\n" +msgstr "%s: Varning: hemkatalogen finns redan, ändrar den inte.\n" + +#: src/useradd.c:1197 +#, c-format +msgid "%s: Reading of `%s' was not successful.\n" +msgstr "%s: Läsning av \"%s\" lyckades inte.\n" + +#: src/useradd.c:1226 src/usermod.c:798 +#, c-format +msgid "%s: Invalid comment `%s'.\n" +msgstr "%s: Ogiltig kommentar \"%s\".\n" + +#: src/useradd.c:1243 src/usermod.c:812 +#, c-format +msgid "%s: Invalid home directory `%s'.\n" +msgstr "%s: Ogiltig hemkatalog \"%s\".\n" + +#: src/useradd.c:1264 src/usermod.c:836 +#, c-format +msgid "%s: Expiredate `%s' is no date and no integer value >= -1.\n" +msgstr "" +"%s: UtgÃ¥ngsdatum \"%s\" är inget datum och inte ett heltalsvärde >= -1.\n" + +#: src/useradd.c:1280 +#, c-format +msgid "%s: Invalid numeric argument `%s' for `-f'.\n" +msgstr "%s: Ogiltigt numeriskt argument \"%s\" för \"-f\".\n" + +#: src/useradd.c:1299 +#, c-format +msgid "%s: Skel directory `%s' does not exist.\n" +msgstr "%s: Skelettkatalogen \"%s\" finns inte.\n" + +#: src/useradd.c:1341 src/usermod.c:935 +#, c-format +msgid "%s: Invalid shell `%s'.\n" +msgstr "%s: Ogiltigt skal \"%s\".\n" + +#: src/useradd.c:1350 src/useradd.c:1374 +#, c-format +msgid "%s: Invalid numeric argument `%s' for User ID.\n" +msgstr "%s: Ogiltigt numeriskt argument \"%s\" för användar-id.\n" + +#: src/useradd.c:1364 +#, c-format +msgid "%s: Invalid numeric argument `%s' for `-U'.\n" +msgstr "%s: Ogiltigt numeriskt argument \"%s\" för \"-U\".\n" + +#: src/useradd.c:1425 +#, c-format +msgid "%s: You cannot use --uid and --preferred-uid at the same time.\n" +msgstr "%s: Du kan inte använda --uid och --preferred-uid samtidigt.\n" + +#: src/useradd.c:1576 +#, c-format +msgid "%s: Writing of `%s' was not successful.\n" +msgstr "%s: Skrivning av \"%s\" lyckades inte.\n" + +#: src/useradd.c:1604 src/usermod.c:1335 +#, c-format +msgid "%s: UID %u is not unique.\n" +msgstr "%s: UID %u är inte unik.\n" + +#: src/useradd.c:1616 src/usermod.c:1349 +#, c-format +msgid "%s: Invalid account name `%s'.\n" +msgstr "%s: Ogiltigt kontonamn \"%s\".\n" + +#: src/useradd.c:1637 src/usermod.c:1360 +#, c-format +msgid "%s: Account `%s' already exists.\n" +msgstr "%s: Kontot \"%s\" finns redan.\n" + +#: src/useradd.c:1721 +#, c-format +msgid "%s: Error: Cannot clear old faillog entry: %s\n" +msgstr "%s: Fel: Kan inte rensa gammal faillog-post: %s\n" + +#: src/useradd.c:1734 +#, c-format +msgid "%s: Error: Cannot clear old lastlog entry: %s\n" +msgstr "%s: Fel: Kan inte rensa gammal lastlog-post: %s\n" + +#: src/useradd.c:1748 +#, c-format +msgid "%s: Cannot add user to LDAP database without DN.\n" +msgstr "%s: Kan inte lägga till användare till LDAP-databas utan DN.\n" + +#: src/useradd.c:1765 +#, c-format +msgid "%s: User not added to LDAP database.\n" +msgstr "%s: Användaren lades inte till i LDAP-databas.\n" + +#: src/useradd.c:1793 src/usermod.c:397 src/usermod.c:635 src/usermod.c:1563 +#, c-format +msgid "%s: ERROR: Cannot find group `%s' anymore!\n" +msgstr "%s: FEL: Kan inte hitta grupp \"%s\" längre!\n" + +#: src/useradd.c:1797 src/usermod.c:1567 src/usermod.c:1667 +#, c-format +msgid "%s: Cannot find group `%s' in service `%s', ignored.\n" +msgstr "%s: Kan inte hitta grupp \"%s\" i tjänst \"%s\", ignoreras.\n" + +#: src/useradd.c:1813 src/usermod.c:1583 +#, c-format +msgid "%s: Cannot add user to groups stored in LDAP database without DN.\n" +msgstr "" +"%s: Kan inte lägga till användare till grupper lagrad i LDAP-databas utan " +"DN.\n" + +#: src/useradd.c:1821 src/useradd.c:1839 src/useradd.c:1856 src/usermod.c:1591 +#: src/usermod.c:1610 src/usermod.c:1628 +#, c-format +msgid "%s: User not added to LDAP group `%s'.\n" +msgstr "%s: Användaren lades inte till i LDAP-gruppen \"%s\".\n" + +#: src/useradd.c:1908 +#, c-format +msgid "%s: USERADD_CMD fails with exit code %d.\n" +msgstr "%s: USERADD_CMD misslyckades med felkod %d.\n" + +#: src/userdel.c:54 +#, c-format +msgid "Usage: %s [-D binddn] [-P path] [-r [-f]] user\n" +msgstr "Användning: %s [-D binddn] [-P sökväg] [-r [-f]] användare\n" + +#: src/userdel.c:61 +#, c-format +msgid "" +"%s - delete a user and related files\n" +"\n" +msgstr "" +"%s - ta bort en användare och relaterade filer\n" +"\n" + +# Postspole? +#: src/userdel.c:63 +msgid " -r Remove home directory and mail spool\n" +msgstr " -r Ta bort hemkatalog och postkö\n" + +#: src/userdel.c:65 +msgid " -f Force removal of files, even if not owned by user\n" +msgstr "" +" -f Tvinga borttagning av filer även om inte ägda av " +"användaren\n" + +#: src/userdel.c:175 src/userdel.c:194 +#, c-format +msgid "%s: directory `%s' is in use by `%s'.\n" +msgstr "%s: katalog \"%s\" används av \"%s\".\n" + +#: src/userdel.c:262 src/usermod.c:1663 +#, c-format +msgid "%s: ERROR: cannot find group `%s' anymore!\n" +msgstr "%s: FEL: kan inte hitta grupp \"%s\" längre!\n" + +#: src/userdel.c:279 src/usermod.c:652 src/usermod.c:1683 +#, c-format +msgid "" +"%s: Cannot remove user from groups stored in LDAP database without DN.\n" +msgstr "" +"%s: Kan inte ta bort användare frÃ¥n grupper lagrade i LDAP-databas utan DN.\n" + +#: src/userdel.c:287 src/userdel.c:306 src/usermod.c:664 src/usermod.c:687 +#: src/usermod.c:1691 src/usermod.c:1710 src/usermod.c:1728 +#, c-format +msgid "%s: User not removed from LDAP group `%s'.\n" +msgstr "%s: Användare inte borttagen frÃ¥n LDAP-grupp \"%s\".\n" + +#: src/userdel.c:327 src/usermod.c:709 +#, c-format +msgid "%s: User not removed from group `%s'.\n" +msgstr "%s: Användare inte borttagen frÃ¥n grupp \"%s\".\n" + +#: src/userdel.c:537 +#, c-format +msgid "%s: account `%s' is currently in use.\n" +msgstr "%s: konto \"%s\" används för närvarande.\n" + +#: src/userdel.c:559 +#, c-format +msgid "%s: USERDEL_PRECMD fails with exit code %d.\n" +msgstr "%s: USERDEL_PRECMD misslyckades med felkod %d.\n" + +#: src/userdel.c:587 src/userdel.c:605 +#, c-format +msgid "%s: `%s' is not owned by `%s', not removed.\n" +msgstr "%s: \"%s\" ägs inte av \"%s\", inte borttagen.\n" + +#: src/userdel.c:593 src/userdel.c:615 +#, c-format +msgid "%s: warning: can't remove `%s': %s" +msgstr "%s: varning: kan inte ta bort \"%s\": %s" + +#: src/userdel.c:625 +#, c-format +msgid "%s: directory `%s' not removed.\n" +msgstr "%s: katalogen \"%s\" inte borttagen.\n" + +#: src/userdel.c:637 +#, c-format +msgid "%s: error deleting user `%s'.\n" +msgstr "%s: fel vid borttagning av användare \"%s\".\n" + +#: src/userdel.c:659 +#, c-format +msgid "%s: USERDEL_POSTCMD fails with exit code %d.\n" +msgstr "%s: USERDEL_POSTCMD misslyckades med felkod %d.\n" + +#: src/usermod.c:62 +#, c-format +msgid "" +"%s - modify a user account\n" +"\n" +msgstr "" +"%s - ändra ett användarkonto\n" +"\n" + +#: src/usermod.c:77 +msgid " -l login Change login name.\n" +msgstr " -l login Ändra inloggningsnamn.\n" + +#: src/usermod.c:78 +msgid " -m Move home directory to the new path\n" +msgstr " -m Flytta hemkatalog till den nya sökvägen\n" + +#: src/usermod.c:80 +msgid " -A group,... List of groups the user should be added to\n" +msgstr " -A grupp,... Lista grupper användaren skall läggas till i\n" + +#: src/usermod.c:82 +msgid " -R group,... List of groups the user should be removed from\n" +msgstr " -R grupp,... Lista grupper användaren skall tas bort frÃ¥n\n" + +#: src/usermod.c:89 +msgid " -u uid Change the userid to the given number\n" +msgstr " -u uid Ändra användarid till angivet nummer\n" + +#: src/usermod.c:92 +msgid " -L Locks the password entry for \"user\"\n" +msgstr " -L LÃ¥ser lösenordsposten för \"användare\"\n" + +#: src/usermod.c:94 +msgid " -U Try to unlock the password entry for \"user\"\n" +msgstr " -U Försök att lÃ¥sa upp lösenordspost för \"användare\"\n" + +#: src/usermod.c:149 src/usermod.c:853 src/usermod.c:948 +#, c-format +msgid "%s: Invalid numeric argument `%s'.\n" +msgstr "%s: Ogiltigt numeriskt argument \"%s\".\n" + +#: src/usermod.c:416 +#, c-format +msgid "%s: User not renamed in LDAP group `%s'.\n" +msgstr "%s: Användare har inte bytt namn i LDAP-grupp \"%s\".\n" + +#: src/usermod.c:433 +#, c-format +msgid "%s: User not renamed from LDAP group `%s'.\n" +msgstr "%s: Användare har inte bytt namn frÃ¥n LDAP-grupp \"%s\".\n" + +#: src/usermod.c:455 +#, c-format +msgid "%s: User not renamed in group `%s'.\n" +msgstr "%s: Användare har inte bytt namn i grupp \"%s\".\n" + +#: src/usermod.c:558 +#, c-format +msgid "%s: Cannot copy directory %s to %s.\n" +msgstr "%s: Kan inte kopiera katalog %s till %s.\n" + +#: src/usermod.c:565 +#, c-format +msgid "%s: Cannot rename directory %s to %s.\n" +msgstr "%s: Kan inte byta namn pÃ¥ katalog %s till %s.\n" + +#: src/usermod.c:1067 +#, c-format +msgid "%s: Account `%s' does not exist.\n" +msgstr "%s: Kontot \"%s\" finns inte.\n" + +#: src/usermod.c:1175 src/usermod.c:1240 +#, c-format +msgid "%s: `%s' is primary group name.\n" +msgstr "%s: \"%s\" är primära gruppnamnet.\n" + +#: src/usermod.c:1323 +#, c-format +msgid "%s: Account `%s' is currently in use.\n" +msgstr "%s: Konto \"%s\" används för närvarande.\n" + +#: src/usermod.c:1418 +#, c-format +msgid "%s: Shadow passwords required for -e and -f.\n" +msgstr "%s: Skugglösenord krävs för -e och -f.\n" + +#: src/usermod.c:1443 +#, c-format +msgid "%s: Cannot modify user in LDAP database without DN.\n" +msgstr "%s: Kan inte ändra användare i LDAP-databas utan DN.\n" + +#: src/usermod.c:1461 +#, c-format +msgid "%s: User not modified in LDAP database.\n" +msgstr "%s: Användaren har inte ändrats i LDAP-databas.\n" + +#: src/usermod.c:1780 src/usermod.c:1791 src/usermod.c:1817 +#, c-format +msgid "%s: Error: Cannot copy faillog entry: %s\n" +msgstr "%s: Fel: Kan inte kopiera faillog-post: %s\n" + +#: src/usermod.c:1806 +#, c-format +msgid "%s: Error: Cannot copy lastlog entry: %s\n" +msgstr "%s: Fel: Kan inte kopiera lastlog-post: %s\n" + +#: src/vipw.c:58 +#, c-format +msgid "Usage: %s [-g|-p|-s]\n" +msgstr "Användning: %s [-g|-p|-s]\n" + +#: src/vipw.c:66 +#, c-format +msgid "" +"%s - edit the password, group or shadow file\n" +"\n" +msgstr "" +"%s - redigera lösenords-, grupp- eller skuggfil\n" +"\n" + +#: src/vipw.c:69 +msgid " -g, --group Edit the /etc/group file\n" +msgstr " -g, --group Redigera filen /etc/group\n" + +#: src/vipw.c:70 +msgid " -p, --passwd Edit the /etc/passwd file\n" +msgstr " -p, --passwd Redigera filen /etc/passwd\n" + +#: src/vipw.c:71 +msgid " -s, --shadow Edit the /etc/shadow file\n" +msgstr " -s, --shadow Redigera filen /etc/shadow\n" + +#: src/vipw.c:164 +#, c-format +msgid "Cannot lock `%s': already locked.\n" +msgstr "Kan inte lÃ¥sa \"%s\": redan lÃ¥st.\n" + +#: src/vipw.c:278 +#, c-format +msgid "%s: no changes made\n" +msgstr "%s: inga ändringar gjorda\n" + +#: src/vipw.c:318 +#, c-format +msgid "Warning: cannot create backup file: %m\n" +msgstr "Varning: kan inte skapa säkerhetskopia: %m\n" + +#~ msgid "cannot open socket: %s" +#~ msgstr "kan inte öppna uttag: %s" + +#~ msgid "cannot enable socket to accept connections: %s" +#~ msgstr "kan inte aktivera uttag för att acceptera anslutningar: %s" + +#~ msgid "handle_request: request received (Version = %d)" +#~ msgstr "handle_request: begäran mottagen (Version = %d)" + +#~ msgid "cannot handle request version %d; current version is %d" +#~ msgstr "kan inte hantera begäran med version %d; nuvarande version är %d" + +#~ msgid "User %s: %s" +#~ msgstr "Användare %s: %s" + +#~ msgid "handle_request: exit (%d)" +#~ msgstr "handle_request: avslutad (%d)" + +#~ msgid "while accepting connection: %s" +#~ msgstr "när anslutning accepteras: %s" + +#~ msgid "Handshake has failed (%s)" +#~ msgstr "Handskakning misslyckades (%s)" + +#~ msgid "client has closed the GNUTLS connection" +#~ msgstr "klient har stängt GNUTLS-anslutningen" + +#~ msgid "cannot enable SSL encryption" +#~ msgstr "kan inte aktivera SSL-kryptering" + +#~ msgid "locale length in request too long: %d" +#~ msgstr "för lÃ¥ng längd pÃ¥ lokal i begäran: %d" + +#~ msgid "error while reading request locale: %s" +#~ msgstr "fel vid läsning av lokal i begäran: %s" + +#~ msgid "data length in request too long: %d" +#~ msgstr "datalängd i begäran för lÃ¥ng: %d" + +#~ msgid "error while reading request username: %s" +#~ msgstr "fel vid läsning av användarnamn i begäran: %s" + +#~ msgid "No username supplied" +#~ msgstr "Inget användarnamn angivet" + +#~ msgid "%s: ERROR: cannot find group `%s' anymore!.\n" +#~ msgstr "%s: FEL: kan inte hitta grupp \"%s\" längre!.\n" diff --git a/po/vi.gmo b/po/vi.gmo new file mode 100644 index 0000000000000000000000000000000000000000..15aff83e94a4689efde0b2bbeaa3e8641fd43025 GIT binary patch literal 70810 zcmc(|37nlpmHvN&iYAI63JQX}1VR$X4M|uHYe+&8lXOD5!(xcxru(M*n(n@xzI_v- zaREdI5tTtiM1;T~f*|0AChi?^9Gy`|#@%s(Ixe8&I<7PRzt1`KZg=T)qVxOTPrv=V zRd21QPMtb+s@{74{otqGRN%LGze3>%@X~_|h37t{P_OL{|7RD0I2B^_T_ml+VjSrE@Dd9sCA34cu>mKR+ShrJ(Y;9#s5~f{OQR@LX^f%um$| zn?TX$ArO)kehiBLk2~M}J3+P6b)fj?1EA{lc);f^@_u$c7~y{zcm#L__(Jeq;6!i- zcrdsNoCJOyRCa4I+v=21GcLHS<> zP6Mw7Rp0l4iuVL4dO!OmUd~yd^0@$1`a|Fgz&C)0fOml^&qqO}{~w_0bKp`h*9oBV zUkpazP;lP>(qx5?f@;S<2Rvz+=ksz<<$E2d@;m^lo?i;?CqdEU*~|U;ynx-H%5yb1 z9lRe@`M(C90RA@M(H-u;98`V!L8W&!sCN4ZsPg?36upWooIa~S@j)G&0zLqW|Gye= z;!5Yob3mG`FaoL`9|Kjc9|rfcE^zlLpq^g}s-9PaD(5``zX~3S`!C>8;E}65-dW&G z+&uwr1XbV91bh;lhx^b@mqQnWYTvhlMeq^uaPWtq+NaRv@?sjObUQ(XyAo8s4+Zy^ z!Q*lNZ@}rRy5Toe-_*aTLEnz!%_t07R4)9tBm7{VpjK z&Icn<{M!qPK39Q?|1R)Q@Z;d~!N)+g+moQ^bjVAcPv(Q7UmvLFH-nyfZ2=H*+b3oB+IjHoufHT0mLFNCipyK^9;G|1Ey<@ZbHNDz5~y%j2HXy+e4hdj0e=CC4*Re7dd>vJHy4AV$F<-w;DVFecuBf1AYQL8hjj#z^88T{H6q43aXr& zz+=H1K*jqosP_66co6uz@cbFQ{=5h(zY9R|!w4uk-UdzqKMyM1{{of&fqkCdY*5cT z0*(ZHN5D^k%Ktw>m1k1L`|F9I_QC!T}!-SAu$e4Jf*92i5MoK-KsA;56_VgU-LRL4{ib zs@$&zmF~l!==T*+@qP;)2_9bca-9x}9(@6C1Xb=&fC~3RQ29P($j8OW;EA}qz!SjN zfvVR-pu&GGxPJrA#(nrEZ|7xTgu4Px1m6Iv{oV?m4L%4epPz%u|A1lV+mpdbxL*QF zzOM$K4PFN-{yRYRj}L(dfL{Schwp*n`~7N8#}|Mq=NwS&c`+!uYy#DOHwE|opwj;` zDE{~!I1`*O;`69kpxW@ z2gQFc0S^R+!Gpjn!RLTCf-2A5;Pb%GfvWd+K=Hxv!CBzZo4tKjfuie`U=jQ@I0yVM z@M+-WEgpXwcrfk-pz^s0d@fi4#ec5?RgRlMg?kTpGPpCie*ucFPr2N2I;irk02RIm zRQqiK)h<_p;>)|i=YyXGp9y{!6d(Qs6#bsJ)%E;yL4_LuUjV)l6rbG2BX|gSCn)~-NWe$I3vfRMil2^q6>}PJHF!R_9aQ`ugLA>7UhVn6 z6jc4*4vNk@K*j$La4~q`YnnNyrUj=7?e*{IB zsjqWBI179s?#n>6`!-N=1$iMS; zS_w|Y{U%W1KMaaLz72{VPrug7^?XqLGX>Q1b3x_X4;~HP2rB-E0)7iT3in@v`=~c~ z_ywT+H-d_H9VkA206Yx*bnyQ+sCxVlcsh9ebzc8&Q2psjQ1NaB@11}g236imuJ>>i z@R_*(4wQU&D;RDE{aIF9kP&D#yQoYUe+Ji@+1!%oq;V zK>2?fJO}(GI3Jw-7U%Oi*opfSpz3k(4e$=Q6ubnyA6y3R|M#xfcY@0Q&7jJ4e{g>( zxSs?&@IUZIx2wDiyb$+$z#{mU;9qQ)B5De!-Gq(}J`8q&(c6%DU>#Js zKMTr#;?3^=GVrCi-v^fD|8@_z5uAtnLGWDgmtZG2=N9*WJ$Neae*{IBzkq$4@VDVOX7A%A3fxEynz^A_x-4vV;E(G5P&H{e}E&!+8=JMd>pvwO+sCd5x zF9K)3%kf(9B;32f3&2Be_wc=-!oL?>3;qaHxfb5Rm+M(vmF{C;1Ri$3%gec-+-2|> z@b%zC@ILTx@Ppv9z%PMI!0&*I!Q&qA`d7ipxZeX#1-}3m!C!+jz@y*i?bQK_uU-u* z{)fR+z`ua=z*8RddTs&5PhS9Mf`1O~6CUz*ycCS^e|>P@10II^E1>H41SmSpdf4;b z0xI8oz_Y;bfk%T!zTe&FfNJMgfui@cfeUfp2rB+J!Slf9f6&|ErJ$bQ z10DT+ihxDofez!7lL4s;#xHQ?Fcvvzv_S_+`lR=l zH-gIlpTYUyuff^iX`k})Rlt*R-wqxLJ_ah>uRzuN)K5EZ1tZ)a15X9N3yPl4`;6Cn z87TT)2P)ntK-FWysQ2d+K-K>uQ2GBoD0=MzRlcX}a(OX5;ML$F{C9)mx9Okt_80JJ|TRiEA93E-ihbGn=do{RhA;1Kw~;PGJfA6+khN5E0=aQvSP z`1H>^ohF0g+l#>k;Ju*g^K(%3nf_1Ck88lga9;<$2)r9qdb>c?^LyYd@M&N0a-IsF zgnJ{X_P-rG3j7yP;eQTJ2A}su_dg93UtI()1Fr`=!Eb@nz?uK-a^xa#KJM+{a`1=2 z|D=EM^1ljv3I3k}mx2d;$?1FvDEA$p`t6h8B5>iCy?w6-yKsLBRKACN#jyge#{F?n z^ndQZx*S*xs(vpA#TV}aj|F#wqQm}Qb^YcvQ2ewKJPZ6g@WtSx;OSuDF^~UZP~oGfC(M!0VR zmHvl8)#FLEPEv@z;d! z`14udnYeqvPH;PTDfnAZ>8<*%$GZkp{T>FD?vFvW+Y$fnxEwqe_p8Cv!B2vs&+kFC z&+*^$d|wLA!+mYQFMy}vKHxvR91B6wEdeco}#&coX*H5knkHGyH_&o5J;344tKlJ(O z5uoxt2|OC?2<{53{HO1^S=e0g8OseMDS-| z1pW?O3BKTG-maB^w}F%K{|fj5@HgN^-~m7P{!<23{;ia2JDWpVxw-$Iajt@XMgevG|uBuLK^X=b-5K9#H)8 zI4FMl9XJa-^;h06d%+pF?*X3!J_aiMe}Yd3{{(h`Px-aiZxyKL8$gx+m7vnS3sgNH z2agB$`;E7M5j+d`T5ukCE4Ui`E;t`N>9;;UZULW$`=3C?|1ubXe*zB!kN9uzKc|AT zajyc81YZXp1KtTP1Rn)Ok7xbP-BZ95ac>00&$oh#w*x#7{069c{1_A+4*I=^I}3a! z?n}WHU>~>={0OM_o%jb2zYJ8nZ3X9m_kgE?-vUnu5B{Uqe<`T`e=VqRcY})ejez_A z$?J78sCM4~s=U{OYOni2mE*gh_`LXMr{899DefJh>b3v>csj>|%Kt*}Rp6V!Bftax z*X?J=gU`i%7PtYt095;Y1ndX@2(AHp|KfVfD0nXJLkbg2o?i&6o!%Dk)8MJNp9C)h zkC`yR>iarS^|=GQ1pFK*{yciW3C2frzzc9M0^bVW0xI0hr%bT%{O`a=aPJ0RqUTSY zQ1}A)15k8+=xGyd9QZMKKkkM5PcXXv3KZR0b=K823BCx!_~q;oyM>c)gAX&%}KVsCM54D*OS@o?v{m2vmNr z0L7o*14YkS2Trj0{FR{cdjdQcJn0}W=Lq;L+&e+_gMS3oPTv3({x9GHaM5!n*tq;g zP<;E5fKPx5|DuB@SpQxKiY`}ylfg$o$-i%b3ODh&6HLy|0_DCCJQsWw*bROHRC`T+ z-UQ>*PH;NzA#ehCH2>}c^;^w#6Ydc`;J1nEwOqqo`W=G*)qZRL{|onn+}#+$e>si^ zz6<{ozyWYNcs+Ox*J<3p5!CMtu0^xoCVD%=wMj>CNh*Qvz27eCSAo#EMs!B=vrZQ|c&!p%p)si6!Pflnv?KY|*+ zzRUFv?qLJ_eS`ns5BKv4cP{ro3+}Z%`v&*wPag%p%_SKT|DNP#8W*fncqi9I-2X4w zt#G9E6x`~wv$&rD>Zd-r%kJFH0J|3s;kkaVa!CFkgTG|{6NJ(4tKdI?w}P{|-pl=U z;FrM@3HwLx-_7++t{-tR)D&(9598T-a6Rtq?mL$aO#WGr`kCK6>^5*LcqOI^1o;{!Idt48Ocy9u?b0Lxo-^c$CT$26zUG88q zO7c!WM0N7}4EI0AH3}{u56R}Ib6puiECUgNg&V=Qg?Nhy_xIc%3~GPka-I#~-WlQu z{*3$OT<_ujQSc4m-CXBzE#z9orQh#(_H{1(J_23~&H#6V(@8u2eK&-;5_}!kPk2xS z{~`ESz~>PDhxmVu`#*+=(v{A~{YY>N&L`a0!C!>9y8>$5xFFn5Qb2y^hBDNHzx-Bn zKZol8F3IG70yl&21rft$FD~MKA=fjx?#1s5T>3p7d<;CAbU$W3@IUxH{5OU$KMDBe zfS=|00fc{F2rqaB*ZEwpmLv0fA>l?d?yqtGFQoGy!S7Stzb@Q=iThuKd%>Y0zmrL0 z8u$Mh+AZ#Ft733!hduBey+KM)$eGo z4&3_92PfeFKyaT2{u};h;Wq;I;QlPvPOi7%z82K)L*UQ-*8bm#J0x$qfIRQynuF&L zc@}Z4;CeTHZ_-14XXDoR{##JLPjVg4{h!Q5dc?g0_b0i2hTlJf&&2Qb+}F526r3Ew zUW!{fo__anuiw9cM{qq7+;0!)Pq9;Q)5~=={(lM24v8Ovcj5OwuG_f3kn6Az=2zT5 z#QoXeR4)A%hG&c2Y5#}#|C`|dIqq-JJ>~x`us`>waj)MA;CFBz@6JL5&gA+K*E#s# z&sF1IzrW}DBGEbW5x>n``c3D$oBLx)`+49sT<^zk4R{aO2X5ukZw}Y3 zTrb4E2%G?34E~hsn_T)G$u*4s6!7^W-cs=A;r^H4<6INTPrqBZzm02%Yb95i>)-Kz z3D<|Y*YE9IZ{YqF;F91c|KD@H7Wb#XPjk)U`U>tdN&6V?|Bm}_aXlCJKjHpwt`~6W zcO2IayTiUk82t|8x{PZs?w5mGxDF-mcJQ(g<`3W!+~47PEB8}FJ-&te3f!Ln=W_jq z>uI=;3(w~Td>FrDxSq%JXXE!c_ygSQxL(0k;(AsHyD;GM!RO-t?_6uS^g9SV%5Mu> zxbNrs3+^+y{)77qxgHMB-^2ZRq;W8)-&qd!e>VOv4*vgw&pq5974m&7`0pQw$9*K% z?YLJ4zj?Ud6~g^9ephjSIM-EioQdbx`}?Dg(m;7`G^IAFFmZ8ppd792s}9B++PQJA!{ zzg()7qguJY+&vPNxEbC|f|Cl7|EAQUVsU+?S{kZEYf9bS)%xJb+WgbnNKa+3&BOkv zPKw#^Yl;h^^_9V%p24-zn&MzIP_diKqk+=p^4St?DGi%fC8`XTx<}SVA=_*!uPpX& zE7rFad$tuj*Az=@w-w8;Y7AE__LcjGtQw0do6FFkQj5&1zfv2CQ!5thwNh_c!7LOc z=&KHoP;U7Slxso-PRL*>M)T^>ba157T^gxW2cwbd#`0jK3`&DN{pFr$bEOoWSEE#ISS{8D&7k}CPHD)&MG*rGHN^;f$~{g#0@eG$>mwd9c8KAI%f(^Kdf12-Vi@}x9fr-F#ik8c zt0Pf$uz&0HmQlOQYUaw|5P5G%qg4i}E6G+jL?`x?H=j5%vely}4X>Q{)cEv@ni|@E zD~BtCBhk=swRgBQ5QRsU=*b=+{8xi4S-JV-F&&sE8rw0}tsaoRmtdGW-&+Fj<(!yfU!n(JFBuR#y za&Zs#II3jNU^Ll#^<=SyZiR}xY{9&hQBP$U`BDw>7qu*Itv)o=UmhTv((u+$cq`zt zxNL^Ys@)sCQi(9Ll9@=GtYS~LSSt~BBYkny&T?tEyD!v)E*kaL`bs^>#|@Q!@k}&X zq4yYbyrHdV^i?w2%X~cMj5wMVRc+g`;BGOymU){2yQtPuKSPc^@ zFF=!^u*xwZX;K8nCOU;{5iR1bsxyQRGSaNC_gW)`Flts>)$%Z%C~4wc?bP=zhK=S) ziO#PMGeD|9u}te`kY;dC%EvG`SiW3iVQ*zHq)@(m2o~@}7Kr@F{w;kKWJm)sp$?6Y zQ0=MIO6wW=JpoZSrC?Wv9JQ!K!qhW;41v5uZb(Y4oB3W&WysLqiwK`)Ejyjqijt0^ z`FLJq>+SG2BZ1hZHX|x;mX5L^8q_elWstU5ztxChMcx3%4sNLQ7EQ<{{71buY$y+l z#r(OY7Gi8bV=YSMNK3o5TGvQV#_|v0Oq0{-%x^(yD4z``G;bSrLi>ttaT{AXdKD@8WvJ@|TtnF2O3K-dVR;mfjnrx| z8Z^vot%X)J7FD};*(81k!aL@WkrlEfTL1g*GK zK^n%9{#-dt#e(yyTj)eJbo+kzPb#O8+dVA1hG=8zEY$A%rJBf2xLzt51mi%C4D&VcmK%oM)-pLC zaXETOW378&=eVOj*i%L(Qm`RrYbfTmxPN5EKC7%vF_ThjghU0X z4AciQFLfc(JWS=p?9H_hSelV-OLj!L_PJPejmN34ORz>^}))fdU<-ZddUJS zNtGfpx|`@qDr4O)_%pv5$chpo{I#_oN+h6)xiA^hlio!m50^*k!(lYAA%EIQKEWcg ziwMPy`)0PlO_G8bnmmW!O5NwiP4D>9n=}*AJiP1!Za!k%EiJK}%#fh>XwvtpA+q?{ zY9xuB7k$Ayk$s!u!Wjl-6k&|US2m+Sag$Orr-Jw-oB#-{_0^gWXsv=EXc!`8yr5(Z zwwk9#<>BG#uxo@d6MOza*Ul@fHeVPhG5*zts?~mDnwHTdN|P33++$#XF2RXC_{sfX*@J!Z-nC~aiG zHl-%yrpUFeaDl`_kS17Q+$XCj)9GaBFoGEveP&(2=k$RsLL;Ol!lq*- zaxE%EndfX^HD#(R{S58&auo2G%()OfRd_;eYe8D2LAKrXVVQ+cb0GrE7J|($Y1ztb zvIy}+o3%zYmP}gKL-sN@!f+$9z)6=?V;CXQ$3Bz7SYq@ZHtXG#I>LBLJ(sDH3Sp&y zP^|W0Yh!0y8^J25qQs(qZbW%R5*ANFqar(ebpz#Ky_QjBanQ=wf{wIUaTKfiKE-g! z#v)i1o3tu5zD&ETLt9fLMnq2}_blyIvd~PaK~+`G7e2_fFdWFpF~0nJumcY>*Dgmk zWwiQ-`LozOP}9~lJ#A&J>cwNX+%uv|@1W|PFH?|l9&g+f39+msU#gAlIk@`f_!3sgc4^ugg$?N5cO!E`e1G2smfwhEnjblH@;jm){O(=d83TD4;J%6SVGted}lfzh|- zyv#7BK?e4o5=#;bx?th5bt_kNcI{2@RSU-v+LmmsQCbeRi_+&|{8qQJEfrbm7uP-w zt)9ApO*l3Vj1d%4jW1}dm|zvHsa=LID;198VZ}P ztjx7ycn68&EB}`MD2>C+wv$$}5=cvO4qCFHAsbe0+C*3lw?ump{<7lgMuN9b{IcSP zy$HOdW8VC(B^NHV(LRwy2`$=I;j-1s=XEaK+gRShX9cl^R?b@CXKxe+LgmI1r4>14#!RA$fE zms@IWT~#*vX|G0@F~;*V`LmydNq^%5Hq?}QONb@e6^27iSafO{dgDi(3s;SAj9g8~ z@eh$n=<$q@s|S6=bGB{jL(Pxl!Z*aL$8sl*VcNaYYltBK*o&!Jk&O}F?@(ZB<+52Z z(&s)6jWw5+gR^t7iB&JYvuVq)*@WZvi$~l{I(r;%Ew|=SDG{?7DcqjM+9W}ro@B@G z_KD`gjup(MQK}N`Ic%&Fj4NbQpo@I9pd8>0#!i@L}2nQ)4`r zUBpaA#i8Lcdv%yDyPumBYno1KA8sgEQ+(M<8snSa_~LJH9lIFM0*&Uf=pd6Y|FJ)( zm)$_A_zT6bU@fI(wmX$=>zp=LWupb9IoZUd7~T+pHyZ-y=L{KvAM2QLmThcW>)Ait z#BJJoq=Ab0q&;H`NX%$q#vF&x28%re!5pP#Y?p!_Yk+T`2O-pEjR~Y?gt&@yF|iG1 zLiq$jH3Sn&=P3zSp>-ycY*KI$8RGk6nH5D5>+!Z}JFu)hW{XC*(YI$tG=+(EI&dpH zw@e4!K&{^2R2S6^9V4E@dxOY=&0LzoB~!afm_Vc~CsiuWE?ez5WP8nak*QUQ_DF*> zhwMj~#67TuL7kmOvJj+U!`#Xi6XIethN*{v%_tiiv6;eC3AX;#82fvIfjCZqN_AK1 z?A@`%8HrT{XBF=dHh&AP6m}|(K6ASa$OPTI9MOUJCZebHqFHgh`Sy!(>YjPKaI*QtJNhYTQaH;}2CL?XPOJ5$?v3$Y z_7H}3)wmEICQZ3rDm6Am8*#K9*>)^7B#{J&H!6=E3fc|!lz1zuWm;PY=*SzJt7PqL zW`D+GHC3|1Q!0C?Q_DbNz{W7Otpn>Z>ROd2sr$zXFyG73SJum9gM9>-1pOjmK{Y}y zP_8Xga@+oUCvmLN$jj`)A#)4j{Yk5pbCZ>$mH`vFG#}NiT9%q*rb3yOBnbmoX*YOQur>$EY(g;h%qNjHR#WPdPr1k5L?J#~ z08~uXPo>T{)p&IN;Yx4cNHlH!bPCNDZT7#h$uC-3-&o%`b5fT!s`0mBm?>ASx?zMN zseFb_z?5x`&ExD0P-V1yrHoJ{SsT|5Pu^`}9<4ReTGX*(5;0lb8`*k>Dd4uZUGbJL zTs433ypFDU=Pg;br0WvBu5kX6u8xJBozeL#Rz>romGf40Et$W1*}PTJ%GIl|{w}nF zYeS;RFPB1O8#c2@eyf3OsY4;sg{{7-Z*y+*I0*U^BJ4;bfxmJ=)lJj=G@+H^5E_US zAl{_HXi~Sm8DX(BNCg!u4%!$b=0fpm9FBo(j6~HD0_$cYjXw&niBMt_q%!z~VVgSX zL3raK^8kO}Hc=iJV%v#SrgNg$&lD(?MqbI@+EiemXQkc=$C^TzeG<%8!9T1!A!5Vk zsU)JczG+)%p&?joRWJp1238=ET2p*q0_!UcF;>f>6~ZTpCA!&+NcyQ6Xb5F*#We3_hjMW ziqf{nFqv(*LP3ZHf33dWw=pDX_}(m26O~kxv`kWK2-qw#+l9=?&2~YOR<@l@xeZl& ziqh_RkQKHtxrZ<(v<%c=wPm%?c^P+{sDTW=9V!;wHr(ZQRyAgshS$hAR?uWhsGP?R z%G-x3K|(!=YsG5Fe5k~$wuE!bhZLo3Rcv`Yu81o=Eg!R|m@PVbM<&hBbQtaA+e3_u zp}RSUn!QS@5~%#*<;<(m4TY_39qd*}QO)Kt9arlJso$$8g)0}EPR3_oU~y20o)S`ad_2C)Hu!hyrL4m8uq8T4A6rH2 z85(hUcpE4m#63e0rYR?A5slR=y(g8^yF>ReS)gf~g*B40&rxPeV=H4;XU#N#&f&B_K6;xbrNJ9I3=M8!t1EreG+z7dpl%AQ!k6@A$*3F_AHAQ z_df5>#-qs85W%-u2I8hgjrWkCQ#J=o=lpKP5s~8v7!1Z2VJ3%Zs4hg9RIr!6OS~ee zH^mWh9A5#cV8{3kKt!`QUNe2k&Z65CARomg47wqLM>}D(7)j{iA#@|ej+30F!l|(- zHrQ2tG)8*ZrbA_*=!LkkdE1;4XzI+(bQyXK;ObB~sA_A(sPsK{Cbl0IE0J4$7mXfSjv%ZzF7$&*JdWAQUENILu z%(Q_TnS_$K4_z+xOpV@gIQq`YGOg1`Z|g?MqGhD3buH`E)HH09E`)P*w8@!v^OpdL zAoGk&d4*MF-Uinz&)Le7^s4j}pF-!tWtGADZJ$x6nI}Uv+W5DP;9JJqCC9rqdcg_uv`IG!&^Ci4 zM4XdeZA+RZY&AnJlR%=j#itx`T8g}7ea*cNCz;F%Na0DcLe;02QcBs7=XfCL4wtE$ zio(f0Y^AL+DCV)mo#8wAVZld_8VdZcjRuyENmHJS&oW%4sdHJgrMbbLkS&kw)H=6f zZ==C*9V@z+r?NR>Ut;Uc9&v5Z*Y-Ah5oD`uXwt3FiQ@8S54;F<)(C4Rq}Y7l*g6gR zh=mQW6DC1J6E)0LG>UaGTc9ObQq^%yQ>7fb)7~nZYU7Z$ux5vCk0#khMCa!o<17+$ z->l1o`rN{5>xY^aU^pyss6=e!;eaBs6A%3GsOY@Tm9BfO){YKr08@A~Fg!D&@T%42 zlp#$qZ0SC4$ts&CnuR(slg_Xie5>G{D~mzp?S_fhCov?8#+z1okd4WH=9j493)*{M zgI-K33}EVQvg9NBWM=ej)JF1v|YUjsDOt3JB66U$gjVqV1j7k@DxG?>hqJ9^9+I%e-8e`8?N~yC`lWvWL zsp^wIMP;=PP76hjZzJmp$rFxyJ6UJGovMF5`jRJJrmOL(5F{*EW`78x_%EbZd&aqf~I~01dYk;|Nt)Q{23Ejb?2P z$;5|iDdUx<6Y8$4f8DY)Y#Zn~Wm~M{;;Z$IaV5dIFUpN{;)4iuKZH!tp#**!$lBN_ z>SZ2?z1I}ONeqgzN&o8lx0!$9lyT)hOoR<<*J|?t)01rbwXSk_lUw=p>))oNaMo@# zi-feE_)EWb7i{+2kF#7hr*2;yc6YF;0+LbiHN|25OB;oj48!(XU&d;aP7+6CWD3D# zwgw|CXUcSWxaTkgpXK7e1d;1@1{@3HK^=LB^CEkV*dnzcWLmUM+bC?lIQfU$inWI4 zDSxo)j9RL?W?xHA$RG2Dzpbob;h+lL?vXh*G-kW4*h^uy6*np}Nra)jAy~d4IHIGx zWu5bLixwooq2>y5WF+#%Pvs&Xi`S6L@HRVGGSi%BHmCqB@TUW!+|BzzSHspJsG2fi zjiCQ&7}dOCL!HAmw3jIpKHVrR!D@PXcGpuTWNZ<0OOW1(2ni{Y&!F2_#4M3C6s0jk zgqbKP&4vEXw+{toX_)ITsLqJ`drCuN24G6eR+CDNRa$OZ2G_8czO`K%W?+!q8Z)@P z|Coepl}VW01}jbM%B@kfdp9)++#NPbjI}>u&w&}|uqro()3GX1nME7PSRQNZ_DY?o zQV3h{m{sxiq{`^Zjdmk8S!igT%#OWy9?tNNA)>gF79uWg z8z-pIvN4P&u%1|m-(Ub~__I7-iiT)`Nc9fM(0 zjqhk>7h$b1Jk&i?f>Rvt%NU_`-Q0qGK_Rvdd4Q%6NbqGn}&Pqp9?Bk`6}Wn>67XxfyX>A3|J+vR6u)@(z^?_vfVuD+ZtiNz&7#S8t+ z+_}-vmYzDt`qiS7X3m*8d)A~?WtF73yoPdBJg?qcD|S`qMr;tNZ#;LT&u}KY9apaC zD$bW+W;#<`fC4l(nlo$m?Bc9binC`$vrnCS@~J1xnloz_0gJ1cIBSDm8g3SWinC6N zW}iOyq|;BBJ?o@dleCgh>|)nQjaMaPLz&;db)>>!o0Xm(_&7SV+uY~!Dr0%LpEabJ zgXNK#rTW>#9PF(#p(%EiO9OMG3pp%Gjm~uK%*~bJg&pViR;#^ibhbUZGf^_mp0s?) z@`Wi0X3v~8N#X?qK(TA<5LM9&?%*n~;`tl_NxvOr+{IZtYxWtD-<~z=j7b+47x^q&)m&EXJ|EFb=hWd? z2X^YMBU1^Z{7OQ?NxbHqV>CX zUbk-74ZC;VGT6Ho0;h$`Cf@Q4^HzZ~2bnKc{%Rm{z+Sg|=UvQCMt2NFgQIuY`GzWc z<`ATO_`cB(A{=+!pjIA=x@pb6sJ46O15ppO<;h_0?i~*fGA=0%>W7#7i&fB|{oDyRN%$oiR@|5w1-t>rb4mNN&d?XeM-pgpzI)2=$MmU2j1G zL>s9gX~C|__Qa9l(fbGcavX{!8-@_W!Uea4!f+_Mn-55i$|$da(GNx=FiuLszHHm7 zH|*YduPW_rvr(O|PnA#8jL%k2Qx#*}R*C3W+XqQ`*Hxj+{p!ylV&=Sc5%&7-R=sfq zij%lrhN8jk3y!E$x=Ywdu z#zK2Yc%+YoURC}x?@dl?k3O^0i(a=g`Qs+Zb5WkRos-p6S2XjvCx(RgGrTOlB|0jE zhNPC9grg3vR=fvuf8V1IJ-Qt-dRtrElj9;7E|An{cg(v#bZR9h!RJqUPvW;a>%Aeq z2bm|S{DFaR-1~wOELbz{P?z>+-e}!@qdO=Y0_q+KjnVr!UNQ(f?@U%5lFLaz)vBvS zVCx#5Fd`cc55n9EV=2Xk9H)<$ord(2;c3P|Q#R^*2i|qV=m*51yLWt&-e>)41bS;k zAbD*juw)mFqrNsuSmZA9Lqz_tg|}?2ye)H4>BpOsUbV=ioi@iF zQf4An9Y;kPlFtp@h=xqg>(!d=>onf_B$VrSH6)wk48|a_j51Cux@sH@g0ivm%~CTm zU7~mQ&h3)ZZ%%qZrdyC`Q@2>uCW5zr$f8Z>$e)^@lU~+uN06;MZ((R1eSi*aqAOc- zqie%a`c&xw@%HVgQv1&4`4jdRRp>8LEv^d(?%#DZ(dBHCM-YBIl%ltjb1wxt@p0h5W|!Y@%K&WcUh8|2Gl>gLkh3yRAJ=P zz=e$GKNeDyW;T2EY9O#*hux}HBS9ha4%DW_*x`}=VgN~Wz(fzyBDtb;kA6Tyjx>_y zHnc+IzXi~xW(;)-y153WupK&lPr&0%oR}d^DjHolK@J9~9grY>AR450^+v*@ zs%oCW%;I(`zVpF)D3%S0>&Sf_3d!B|b$zBhQ_&WELjfWWV4818g5<7WXM80lNNXm4 zx&n-CrDJ1{DQ~d!_AsB}3@lAqvp;47H<)%9TCG;9n=r}IJKKJeN1vpZ(v@?KsQI2c z_Jb~@@*gQU51}4GO@xhw8@)GSzjpj)mCb*wAY0j7`O-mCrJfi*3g3Hn;UD~D$}n%;V-BVqxR@_8UW6&pp?j9hfx91 zlxPWqBDS@6E-9mR{(B5vL~o(ajXkX9lUN|#y1o^=jD&E~%AuFnWIgc#i`i6|G^HBT z0QJz^)qh!DW~8-2kolcWVw1|b3KYhgWGEE1uR}fz_V(?%*ZYZz11nvXo@pLTFe#zn zADSo*7UqPlnx3>Y$h0V@`CHq1OXa=~F(2*3Sd|uvrD$GRna1ueMDnodvC~4Wdg^X4 zy?ew>E7fQ-+6T+-GP^dD%0!tgK=-OcJggiQ&V`v`=6!5%G+wCwA5uSbE3C6->!sAo zv(m}9(+4z>#yFN8kfyov8468Au#u(atD#209-0D0eGf8yECOH*Md^!aiel<6n!{9O zq-K*OHZ7WRNkN0z{Luc!bYj^TQXeb5Ala#&dP-Bm>i1!pXdGi<2pNP-!zV9bkO$P@ z($OwwLUy;dLBsu0V_SUzBeuToO;|Kc%xP{IXU4w0sy%$N7^X^n{=*jO#JX8_Xs%BO zrMRAkh0rY7n73UzIV~wCgk1tBDi51~A%cG>6mCk}OrBVCc3y=wN3~JUQftG>%-8rp zK*&GaAM*q8zVt{J9}S%A}p=_8pNRy-D2iGzme@~xj{KIH43r(@j8v!{_9eYY8NSpsusE+XBV5PJ(H4K z7c)uOgj}j<#xFPSWoCqIJb@DaBE>lRQwSOQlSkIhb^SV#0Yj{RFbB-2AjV@!Yh<{n zcl3Uzjg?^RM6xVAR$A%ErUG@*ZY`}sd!^*;bDFuX)~N5)eV(9V^2;*P9tOr%bCrBz z*?IlgiM5-wtqavW0Vn@m=(!L$aq#``xZ=S<^$}!i56M}9V7FE<# z)Q12obBjX_A)3B-!WxGwUPyvFe1!3JaMsRTyJ-3469}^G(TAAlN*iWrH#Ws03b2I6 z+O26#5dDFYdEF#4S-QQ>S2n|%ry5G@KDib)dzJ^&#N=+*YQu;q!I=G23Pp1E8?#K5 zU=d|B>fWq*VI}J2LIAJ~|CycCoegr_KK|ObGP0z)T2{vS+{iyc(HO3sP;V33JFF~S z*$i3-PNjub)q)0Qwz}5gUDeO)@6u6H^P0tDhexKK>BF2cFk3of^oGGNp;=}K8L48p zq1|?TG+v}kr@l7sq{SXHR^G7JhESOlpwnO|e6HB4`*^HcNnMh8qWBqGtLeTu2KAMs zu_IXVU66EDNl|kF@;uTI^761^gH@!V)uQa9d>W#4 zL%WTH1!@ynY17-1MJt0@%T={O&bW-ku13n4o{V+Yte6QEry_SZto|nTZxK94`F8xx zpo9s=bZh1#l76{datvn+mlV`XnH@dd!rt_?npg_O+A(J9ho#i#7fuP4`Ftlr3su}V zQO5BSGedq444Oi_z8>uCIi<+<>g`j)IV$+@qODc?lvYNddP*^oLaoCLQ3`^aF7&)R zrOJGEnn=9!J_HN_Gd7H=JpD>S{X`B+FL1nx8D`d6uJ0?cDj~Y{DT#(cXuwKR7|v8L?rI402iS}g zul|+duh5WV?%O=A36o5%eAPH5RYH?=O)?okp#k<0R)59}6qdhVCZi8Z9b(5^+^kN< zxKLKyT=pJQUx!EyVu7n<72H0chPY0rU1vTB)FK7FK)J6ez=7JeweQ83Axn#PunvY= z3VcP7klL?fItlEIQ4Di0UEucIekyH}!8&zE+yk{fi0(Pfl$4ETRQ2`q z>8%uGNvZ_gAMwvdDlBY zCV0%Ot!Qe4x7R4%b28pajKASFVQJT7N0L$Y?p8Xfi}iR7R8k=3FYTMuLa92W@mE}* zK=tg@Ab!LvKC<1|8YchV%tnn;tLoE9Ao`|n;|+Vb{?9T+g0j>}D>p+i(_Ff8Lzh52+yQenc8XLdaD7X=Vi|HCh8wY(Tw$x| zvYvz-m!S((=w2*Q{gE5DPm}D%gc^Wfm<%VvQjoUaa&eA-q z&;>d)2G59-xGS~^DT6JWu&rBX%}c??V?(|Z%vvNNgyLQ0bB-E=6pBqw_0}}rB(e^1 zV(l^N{_MTsU3AHmeM?KPNRBV9lyAl?l^a*u6=+Y1gyN)$G;iLCi60NNQa$d1G7P=G z=|>|w%waRM&&qlfxFr)XW6*J3wztkUxWVZ0Ywy;Vxm;u=z3u;xGUU2!5c90*UJ+gq z5q-mFy7INl=vCJLTrkjLXzz+Z=wH$RfRrn*{v!X_*OCdM1H%q*@ zk>Z@Pp98aztKVdiYn-zCu;XKNJ4evy>;tQuVq`ygvX`;^(~t!$4N^2VE;q6va|f0Z<599Xywfl{7$lQ}kgHZD z8QXWny{3I;Rz4q&nloxBSXVmQ2gM;Dg{?Pnj7H(K7g0kMI+;MahS1^_v*vouO|tf$ zY4yq%4?BKiC}|OF-N$F`O2-Wd<6K;AV3+*dCsq<=m2u?XP44M0yWZFa~l&#gB z?e-zXEWd}n0ZrW3$hTeoCYhAqrm!ieHq>@pkwR%Q+xo}IKuwlTcGT zx9s@oYG8AP8;P?tR=YnCCRaAwg$?X`c2*n-GHnT&?&`nqq8X!*vcT9&rwmOd0B*^C z2QOrpog9!>c%LV{yA$X-X3$_vH_c)tAIZz;1*Rn-#qYu7uGw^|dWIC$Ywlr^ZQ55p zvsRBTWaf2^uMqM^Um~?ltJoMD^K3R}OPnFW<nEbps|GZUl zQaMAYj{IoKymx!T_xXe@qg?3le1UDZY!G<9fS~qcQd}O8kvzO#**fE-mZACfPDgL3 zMPp)t7xpgA)*5$?0M4-unKxFzRr0ZI&#h@PMoQk|%Vf5WD;v_-^%f>%AtpLovbkX| zEqmiDQEE8LneAGYYY$XvlhPQK%UXa;CJyG>Mz*wgpLnbCWa+fWq->3Id^F#iv>IwR zA6p2$L_0kh$$XOS-(Z}UO_f1E9&V*2XeJdWlrDm_PD@84<b2Lv40@3*tWI-C#A%job=M2*4whCk*w$m8EU+=74z`I zJOdi4isISIrM?3h%CR&a)+MRbVYD!$a~veQZUi;ha2fz4_HRUHhU|tfMJ7UZuhP_k zF|E_|C!w5P`A|JKHjYu+EJ;*yDHn;R!Dh8s{Kt%AOTYJ)nx@x@$h1*C6eWoim!?S_ zXbhp|Ktk+bZ@O)7Rr!+_LY3<5W3h=%IqBG1Msx*MjHb-N8+N##=GpP_I6x{e21n!N z+$3Auz^abneb!ksls>nSB8lN#l~mW*D@5=#YAkWbp~D03p%jF-(s;yYhWz9j(R!L& zkkjoo;hPFFk2S>8iL052nfFn~6Pp8Xbhx6jgk$|sjI7PCeZGq6U&G8q9%q(;X`8dm z$>2=h89@w3`11I`!B~H1^5QSZI*kRhlQIgvwR6nPQnV^pcUR zq1ixMZ_%sc>S39nA-iVnl?6Eu>`j&(VQqW4(#fSCQi3Bn4kXlTljbq;Y{l9~?`R~J z*bs_ZW(M{g0aBih*YnwhJ!_Y)E>?o||X&7}8c=tr$%YjnCr6#=eQKW!$> zr$gvvyS28N*$#$ZSH|9+V+;f_k6SPD+wKn5>e*tc;(LdQ32Vz8v17bR>hn0nVkq zQ9(>SR;;F1uw+8IM`zi!C=ztP9d5KdJ{(;ZXJMV#g0(KVJ$F$SE157t>%BX< zG&Af3*(l#2&rG!~Pw7VSzV6um6Sm!oGscM7xUbgtz0#*8VD9dQ9xW)9E{%?n zvbS(*15+eh6VAlRG`iIz#7VQygl(*|hqcePs*cVU63TpkC1Hw8sx3msM^%h7c4B0b19j6|1jUE#-y-q%`X3kbs>x8B^TbJ-ua*r=f0@kcc_z zuS_$qJ&Y%Djl*H_}FGiSJ;nOu0`-JWIWYPIkPDOX!Ror|=vxf~0_dy0@9WY6$;c_G)B021WB0Ud>q z_Hgf-X6w@aXT5=dNNbEpsN1nmnr#-%>n1+Y03Rk>GyK!IISQu3a|@NTMMGu6n`Wco zE~aJc;15)CI}t+_td*K%H7PX82Qu8t6dI*QtP|`la~Ux=Lh4dpP0Hz~aouSNKl?8$ z*E1@?7s^Hw2iI#aeBqmo( ztrm|cRhKqyg*A=nGxusvJ)mLQHGr;$j|EE=%bdMOZ{}fnw$mvcVTqYv)hdFTA7W6|!N{}7Gd zMzTDJI(A)2+UJd4(Ge}4cL~u`&t;>p&BVKK$?l!6pC2vQz4JX?1Y0qBMOUK)@FCJg zR>MHw7_{Z)P<6>Y1#IfJNTL(88}A0~-N}g;7toLCKx}WWZFQ9ram#A zDyGwzA0cZsgJLF|yv7_hYhGUZ;Atz!jv=6+w)ZxDww6dJV*GtCev%`el(Pn7QEK{@yp3@bZm$@1#(iGhFp>$@FE3-5K zdw+w)oz{)C$Mk|&-*ZAzo>1jo!WN=iCD&|n3{o(xo=as!Z0SW?JChMv!cJ|>oo%*hd)SQ3x6uK$GP7A53UsA? zK2hBn#FH6drWFW1rd=@+O^Y$$!)Esl7UqxckVUg{bkxP-R>&%|Tvh1E?H`^S<;H`? z6=gqIDsF`tBrHYQQb?AV8WT)M?Zy@OIGt1{%-AVBRn}^mf4i38D;c972#YGN-{c1d zUMAAJ<=W6GJ7Bvn5io&ZY0T7Ay{sHel}tJBj!BeIKixed&P@6^_F^4$W=2hg)!C%9 z&Uv!VD4^`e;e$eG<;RdXAEoerdVQUm9<@>af>%5mlI4)smjbVMp?#=+?bWiti8>nO)L_3 zHq0&KK>66xZ|bA*;EpR!J_KZ}Kd_obMwH zBE!ax(K`p&y~4bW4GsE6dnlc~>jqJ7Qzy;r#AE=vm7zTZOM=_hkd#Fw#n|4_s@>Rb z@FC0`Ok{mGNFx5)&}L>_qRf_8x=1Ld<(uK2_@f^_hs%ef=y&sO9u14S-%f$ao>)P2 z9~vdGwAR^Zgh+~!DO*nRyO43MBvWFi0W^vaBEZg+c{j=D+Mac8;Y+-9mByktUc9o9 zjqM+jZxK5vDdS5*RoAI_Dbs`#(#0yQ7PLM;hWcJ%Ls;v^H-hFtq@V@4}At@=ZJupmDZ$7ci?OOUkfG zeziB(JM*2QDJ(0)xn5%>3S)TtC&UUHxU%HUb$LsOh6#JKA!sh2M(NY|)E0}_g^{)% zDO{2scb|EXtL{u}kJvTTNE~I6E0GC=#&TFOrCaeJBfXmFluyb^pJ+*$vNR^2lc`Cw zTl9D}#rZ#zMlP#7UGn_Wm>I&ZqgOLX8Q&zcOp(rf9mG#Z<7?;zBT{xq@cz#loz2Yj zy0WZYC^PIvkj2HVf6eqH&rSw0iEGYDEp#qiRvE0@v1F8hR%m_PBHcqe0)xqeBjFr* zsna(5)kH~B4-v?h-T$WPL9ifgY@mn}H-QFe%~}J?`Q8`*gamXjQ4zNtNtm6+_9rA9 z&?s(G+U-r?y-S)e$<-JI_a*~oYban4o<`lrc>A1TDDF}dR>?7aGr~?z<}2}{hmBBS zy6h}S$7R~tNMrvZd^(b=%ctkfH3ipa&z3iQ<|>{ZXl!nXehzy~5YB!;&E2WQ4xF2` zJeh_e4$kPxj_-Rli%lXb74?8_TcgoiBe^~ovUgiD8iKw3;7WM5H`B%EHrA+-el8!H z1RVuvlU`W3(V8aT@NgMB2Ep4W6e^KUE}1Ze6-9C+OmbJ8BRkoyH%WP=D#`-2{ zHH0%-X};W*eIM19$wEQJ9yygP9*Y-eEwR}cDOcntu1Uny_MZJ5iVKX>b#Xp!pwHHy}84-ntu9H zC4P3yl*=jV(ok;8##iq$EAcH4^Eq$Hsu@Xt-D3)Tq!U`Hlwn(n)JPT4O{ITLW?_{? zn?V{ZNf4bGO|sQo+4=apm!x3H$7Q3o@`M$g%$l)}*?Ak0OB2?~8i||Pcf7H$&hU(I z)E)_Ms>a5d+uS;w2e*C5NVjjTOKCYur#x6>=)bEtJo>>RUryxyz3^y5Gg9f>BicEz zIg_63+m1P&$=aNay6nu(av2o~7PVY7&7-`_>n=#D9$)y56@*$PygTtA-!?+sY`Q^WeA)ok&cRn-vH%~E~hP#FnSo>LkG$_U&dGy)- zI;o|DDu}{_uS#N>Ux$FXYi;X7ZKINFiY2ZMJ|l1Z1`kjC1S$If39h7)Yl@rKu8}#q zWyj(k6wruf1;OF6L+dOzggudzb__tX-Q3)%cUM&8)OX+S(+C zSD{I@F@0``-k+TXk)J3g)d)n-&mzdYZQFq#LU<|$>L3%*fda2 z3du~InEh(zzL3Ri&aJvrmInS|BHA13ttk%cUrUzDe{TXx%icX^;;j-AAJ|$EJY+^o zIAeM6VXlXZk8x`)X`S0~@mOMNL-N_*HN}M?gsG{a->xZM6vs0wNcd=QXovRP(6XwV zwn2whRcjl1Td~$M!Uh`z?890{T{}M`d}l-+V;u!YZaVB{^tISCp5&oQWX|(!n*wTxy}F<7e#i~9&Z=R_A$J6Bu*dQ(a#X9f z$uo1)E0;1_Hx^LSjIrL5Yn$dqSCUP6NY*p;l6R^$Wi0rEdD>0Oytia)jAjUtKGUEV zwNJuT<*+iK-EI(IK68?snnQ|Vv2N}p&P2YGujlobYbFwXK-Ie;{-nRBG&E6bNBKE; zn-p3mF<7ZhoJdhTL0o*)-F;5T~p#H7h_PU&Qt+qTO`zWrpt->{~KN-TKd zc`~IIZdnau;b7Be(^FNJ9iJRWbA){6vx z^908zB8O{on0DZahHZI&Q(D;T(@pdahK|kg8=9_KjYZSi?wwbw#Tpi!Y?^8MoQ@P4 zI|1I~Zcf055iiJ`lUb6bYmtmE3#b!p-&zQ^DqaHgS!(v&dIosgD#cXTKQwhMOzXig zP~~0=c3Xw*K~pCoyiIrXkt*`J7ckRG#(32_9WxzihmoC{i(%c*7udT*x-onVX#s^Z z6zTT2$lS2=Rvl(EP-rZ;O3Ta1*)E#-2K2r~skO@`pK^1s=9f8=v?$*~3SR$+Lkd!}@YQmwY72RZ$y-u*U4l_, 2006-2010. +# +msgid "" +msgstr "" +"Project-Id-Version: pwdutils 3.2.10\n" +"Report-Msgid-Bugs-To: kukuk@thkukuk.de\n" +"POT-Creation-Date: 2011-05-10 16:46+0200\n" +"PO-Revision-Date: 2010-10-03 18:38+1030\n" +"Last-Translator: Clytie Siddall \n" +"Language-Team: Vietnamese \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: LocFactoryEditor 1.8\n" + +#: lib/authentication.c:46 src/passwd.c:840 +#, c-format +msgid "%s: PAM Failure, aborting: %s\n" +msgstr "%s: PAM bị lỗi nên hủy bỏ : %s\n" + +#: lib/authentication.c:100 +#, c-format +msgid "Enter login(%s) password:" +msgstr "Gõ mật khẩu đăng nhập(%s):" + +#: lib/call_script.c:68 src/vipw.c:89 +#, c-format +msgid "Cannot fork: %s\n" +msgstr "Không thể tạo tiến trình con: %s\n" + +#: lib/call_script.c:76 +#, c-format +msgid "waitpid (%d) failed: %s\n" +msgstr "waitpid (%d) bị lỗi: %s\n" + +#: lib/check_name.c:70 +#, c-format +msgid "Can't compile regular expression: %s\n" +msgstr "Không thể biên dịch biểu thức chính quy: %s\n" + +#: lib/chown_dir_rec.c:54 lib/copy_dir_rec.c:147 lib/group.c:389 +#: lib/user.c:495 lib/user.c:759 src/grpck.c:277 src/grpck.c:654 +#: src/pwck.c:284 src/pwck.c:554 src/pwck.c:916 src/pwconv.c:206 +#: src/useradd.c:564 src/useradd.c:1036 src/useradd.c:1111 src/vipw.c:295 +#, c-format +msgid "Cannot change owner/group for `%s': %s\n" +msgstr "Không thể thay đổi chủ/nhóm đối với « %s »: %s\n" + +#: lib/copy_dir_rec.c:77 lib/group.c:369 lib/user.c:475 lib/user.c:739 +#: src/grpck.c:259 src/grpck.c:634 src/pwck.c:266 src/pwck.c:536 +#: src/pwck.c:896 src/pwconv.c:198 src/useradd.c:547 src/usermod.c:543 +#: src/vipw.c:189 +#, c-format +msgid "Can't create `%s': %m\n" +msgstr "Không thể tạo « %s »: %m\n" + +#: lib/copy_dir_rec.c:99 +#, c-format +msgid "Cannot create directory `%s': %s\n" +msgstr "Không thể tạo thÆ° mục « %s »: %s\n" + +#: lib/copy_dir_rec.c:113 lib/copy_dir_rec.c:199 lib/group.c:378 +#: lib/user.c:484 lib/user.c:748 src/grpck.c:267 src/grpck.c:643 +#: src/pwck.c:274 src/pwck.c:544 src/pwck.c:905 src/pwconv.c:215 +#: src/useradd.c:554 src/useradd.c:1046 src/useradd.c:1117 src/vipw.c:287 +#, c-format +msgid "Cannot change permissions for `%s': %s\n" +msgstr "Không thể sá»­a đổi quyền hạn cho « %s »: %s\n" + +#: lib/copy_dir_rec.c:138 +#, c-format +msgid "Cannot create symlink `%s': %s\n" +msgstr "Không thể tạo liên kết tượng trÆ°ng « %s »: %s\n" + +#: lib/copy_dir_rec.c:185 src/vipw.c:230 src/vipw.c:238 +#, c-format +msgid "Cannot copy `%s': %s\n" +msgstr "Không thể sao chép « %s »: %s\n" + +#: lib/copy_dir_rec.c:215 +#, c-format +msgid "Warning: ignoring `%s', not a regular file\n" +msgstr "" + +#: lib/copy_xattr.c:51 lib/copy_xattr.c:69 +#, c-format +msgid "Cannot get attributes for `%s': %m\n" +msgstr "Không thể lấy thuộc tính về « %s »: %m\n" + +#: lib/copy_xattr.c:93 lib/copy_xattr.c:113 +#, c-format +msgid "Cannot get attribute %s of `%s': %m\n" +msgstr "Không thể lấy thuộc tính %s về « %s »: %m\n" + +#: lib/copy_xattr.c:127 +#, c-format +msgid "SELinux not enabled, ignore attribute %s for `%s'.\n" +msgstr "ChÆ°a bật SELinux nên bỏ qua thuộc tính %s về « %s ».\n" + +#: lib/copy_xattr.c:133 +#, c-format +msgid "Cannot set attribute %s for `%s': %m\n" +msgstr "Không thể đặt thuộc tính %s về « %s »: %m\n" + +#: lib/copy_xattr.c:154 +#, c-format +msgid "%s: Can't get context for `%s'" +msgstr "%s: Không thể lấy ngữ cảnh đối với « %s »" + +#: lib/copy_xattr.c:161 +#, c-format +msgid "%s: Can't set context for `%s'" +msgstr "%s: Không thể đặt ngữ cảnh đối với « %s »" + +#: lib/get_ldap_password.c:39 src/chpasswd.c:224 src/chsh.c:516 +#: src/passwd.c:881 +#, c-format +msgid "Enter LDAP Password:" +msgstr "Gõ mật khẩu LDAP:" + +#: lib/group.c:305 src/groupadd.c:506 src/groupdel.c:365 src/grpck.c:820 +#, c-format +msgid "Cannot lock group file: already locked.\n" +msgstr "Không thể khoá tập tin nhóm: đã khoá.\n" + +#: lib/group.c:334 lib/group.c:409 lib/user.c:440 lib/user.c:514 +#: lib/user.c:704 lib/user.c:778 src/grpck.c:227 src/grpck.c:294 +#: src/grpck.c:599 src/grpck.c:674 src/pwck.c:234 src/pwck.c:301 +#: src/pwck.c:571 src/pwck.c:861 src/pwck.c:936 src/useradd.c:582 +#, c-format +msgid "Can't open `%s': %m\n" +msgstr "Không thể mở « %s »: %m\n" + +#: lib/group.c:340 lib/user.c:446 lib/user.c:710 src/grpck.c:233 +#: src/grpck.c:605 src/grpunconv.c:225 src/pwck.c:240 src/pwck.c:510 +#: src/pwck.c:867 src/pwconv.c:224 src/pwunconv.c:172 src/useradd.c:538 +#: src/vipw.c:249 src/vipw.c:258 src/vipw.c:272 +#, c-format +msgid "Can't stat `%s': %m\n" +msgstr "Không thể lấy trạng thái về « %s »: %m\n" + +#: lib/group.c:435 lib/group.c:478 lib/group.c:492 lib/user.c:540 +#: lib/user.c:591 lib/user.c:605 lib/user.c:803 lib/user.c:873 src/grpck.c:703 +#: src/pwck.c:965 +#, c-format +msgid "Error while writing `%s': %m\n" +msgstr "Gặp lỗi khi ghi « %s »: %m\n" + +#: lib/group.c:503 +#, c-format +msgid "Group not found (and not deleted): %s\n" +msgstr "Không tìm thấy nhóm (thì chÆ°a xoá nó): %s\n" + +#: lib/group.c:511 lib/group.c:540 lib/user.c:623 lib/user.c:653 +#: lib/user.c:883 lib/user.c:912 src/grpck.c:715 src/grpck.c:723 +#: src/pwck.c:977 src/pwck.c:985 +#, c-format +msgid "Error while closing `%s': %m\n" +msgstr "Gặp lỗi khi đóng « %s »: %m\n" + +#: lib/group.c:520 lib/user.c:632 lib/user.c:893 +#, c-format +msgid "Error while writing to disk `%s': %m\n" +msgstr "Gặp lỗi khi ghi vào đĩa « %s »: %m\n" + +#: lib/group.c:530 lib/user.c:642 lib/user.c:903 +#, c-format +msgid "Error while syncing to disk `%s': %m\n" +msgstr "Gặp lỗi khi đồng bộ hoá tới đĩa « %s »: %m\n" + +#: lib/group.c:547 lib/user.c:661 lib/user.c:919 src/grpck.c:472 +#: src/grpck.c:730 src/pwck.c:468 src/pwck.c:734 src/pwck.c:992 +#, c-format +msgid "Warning: cannot create backup file `%s': %m\n" +msgstr "Cảnh báo : không thể tạo tập tin sao lÆ°u « %s »: %m\n" + +#: lib/group.c:552 lib/user.c:666 lib/user.c:923 +#, c-format +msgid "Error while renaming `%s': %m\n" +msgstr "Gặp lỗi khi thay đổi tên « %s »: %m\n" + +#: lib/group.c:693 lib/user.c:1094 +#, c-format +msgid "LDAP information update failed: %s\n" +msgstr "Lỗi cập nhật thông tin LDAP: %s\n" + +#: lib/group.c:702 +#, c-format +msgid "Cannot modify/add NIS group entries.\n" +msgstr "Không thể thêm/sá»­a đổi mục nhập nhóm NIS.\n" + +#: lib/group.c:707 lib/user.c:1103 +#, c-format +msgid "Unknown service %d.\n" +msgstr "Không rõ dịch vụ %d.\n" + +#: lib/libldap.c:1364 lib/libldap.c:1429 lib/libldap.c:1484 lib/libldap.c:1610 +#: lib/libldap.c:1752 lib/libldap.c:1992 +#, c-format +msgid "Authentication failure.\n" +msgstr "Lỗi xác thá»±c.\n" + +#: lib/libldap.c:1760 +#, c-format +msgid "Cannot find base ou for new users.\n" +msgstr "Không tìm thấy được OU (đơn vị tổ chức) cÆ¡ bản cho người dùng mới.\n" + +#: lib/libldap.c:1763 +#, c-format +msgid "Base DN for user account `%s' is \"%s\".\n" +msgstr "DN (tên khác biệt) cÆ¡ bản cho tài khoản « %s » là « %s ».\n" + +#: lib/libldap.c:2000 +#, c-format +msgid "Cannot find base ou for new groups.\n" +msgstr "Không tìm thấy được OU (đơn vị tổ chức) cÆ¡ bản cho nhóm mới.\n" + +#: lib/libldap.c:2003 +#, c-format +msgid "Base DN for group `%s' is \"%s\".\n" +msgstr "DN (tên khác biệt) cÆ¡ bản cho nhóm « %s » là « %s ».\n" + +#: lib/logging.c:65 +#, c-format +msgid "" +"Cannot open logging plugin:\n" +"%s\n" +msgstr "" +"Không thể mở phần bổ sung ghi lÆ°u :\n" +"%s\n" + +#: lib/logging.c:81 lib/logging.c:99 +#, c-format +msgid "" +"Cannot find symbol `%s':\n" +"%s\n" +msgstr "" +"Không tìm thấy được ký hiệu « %s »:\n" +"%s\n" + +#: lib/logging.c:140 +#, c-format +msgid "Error setting up logging subsystem!\n" +msgstr "Gặp lỗi khi thiết lập hệ thống phụ ghi lÆ°u.\n" + +#: lib/parse_crypt_arg.c:87 +#, c-format +msgid "Can't open %s for reading: %s\n" +msgstr "Không thể mở %s để đọc: %s\n" + +#: lib/parse_crypt_arg.c:95 +#, c-format +msgid "Unable to obtain entropy from %s\n" +msgstr "Không thể lấy en-tợ-rô-pi từ %s\n" + +#: lib/parse_crypt_arg.c:110 +#, c-format +msgid "Unable to generate a salt, check your crypt settings.\n" +msgstr "Không thể tạo ra một salt, hãy kiểm tra lại thiết lập mật mã.\n" + +#: lib/parse_crypt_arg.c:144 +#, c-format +msgid "No support for blowfish compiled in, using MD5.\n" +msgstr "ChÆ°a biên dịch để hỗ trợ blowfish nên dùng MD5.\n" + +#: lib/parse_crypt_arg.c:149 +#, c-format +msgid "No support for %s available, using DES.\n" +msgstr "Không có sẵn hỗ trợ %s nên dùng DES.\n" + +#: lib/passwd_nisplus.c:306 +#, c-format +msgid "Could not determine hostname!\n" +msgstr "Không thể quyết định tên máy.\n" + +#: lib/passwd_nisplus.c:322 +#, c-format +msgid "Can't find %s's secret key\n" +msgstr "Không tìm thấy được khoá bí mật của %s\n" + +#: lib/passwd_nisplus.c:338 lib/passwd_nisplus.c:359 +#, c-format +msgid "Could not get public key for %s!\n" +msgstr "Không thể lấy khoá công cho « %s ».\n" + +#: lib/passwd_nisplus.c:348 +#, c-format +msgid "Could not determine the NIS+ root server!\n" +msgstr "Không thể quyết định máy phục vụ NIS+ gốc.\n" + +#: lib/passwd_nisplus.c:366 +#, c-format +msgid "Could not create conversion key!\n" +msgstr "Không thể tạo khoá chuyển đổi.\n" + +#: lib/passwd_nisplus.c:378 +#, c-format +msgid "DES encryption failure\n" +msgstr "Lỗi mật mã DES\n" + +#: lib/passwd_nisplus.c:390 +#, c-format +msgid "rpc.nispasswd not running on %s?\n" +msgstr "rpc.nispasswd chÆ°a chạy trên %s ?\n" + +#: lib/passwd_nisplus.c:411 +#, c-format +msgid "ERROR: password incorrect, try again\n" +msgstr "LỖI: mật khẩu không đúng, hãy thá»­ lại.\n" + +#: lib/passwd_nisplus.c:413 lib/passwd_nisplus.c:481 +#, c-format +msgid "" +"ERROR: %s\n" +" password not changed\n" +msgstr "" +"LỖI: %s\n" +"\tchÆ°a thay đổi mật khẩu\n" + +#: lib/passwd_nisplus.c:429 lib/passwd_nisplus.c:456 +#, c-format +msgid "DES decryption failure!\n" +msgstr "Lỗi giải mật mã DES.\n" + +#: lib/passwd_nisplus.c:514 +#, c-format +msgid "ERROR: Unknown error, don't know what happened\n" +msgstr "LỖI: lỗi không rõ, không biết xảy ra làm sao\n" + +#: lib/passwd_nisplus.c:519 +#, c-format +msgid "NIS+ password information changed for %s\n" +msgstr "Thông tin mật khẩu NIS+ đã thay đổi đối với %s.\n" + +#: lib/passwd_nisplus.c:521 +#, c-format +msgid "NIS+ credential information changed for %s\n" +msgstr "Thông tin xác thá»±c NIS+ đã thay đổi đối với %s.\n" + +#: lib/passwd_nisplus.c:590 +#, c-format +msgid "NIS+ passwd table not found: %s\n" +msgstr "Không tìm thấy bảng mật khẩu NIS+: %s\n" + +#: lib/passwd_nisplus.c:606 +#, c-format +msgid "User not found in NIS+ table.\n" +msgstr "Không tìm thấy người dùng trong bảng NIS+.\n" + +#: lib/print_error.c:30 src/rpasswd.c:120 src/rpasswdd.c:139 +#, c-format +msgid "Try `%s --help' or `%s --usage' for more information.\n" +msgstr "" +"Hãy thá»­ câu lệnh « %s --help » (trợ giúp) hoặc « %s --usage » (cách sá»­ dụng) " +"để xem thêm thông tin.\n" + +#: lib/print_version.c:31 src/rpasswd.c:73 src/rpasswdd.c:90 +#, c-format +msgid "" +"Copyright (C) %s Thorsten Kukuk.\n" +"This is free software; see the source for copying conditions. There is NO\n" +"warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n" +msgstr "" +"Tác quyền © năm %s của Thorsten Kukuk.\n" +"ChÆ°Æ¡ng trình này là phần mềm tá»± do; xem mã nguồn để tìm điều kiện sao chép.\n" +"KHÔNG CÓ BẢO HÀNH GÌ CẢ, THẬM CHÍ KHÔNG CÓ BẢO ĐẢM ĐƯỢC NGỤ Ý\n" +"KHẢ NĂNG BÁN HAY KHẢ NĂNG LÀM ĐƯỢC VIỆC DỨT KHOÁT.\n" + +#: lib/remove_dir_rec.c:74 +#, c-format +msgid "Cannot remove file `%s': %s\n" +msgstr "Không thể gỡ bỏ tập tin « %s »: %s\n" + +#: lib/remove_dir_rec.c:83 +#, c-format +msgid "Cannot remove directory `%s': %s\n" +msgstr "Không thể gỡ bỏ thÆ° mục « %s »: %s\n" + +#: lib/selinux_utils.c:80 +#, c-format +msgid "Couldn't get security context `%s': %s\n" +msgstr "Không thể lấy ngữ cảnh bảo mật « %s »: %s\n" + +#: lib/selinux_utils.c:88 +#, c-format +msgid "Couldn't get default security context: %s\n" +msgstr "Không thể lấy ngữ cảnh bảo mật mặc định: %s\n" + +#: lib/selinux_utils.c:97 +#, c-format +msgid "Couldn't set default security context to `%s': %s\n" +msgstr "Không thể lập ngữ cảnh bảo mật mặc định thành « %s »: %s\n" + +#: lib/selinux_utils.c:117 +#, c-format +msgid "Couldn't reset default security context to `%s': %s\n" +msgstr "Không thể lập lại ngữ cảnh bảo mật mặc định thành « %s »: %s\n" + +#: lib/user.c:81 +#, c-format +msgid "Can't find the NIS master server: %s\n" +msgstr "Không tìm thấy được máy phục vụ chủ NIS: %s\n" + +#: lib/user.c:88 +#, c-format +msgid "rpc.yppasswdd not running on NIS master %s.\n" +msgstr "rpc.yppasswdd chÆ°a chạy trên máy phục vụ chủ NIS %s.\n" + +#: lib/user.c:94 +#, c-format +msgid "rpc.yppasswdd running on illegal port on NIS master %s.\n" +msgstr "" +"rpc.yppasswdd đang chạy trên cổng không được phép trên máy phục vụ chủ NIS %" +"s.\n" + +#: lib/user.c:411 src/groupmod.c:434 src/pwck.c:1082 src/useradd.c:1630 +#: src/userdel.c:569 src/usermod.c:1373 +#, c-format +msgid "Cannot lock password file: already locked.\n" +msgstr "Không thể khoá tập tin mật khẩu; đã được khoá.\n" + +#: lib/user.c:615 +#, c-format +msgid "User not found (and not deleted): %s\n" +msgstr "Không tìm thấy người dùng (nên chÆ°a xoá bỏ họ): %s\n" + +#: lib/user.c:858 +#, c-format +msgid " Error while writing `%s': %m\n" +msgstr " Gặp lỗi khi ghi « %s »: %m\n" + +#: lib/user.c:982 +#, c-format +msgid "Error while changing the NIS data.\n" +msgstr "Gặp lỗi khi thay đổi dữ liệu NIS.\n" + +#: lib/user.c:991 +#, c-format +msgid "Error while changing the NIS+ data.\n" +msgstr "Gặp lỗi khi thay đổi dữ liệu NIS+.\n" + +#: src/chage.c:56 +#, c-format +msgid "" +"Usage: %s [-D binddn][-P path][-m mindays][-M maxdays][-d lastday][-I " +"inactive][-E expiredate][-W warndays] user\n" +msgstr "" +"Sá»­ dụng: %s [-D binddn][-P đường_dẫn][-m ngày_thiểu][-M ngày_đa][-d " +"ngày_cuối][-I bị_động][-E ngày_hết_hạn][-W ngày_cảnh_báo] ngườ_dùng\n" + +#: src/chage.c:58 +#, c-format +msgid " %s -l user\n" +msgstr " %s -l người_dùng\n" + +#: src/chage.c:66 +#, c-format +msgid "" +"%s - change user password expiry information\n" +"\n" +msgstr "" +"%s: thay đổi thông tin hạn dùng mật khẩu cho người dùng\n" +"\n" + +#: src/chage.c:70 src/chfn.c:112 src/chpasswd.c:70 src/chsh.c:65 +#: src/gpasswd.c:94 src/groupadd.c:64 src/groupdel.c:64 src/groupmod.c:63 +#: src/passwd.c:401 src/useradd.c:67 src/userdel.c:68 src/usermod.c:67 +msgid " -D binddn Use dn \"binddn\" to bind to the LDAP directory\n" +msgstr " -D binddn Dùng « binddn » của DN để đóng kết tới thÆ° mục LDAP\n" + +#: src/chage.c:73 src/chfn.c:115 src/chpasswd.c:73 src/chsh.c:68 +#: src/passwd.c:403 src/pwconv.c:54 src/pwunconv.c:54 +msgid " -P path Search passwd and shadow file in \"path\"\n" +msgstr "" +" -P đường_dẫn Quét theo đường dẫn này tìm kiếm trong tập tin mật " +"khẩu và tập tin bóng\n" + +#: src/chage.c:76 src/chfn.c:88 src/chfn.c:123 src/chpasswd.c:79 src/chsh.c:74 +#: src/gpasswd.c:93 src/groupmod.c:77 src/passwd.c:400 src/usermod.c:91 +msgid " --service srv Use nameservice 'srv'\n" +msgstr " --service dịch_vụ \tSá»­ dụng dịch vụ đặt tên này\n" + +#: src/chage.c:77 src/chfn.c:86 src/chfn.c:124 src/chsh.c:75 +msgid " -q, --quiet Don't be verbose\n" +msgstr " -q, --quiet Đừng xuất chi tiết\n" + +#: src/chage.c:78 src/chfn.c:89 src/chfn.c:125 src/chpasswd.c:80 src/chsh.c:76 +#: src/expiry.c:52 src/groupadd.c:74 src/groupdel.c:70 src/groupmod.c:78 +#: src/grpck.c:68 src/grpconv.c:43 src/grpunconv.c:63 src/newgrp.c:66 +#: src/pwck.c:68 src/pwconv.c:56 src/pwunconv.c:56 src/useradd.c:92 +#: src/userdel.c:74 src/usermod.c:96 src/vipw.c:72 +msgid " --help Give this help list\n" +msgstr " --help Hiển thị trợ giúp này\n" + +#: src/chage.c:79 src/chfn.c:90 src/chfn.c:126 src/chpasswd.c:81 src/chsh.c:77 +#: src/expiry.c:53 src/groupdel.c:71 src/grpck.c:69 src/grpconv.c:44 +#: src/grpunconv.c:64 src/newgrp.c:67 src/pwck.c:69 src/pwconv.c:57 +#: src/pwunconv.c:57 src/userdel.c:75 src/vipw.c:73 +msgid " -u, --usage Give a short usage message\n" +msgstr " -u, --usage Hiển thị thông điệp cách sá»­ dụng ngắn\n" + +#: src/chage.c:80 src/chfn.c:91 src/chfn.c:127 src/chpasswd.c:82 src/chsh.c:78 +#: src/expiry.c:54 src/groupadd.c:76 src/groupdel.c:72 src/groupmod.c:80 +#: src/grpck.c:70 src/grpconv.c:45 src/grpunconv.c:65 src/newgrp.c:68 +#: src/pwck.c:70 src/pwconv.c:58 src/pwunconv.c:58 src/useradd.c:94 +#: src/userdel.c:76 src/usermod.c:98 src/vipw.c:74 +msgid " -v, --version Print program version\n" +msgstr " -v, --version In ra phiên bản của chÆ°Æ¡ng trình\n" + +#: src/chage.c:81 src/chfn.c:94 src/chfn.c:130 src/chpasswd.c:83 src/chsh.c:81 +#: src/passwd.c:409 +msgid "Valid services are: files, nis, nisplus, ldap\n" +msgstr "" +"Dịch vụ hợp lệ:\n" +" • files\t\tcác tập tin\n" +" • nis\t\tNIS\n" +" • nisplus\t\tNIS+\n" +" • ldap\t\tLDAP\n" + +#: src/chage.c:109 +#, c-format +msgid "Minimum:\t%ld\n" +msgstr "Tối thiểu :\t%ld\n" + +#: src/chage.c:110 +#, c-format +msgid "Maximum:\t%ld\n" +msgstr "Tối đa :\t%ld\n" + +#: src/chage.c:111 +#, c-format +msgid "Warning:\t%ld\n" +msgstr "Cảnh báo :\t%ld\n" + +#: src/chage.c:112 +#, c-format +msgid "Inactive:\t%ld\n" +msgstr "Bị động :\t%ld\n" + +#: src/chage.c:113 +#, c-format +msgid "Last Change:\t\t" +msgstr "Lần đổi cuối:\t\t" + +#: src/chage.c:115 +#, c-format +msgid "Unknown, password is forced to change at next login\n" +msgstr "Không rõ, mật khẩu bị ép buộc thay đổi vào lúc đăng nhập kế tiếp\n" + +#: src/chage.c:117 src/chage.c:123 src/chage.c:129 src/chage.c:135 +#, c-format +msgid "Never\n" +msgstr "Không bao giờ\n" + +#: src/chage.c:120 +#, c-format +msgid "Password Expires:\t" +msgstr "Mật khẩu hết hạn dùng:\t" + +#: src/chage.c:126 +#, c-format +msgid "Password Inactive:\t" +msgstr "Mật khẩu bị động:\t" + +#: src/chage.c:133 +#, c-format +msgid "Account Expires:\t" +msgstr "Tài khoản hết hạn dùng:\t" + +#: src/chage.c:147 +msgid "Minimum Password Age" +msgstr "Thời gian hoạt động tối thiểu cho mật khẩu" + +#: src/chage.c:154 src/chage.c:170 src/chage.c:186 +#, c-format +msgid "Input is no integer value\n" +msgstr "Dữ liệu nhập vào không phải là giá trị số nguyên\n" + +#: src/chage.c:156 src/chage.c:172 src/chage.c:188 +#, c-format +msgid "Negative numbers are not allowed as input (except -1)\n" +msgstr "Không cho phép nhập số âm (trừ -1)\n" + +#: src/chage.c:163 +msgid "Maximum Password Age" +msgstr "Thời gian hoạt động tối đa cho mật khẩu" + +#: src/chage.c:179 +msgid "Password Expiration Warning" +msgstr "Cảnh báo hết hạn dùng mật khẩu" + +#: src/chage.c:195 +msgid "Password Inactive" +msgstr "Mật khẩu bị động" + +#: src/chage.c:203 +msgid "Last Password Change (YYYY-MM-DD)" +msgstr "Lần thay đổi mật khẩu cuối cùng (NNNN-TT-Ng)" + +#: src/chage.c:217 src/chage.c:237 +#, c-format +msgid "Invalid date\n" +msgstr "Ngày tháng không hợp lệ\n" + +#: src/chage.c:223 +msgid "Account Expiration Date (YYYY-MM-DD)" +msgstr "Ngày hết hạn dùng tài khoản (NNNN-TT-Ng)" + +#: src/chage.c:340 src/chfn.c:478 src/chsh.c:337 +#, c-format +msgid "Only root is allowed to specify another path\n" +msgstr "Chỉ cho phép ngÆ°Æ¡i chủ (root) ghi rõ đường dẫn khác\n" + +#: src/chage.c:370 src/chfn.c:439 src/chpasswd.c:171 src/chsh.c:320 +#: src/gpasswd.c:197 src/groupadd.c:376 src/groupdel.c:224 src/groupmod.c:300 +#: src/passwd.c:523 src/useradd.c:1403 src/userdel.c:454 src/usermod.c:978 +#, c-format +msgid "Service `%s' not supported.\n" +msgstr "Dịch vụ « %s » không được hỗ trợ.\n" + +#: src/chage.c:395 src/chfn.c:510 src/chpasswd.c:208 src/chsh.c:363 +#: src/chsh.c:370 src/expiry.c:247 src/gpasswd.c:230 src/groupadd.c:413 +#: src/groupdel.c:249 src/groupmod.c:333 src/grpck.c:806 src/grpconv.c:100 +#: src/grpunconv.c:197 src/newgrp.c:155 src/passwd.c:589 src/pwck.c:1068 +#: src/pwconv.c:170 src/pwunconv.c:144 src/rpasswd.c:491 src/rpasswdd.c:1339 +#: src/useradd.c:1511 src/userdel.c:479 src/usermod.c:1014 src/vipw.c:410 +#, c-format +msgid "%s: Too many arguments.\n" +msgstr "%s: Quá nhiều đối số.\n" + +#: src/chage.c:402 +#, c-format +msgid "%s: Do not include \"l\" with other flags\n" +msgstr "%s: Đừng bao gồm « l » cùng với cờ khác nào\n" + +#: src/chage.c:427 src/chfn.c:531 src/chsh.c:397 src/expiry.c:267 +#: src/gpasswd.c:265 src/groupadd.c:450 src/groupdel.c:278 src/groupmod.c:362 +#: src/passwd.c:656 src/useradd.c:1545 src/userdel.c:507 src/usermod.c:1048 +#, c-format +msgid "%s: Cannot determine your user name.\n" +msgstr "%s: Không thể quyết định tên người dùng của bạn.\n" + +#: src/chage.c:446 src/chfn.c:566 src/chsh.c:431 src/userdel.c:527 +#, c-format +msgid "%s: User `%s' is not known to service `%s'.\n" +msgstr "%s: Người dùng « %s » không phải được dịch vụ « %s » nhận ra.\n" + +#: src/chage.c:449 src/chfn.c:555 src/chfn.c:569 src/chsh.c:421 src/chsh.c:434 +#: src/passwd.c:675 src/passwd.c:696 src/userdel.c:530 +#, c-format +msgid "%s: Unknown user `%s'.\n" +msgstr "%s: Người dùng lạ « %s ».\n" + +#: src/chage.c:467 +#, c-format +msgid "Only an administrator is allowed to change aging information.\n" +msgstr "Chỉ cho phép quản trị thay đổi thông tin về thời gian hoạt động.\n" + +#: src/chage.c:483 +#, c-format +msgid "This system does not support shadow accounts.\n" +msgstr "Hệ thống này không hỗ trợ tài khoản bóng.\n" + +#: src/chage.c:489 +#, c-format +msgid "This account does not have a shadow entry.\n" +msgstr "Tài khoản này không có mục nhập bóng.\n" + +#: src/chage.c:535 +#, c-format +msgid "You can only list your own aging information.\n" +msgstr "" +"Bạn chỉ có quyền liệt kê thông tin thời gian hoạt động của mình thôi.\n" + +#: src/chage.c:542 src/expiry.c:306 src/passwd.c:1019 +#, c-format +msgid "%s: Failed to drop privileges: %s\n" +msgstr "%s: Lỗi bỏ quyền: %s\n" + +#: src/chage.c:554 +#, c-format +msgid "No aging information available for %s.\n" +msgstr "Không có thông tin thời gian hoạt động sẵn sàng đối với %s.\n" + +#: src/chage.c:574 +#, c-format +msgid "Changing aging information for %s.\n" +msgstr "Đang thay đổi thông tin thời gian hoạt động đối với %s.\n" + +#: src/chage.c:580 src/chage.c:667 +#, c-format +msgid "Aging information not changed.\n" +msgstr "ChÆ°a thay đổi thông tin hoạt động.\n" + +#: src/chage.c:623 +#, c-format +msgid "Lastday is no date and no integer value >= -1\n" +msgstr "" +"Ngày cuối cùng không phải là một ngày tháng, cÅ©ng không phải là một giá trị " +"số nguyên ≥ -1.\n" + +#: src/chage.c:643 +#, c-format +msgid "Expiredate is no date and no integer value >= -1\n" +msgstr "" +"Ngày hết hạn không phải là một ngày tháng, cÅ©ng không phải là một giá trị số " +"nguyên ≥ -1.\n" + +#: src/chage.c:652 +#, c-format +msgid "Error while parsing options.\n" +msgstr "Gặp lỗi khi phân tích các tùy chọn.\n" + +#: src/chage.c:698 +#, c-format +msgid "Error while converting to shadow account.\n" +msgstr "Gặp lỗi khi chuyển đổi sang tài khoản bóng.\n" + +#: src/chage.c:716 +#, c-format +msgid "Error while changing aging information.\n" +msgstr "Gặp lỗi khi thay đổi thông tin hoạt động.\n" + +#: src/chage.c:726 +#, c-format +msgid "Aging information changed.\n" +msgstr "Thông tin hoạt động đã được thay đổi.\n" + +#: src/chfn.c:71 +#, c-format +msgid "" +"Usage: %s [-f name] [-r room] [-w work_phone]\n" +" [-h home_phone] [-o other] [-q] [-u] [-v] [user]\n" +msgstr "" +"Sá»­ dụng: %s [-f họ_tên] [-r số_phòng] [-w điện_thoại_chỗ_làm]\n" +"\t[-h điện_thoại_ở_nhà] [-o khác] [-q] [-u] [-v] [người_dùng]\n" + +#: src/chfn.c:79 src/chfn.c:109 +#, c-format +msgid "" +"%s - change user name and information\n" +"\n" +msgstr "" +"%s — thay đổi tên người dùng và thông tin\n" +"\n" + +#: src/chfn.c:81 src/chfn.c:117 +msgid " -f full-name Change your real name\n" +msgstr " -f họ_tên Thay đổi họ tên thật của bạn.\n" + +#: src/chfn.c:82 +msgid " -r room Change your office room number\n" +msgstr " -r phòng Thay đổi số thứ tá»± phòng của văn phòng của bạn.\n" + +#: src/chfn.c:83 +msgid " -w work_phone Change your office phone number\n" +msgstr " -w điện_thoại_chỗ_làm \tThay đổi số điện thoại của bạn ở chỗ làm\n" + +#: src/chfn.c:84 +msgid " -h home_phone Change your home phone number\n" +msgstr " -h điện_thoại_ở_nhà \t\tThay đổi số điện thoại của bạn ở nhà\n" + +#: src/chfn.c:85 +msgid " -o other Change the undefined portions of the GECOS field\n" +msgstr "" +" -o khác Thay đổi những phần trường GECOS không được định nghÄ©a\n" + +#: src/chfn.c:101 +#, c-format +msgid "" +"Usage: %s [-D binddn] [-P path] [-f name] [-o office] [-p office-phone]\n" +" [-h home-phone][-m other] [-q] [-u] [-v] [user]\n" +msgstr "" +"Sá»­ dụng: %s [-D binddn] [-P đường_dẫn] [-f tên] [-o văn_phòng]\n" +"\t[-p điện_thoại_văn_phòng] [-h điện_thoại_ở_nhà][-m khác]\n" +"\t[-q] [-u] [-v] [người_dùng]\n" + +#: src/chfn.c:118 +msgid " -o office Change your office room number\n" +msgstr " -o văn_phòng Thay đổi số thứ tá»± phòng của văn phòng của bạn\n" + +#: src/chfn.c:119 +msgid " -p phone Change your office phone number\n" +msgstr " -p điện_thoại \tThay đổi số điện thoại văn phòng của bạn\n" + +#: src/chfn.c:120 +msgid " -h home-phone Change your home phone number\n" +msgstr " -h điện_thoại_ở_nhà \t\tThay đổi số điện thoại của bạn ở nhà\n" + +#: src/chfn.c:121 +msgid " -m other Change the undefined portions of the GECOS field\n" +msgstr "" +" -m khác Thay đổi những phần trường GECOS không được định nghÄ©a\n" + +#: src/chfn.c:165 +#, c-format +msgid "Enter the new value, or press ENTER for the default\n" +msgstr "Gõ giá trị mới, hoạc bấm phím Enter để đặt mặc định\n" + +#: src/chfn.c:171 +msgid "Full Name" +msgstr "Họ tên" + +#: src/chfn.c:173 +#, c-format +msgid "\tFull Name: %s\n" +msgstr "\tHọ tên: %s\n" + +#: src/chfn.c:176 +msgid "Room Number" +msgstr "Số phòng" + +#: src/chfn.c:178 +#, c-format +msgid "\tRoom Number: %s\n" +msgstr "\tSố phòng: %s\n" + +#: src/chfn.c:181 +msgid "Work Phone" +msgstr "Điện thoại chỗ làm" + +#: src/chfn.c:183 +#, c-format +msgid "\tWork Phone: %s\n" +msgstr "\tĐiện thoại chỗ làm: %s\n" + +#: src/chfn.c:186 +msgid "Home Phone" +msgstr "Điện thoại ở nhà" + +#: src/chfn.c:188 +#, c-format +msgid "\tHome Phone: %s\n" +msgstr "\tĐiện thoại ở nhà: %s\n" + +#: src/chfn.c:191 +msgid "Other" +msgstr "Khác" + +#: src/chfn.c:193 +#, c-format +msgid "\tOther: %s\n" +msgstr "\tKhác: %s\n" + +#: src/chfn.c:255 +#, c-format +msgid "%s: The characters '%s\"' are not allowed.\n" +msgstr "%s: Không cho phép dùng ký tá»± « %s\" ».\n" + +#: src/chfn.c:261 src/chsh.c:204 +#, c-format +msgid "%s: Control characters are not allowed.\n" +msgstr "%s: Không cho phép dùng ký tá»± điều khiển.\n" + +#: src/chfn.c:331 src/chsh.c:257 +#, c-format +msgid "%s: Don't know what I should do.\n" +msgstr "%s: Không biết nên làm gì vậy.\n" + +#: src/chfn.c:377 src/chfn.c:395 src/chfn.c:407 src/chfn.c:451 src/chfn.c:460 +#: src/gpasswd.c:296 src/passwd.c:614 src/passwd.c:628 +#, c-format +msgid "%s: Permission denied.\n" +msgstr "%s: Không đủ quyền.\n" + +#: src/chfn.c:586 src/chsh.c:451 src/passwd.c:712 +msgid "Unknown user context" +msgstr "Không rõ ngữ cảnh người dùng" + +#: src/chfn.c:588 +#, c-format +msgid "%s: %s is not authorized to change the finger information for %s.\n" +msgstr "%s: %s không được xác thá»±c để thay đổi thông tin finger đối với %s.\n" + +#: src/chfn.c:601 +#, c-format +msgid "SELinux is in permissive mode, continuing.\n" +msgstr "SELinux đang chạy trong chế độ không bắt buộc, đang tiếp tục.\n" + +#: src/chfn.c:619 +#, c-format +msgid "You cannot change the finger information for `%s'.\n" +msgstr "Bạn không thể thay đổi thông tin finger đối với « %s ».\n" + +#: src/chfn.c:626 +#, c-format +msgid "Changing finger information for %s.\n" +msgstr "Đang thay đổi thông tin finger đối với %s.\n" + +#: src/chfn.c:658 +#, c-format +msgid "%s: Invalid name: `%s'\n" +msgstr "%s: Tên không hợp lệ: « %s »\n" + +#: src/chfn.c:666 +#, c-format +msgid "%s: Invalid room number: `%s'\n" +msgstr "%s: Số phòng không hợp lệ: « %s »\n" + +#: src/chfn.c:674 +#, c-format +msgid "%s: Invalid work phone: `%s'\n" +msgstr "%s: Số điện thoại chỗ làm không hợp lệ: « %s »\n" + +#: src/chfn.c:682 +#, c-format +msgid "%s: Invalid home phone: `%s'\n" +msgstr "%s: Số điện thoại ở nhà không hợp lệ: « %s »\n" + +#: src/chfn.c:690 +#, c-format +msgid "%s: `%s' contains illegal characters.\n" +msgstr "%s: « %s » chứa ký tá»± không được phép.\n" + +#: src/chfn.c:716 +#, c-format +msgid "Finger information not changed.\n" +msgstr "ChÆ°a thay đổi thông tin finger.\n" + +#: src/chfn.c:724 +#, c-format +msgid "Error while changing finger information.\n" +msgstr "Gặp lỗi khi thay đổi thông tin finger.\n" + +#: src/chfn.c:734 +#, c-format +msgid "Finger information changed.\n" +msgstr "Thông tin finger đã được thay đổi.\n" + +#: src/chpasswd.c:59 +#, c-format +msgid "Usage: %s [-D binddn] [-P path] [-e] [-c des|md5|blowfish] [file]\n" +msgstr "" +"Sá»­ dụng: %s [-D binddn] [-P đường_dẫn] [-e] [-c des|md5|blowfish] [tập_tin]\n" + +#: src/chpasswd.c:67 +#, c-format +msgid "" +"%s - update password entries in batch\n" +"\n" +msgstr "" +"%s — cập nhật các mục nhập mật khẩu theo bó\n" +"\n" + +#: src/chpasswd.c:75 +msgid "" +" -c, --crypt Password should be encrypted with DES, MD5 or blowfish\n" +msgstr " -c, --crypt Mật khẩu nên được mật mã bằng DES, MD5 hay blowfish\n" + +#: src/chpasswd.c:77 +msgid " -e, --encrypted The passwords are in encrypted form\n" +msgstr " -e, --encrypted Những mật khẩu có dạng được mật mã\n" + +#: src/chpasswd.c:278 +#, c-format +msgid "%s: line %ld: missing new password\n" +msgstr "%s: dòng %ld: thiếu mật khẩu mới\n" + +#: src/chpasswd.c:287 +#, c-format +msgid "%s: line %ld: unknown user %s\n" +msgstr "%s: dòng %ld: không rõ người dùng %s\n" + +#: src/chpasswd.c:318 src/gpasswd.c:425 +#, c-format +msgid "Cannot create salt for standard crypt" +msgstr "Không thể tạo salt cho mật mã tiêu chuẩn" + +#: src/chpasswd.c:334 src/gpasswd.c:460 +#, c-format +msgid "Cannot create salt for MD5 crypt" +msgstr "Không thể tạo salt cho mật mã MD5" + +#: src/chpasswd.c:350 src/gpasswd.c:441 +#, c-format +msgid "Cannot create salt for blowfish crypt" +msgstr "Không thể tạo salt cho mật mã blowfish" + +#: src/chpasswd.c:380 +#, c-format +msgid "%s: line %ld: cannot update password entry\n" +msgstr "%s: dòng %ld: không thể cập nhật mục nhập mật khẩu\n" + +#: src/chpasswd.c:395 +#, c-format +msgid "%s: errors occurred, %ld passwords not updated\n" +msgstr "%s: gặp lỗi nên chÆ°a cập nhật %ld mật khẩu\n" + +#: src/chsh.c:54 +#, c-format +msgid "" +"Usage: %s [-D binddn] [-P path] [-s shell] [-l] [-q]\n" +" [--help] [--usage] [--version] [user]\n" +msgstr "" +"Sá»­ dụng: %s [-D binddn] [-P đường_dẫn] [-s trình_bao] [-l] [-q]\n" +" [--help] [--usage] [--version] [người_dùng]\n" +"\n" +"[help\t\ttrợ giúp\n" +"usage\t\tcách sá»­ dụng\n" +"version\t\tphiên bản]\n" + +#: src/chsh.c:62 +#, c-format +msgid "" +"%s - change login shell\n" +"\n" +msgstr "" +"%s — thay đổi trình bao đăng nhập\n" +"\n" + +#: src/chsh.c:70 +msgid " -l List allowed shells from /etc/shells\n" +msgstr "" +" -l Liệt kê các trình bao được phép, từ tập tin « /etc/shells »\n" + +#: src/chsh.c:72 +msgid " -s shell Use 'shell' as new login shell\n" +msgstr " -s trình_bao Dùng trình bao này là trình bao đăng nhập mới\n" + +#: src/chsh.c:109 +#, c-format +msgid "No known shells.\n" +msgstr "Không có trình bao được biết.\n" + +#: src/chsh.c:177 +#, c-format +msgid "%s: Shell must be a full path name.\n" +msgstr "%s: Trình bao phải có dạng tên đường dẫn đầy đủ.\n" + +#: src/chsh.c:183 +#, c-format +msgid "%s: `%s' does not exist.\n" +msgstr "%s: « %s » không tồn tại.\n" + +#: src/chsh.c:189 +#, c-format +msgid "%s: `%s' is not executable.\n" +msgstr "%s: « %s » không có khả năng thá»±c hiện.\n" + +#: src/chsh.c:199 +#, c-format +msgid "%s: '%c' is not allowed.\n" +msgstr "%s: không cho phép « %c ».\n" + +#: src/chsh.c:212 +#, c-format +msgid "Warning: \"%s\" is not listed in /etc/shells.\n" +msgstr "Cảnh báo : « %s » không nằm trong tập tin « /etc/shells ».\n" + +#: src/chsh.c:215 +#, c-format +msgid "%s: \"%s\" is not listed in /etc/shells.\n" +msgstr "%s: « %s » không nằm trong tập tin « /etc/shells ».\n" + +#: src/chsh.c:217 +#, c-format +msgid "%s: Use -l option to see list.\n" +msgstr "%s: Dùng tùy chọn « -l » để xem danh sách.\n" + +#: src/chsh.c:453 +#, c-format +msgid "%s: %s is not authorized to change the shell of `%s'.\n" +msgstr "%s: %s không được xác thá»±c để thay đổi trình bao của « %s ».\n" + +#: src/chsh.c:466 src/passwd.c:728 +#, c-format +msgid "SELinux is in permissive mode, continuing\n" +msgstr "SELinux đang chạy trong chế độ không bắt buộc, đang tiếp tục\n" + +#: src/chsh.c:484 +#, c-format +msgid "You cannot change the shell for %s.\n" +msgstr "Bạn không thể thay đổi trình bao cho %s.\n" + +#: src/chsh.c:495 +#, c-format +msgid "You cannot change a restricted shell.\n" +msgstr "Bạn không thể thay đổi trình bao bị hạn chế.\n" + +#: src/chsh.c:501 +#, c-format +msgid "Changing login shell for %s.\n" +msgstr "Đang thay đổi trình bao đăng nhập cho %s.\n" + +#: src/chsh.c:545 +#, c-format +msgid "Enter the new value, or press return for the default.\n" +msgstr "Gõ giá trị mới, hoặc bấm phím Return để đặt mặc định.\n" + +#: src/chsh.c:546 +msgid "Login Shell" +msgstr "Trình bao Đăng nhập" + +#: src/chsh.c:554 +#, c-format +msgid "Shell not changed.\n" +msgstr "ChÆ°a thay đổi trình bao.\n" + +#: src/chsh.c:568 +#, c-format +msgid "Error while changing login shell.\n" +msgstr "Gặp lỗi khi thay đổi trình bao đăng nhập.\n" + +#: src/chsh.c:578 +#, c-format +msgid "Shell changed.\n" +msgstr "Trình bao đã được thay đổi.\n" + +#: src/expiry.c:40 +#, c-format +msgid "Usage: %s [-f]\n" +msgstr "Sá»­ dụng: %s [-f]\n" + +#: src/expiry.c:48 +#, c-format +msgid "" +"%s - check password expiration and enforce password change\n" +"\n" +msgstr "" +"%s — kiểm tra mãn hạn mật khẩu và ép buộc thay đổi mật khẩu\n" +"\n" + +#: src/expiry.c:50 +msgid " -f, --force The caller is forced to change the password\n" +msgstr " -f, --force Bộ gọi bị ép buộc thay đổi mật khẩu\n" + +#: src/expiry.c:100 +#, c-format +msgid "Age field for %s is wrong" +msgstr "Sai đặt trường thời gian hoạt động cho %s" + +#: src/expiry.c:121 +#, c-format +msgid "Your password has expired. Choose a new password." +msgstr "Mật khẩu của bạn đã hết hạn dùng. Hãy chọn mật khẩu mới." + +#: src/expiry.c:139 +#, c-format +msgid "Your login has expired. Contact the system administrator.\n" +msgstr "" +"Đăng nhập của bạn đã hết hạn dùng. Hãy liên lạc với quản trị hệ thống.\n" + +#: src/expiry.c:147 +#, c-format +msgid "Password changing requested. Choose a new password.\n" +msgstr "Yêu cầu thay đổi mật khẩu. Hãy chọn mật khẩu mới.\n" + +#: src/expiry.c:157 +#, c-format +msgid "Your password is inactive. Contact the system administrator.\n" +msgstr "" +"Mật khẩu của bạn vẫn không hoạt động. Hãy liên lạc với quản trị hệ thống.\n" + +#: src/expiry.c:162 +#, c-format +msgid "Your password has expired. Choose a new password.\n" +msgstr "Mật khẩu của bạn đã hết hạn dùng. Hãy chọn mật khẩu mới.\n" + +#: src/expiry.c:171 +#, c-format +msgid "Your password will expire in %ld days.\n" +msgstr "Mật khẩu của bạn sẽ hết hạn dùng trong vòng %ld ngày.\n" + +#: src/expiry.c:174 +#, c-format +msgid "Your password will expire tomorrow.\n" +msgstr "Mật khẩu của bạn sễ hết hạn dùng vào ngày mai.\n" + +#: src/expiry.c:176 +#, c-format +msgid "Your password will expire within 24 hours.\n" +msgstr "Mật khẩu của bạn sẽ hết hạn dùng trong vòng 24 giờ.\n" + +#: src/gpasswd.c:63 src/passwd.c:796 +#, c-format +msgid "%s: error reading from stdin!\n" +msgstr "%s: gặp lỗi khi đọc từ đầu vào tiêu chuẩn.\n" + +#: src/gpasswd.c:80 +#, c-format +msgid "Usage: %s [-r|-l|-u] group\n" +msgstr "Sá»­ dụng: %s [-r|-l|-u] nhóm\n" + +#: src/gpasswd.c:87 +#, c-format +msgid "" +"%s - change group password\n" +"\n" +msgstr "" +"%s — thay đổi mật khẩu nhóm\n" +"\n" + +#: src/gpasswd.c:88 +msgid " -r Remove the password for this group\n" +msgstr " -r Gỡ bỏ mật khẩu đối với nhóm này\n" + +#: src/gpasswd.c:89 +msgid " -l Locks the password entry for \"group\"\n" +msgstr " -l Khoá mục nhập mật khẩu đối với « nhóm »\n" + +#: src/gpasswd.c:91 +msgid " -u Try to unlock the password entry for \"group\"\n" +msgstr " -u Thá»­ mở khoá mục nhập mật khẩu đối với « nhóm »\n" + +#: src/gpasswd.c:96 +msgid " -P path Search group file in \"path\"\n" +msgstr " -P đường_dẫn Quét đường dẫn này tìm kiếm trong tập tin nhóm\n" + +#: src/gpasswd.c:98 src/passwd.c:406 src/rpasswd.c:111 src/rpasswdd.c:130 +msgid " --help Give this help list\n" +msgstr " --help Hiển thị trợ giúp này\n" + +#: src/gpasswd.c:99 src/passwd.c:407 src/rpasswd.c:112 src/rpasswdd.c:131 +msgid " --usage Give a short usage message\n" +msgstr " --usage Hiển thị thông điệp ngắn về cách sá»­ dụng\n" + +#: src/gpasswd.c:100 src/passwd.c:408 src/rpasswd.c:113 src/rpasswdd.c:132 +msgid " --version Print program version\n" +msgstr " --version In ra phiên bản của chÆ°Æ¡ng trình\n" + +#: src/gpasswd.c:101 +msgid " --stdin Receive input from stdin instead of /dev/tty\n" +msgstr "" +" --stdin Nhân dữ liệu từ đầu vào tiêu chuẩn thay cho « /dev/tty »\n" + +#: src/gpasswd.c:102 +msgid "Valid services for -r are: files, nis, nisplus, ldap\n" +msgstr "" +"Dịch vụ hợp lệ cho tùy chọn « -r »:\n" +" • files\t\tcác tập tin\n" +" • nis\t\tNIS\n" +" • nisplus\t\tNIS+\n" +" • ldap\t\tLDAP\n" + +#: src/gpasswd.c:238 +#, c-format +msgid "%s: Group argument missing.\n" +msgstr "%s: Thiếu đốí số nhóm.\n" + +#: src/gpasswd.c:277 +#, c-format +msgid "%s: Group `%s' is not known to service `%s'.\n" +msgstr "%s: Nhóm « %s » không được dịch vụ « %s » nhận ra.\n" + +#: src/gpasswd.c:280 src/groupdel.c:300 src/groupmod.c:384 src/useradd.c:220 +#: src/usermod.c:185 +#, c-format +msgid "%s: Unknown group `%s'.\n" +msgstr "%s: Không rõ nhóm « %s ».\n" + +#: src/gpasswd.c:314 src/passwd.c:909 src/usermod.c:1125 +#, c-format +msgid "Cannot unlock the password for `%s'!\n" +msgstr "Không thể mở khóa mật khẩu đối với « %s ».\n" + +#: src/gpasswd.c:336 src/passwd.c:936 src/usermod.c:1104 +#, c-format +msgid "Password for `%s' is already locked!\n" +msgstr "Mật khẩu đối với « %s » đã khoá.\n" + +#: src/gpasswd.c:348 +#, c-format +msgid "Changing the password for group %s.\n" +msgstr "Đang thay đổi mật khẩu đối với nhóm %s.\n" + +#: src/gpasswd.c:355 src/gpasswd.c:357 +msgid "New Password: " +msgstr "Mật khẩu mới: " + +#: src/gpasswd.c:366 +#, c-format +msgid "Password change aborted.\n" +msgstr "Việc thay đổi mật khẩu bị hủy bỏ.\n" + +#: src/gpasswd.c:379 src/gpasswd.c:381 +msgid "Re-enter new password: " +msgstr "Gõ lại mật khẩu mới: " + +#: src/gpasswd.c:392 +#, c-format +msgid "Sorry, passwords do not match.\n" +msgstr "Tiếc là hai mật khẩu không trùng nhau.\n" + +#: src/gpasswd.c:400 +#, c-format +msgid "%s: Try again later.\n" +msgstr "%s: Hãy thá»­ lại sau.\n" + +#: src/gpasswd.c:448 +#, c-format +msgid "No support for blowfish compiled in. Using MD5\n" +msgstr "ChÆ°a biên dịch vào để hỗ trợ blowfish nên dùng MD5\n" + +#: src/gpasswd.c:475 +#, c-format +msgid "%s: Error changing password.\n" +msgstr "%s: Gặp lỗi khi thay đổi mật khẩu.\n" + +#: src/gpasswd.c:484 +#, c-format +msgid "Password removed.\n" +msgstr "Mật khẩu bị gỡ bỏ.\n" + +#: src/gpasswd.c:490 src/passwd.c:978 +#, c-format +msgid "Password changed.\n" +msgstr "Mật khẩu được thay đổi.\n" + +#: src/groupadd.c:54 +#, c-format +msgid "" +"Usage: %s [-D binddn] [-g gid [-o]] [-r] [-P path] [-p password] group\n" +msgstr "" +"Sá»­ dụng: %s [-D binddn] [-g gid [-o]] [-r] [-P đường_dẫn] [-p mật_khẩu] " +"nhóm\n" + +#: src/groupadd.c:62 +#, c-format +msgid "" +"%s - create a new group\n" +"\n" +msgstr "" +"%s — tạo một nhóm mới\n" +"\n" + +#: src/groupadd.c:65 +msgid " -g gid Force the new groupid to be the given number\n" +msgstr " -g gid Ép buộc mã số nhóm (GID) mới là số này\n" + +#: src/groupadd.c:67 src/groupmod.c:70 src/useradd.c:80 src/usermod.c:79 +msgid " -o Allow duplicate (non-unique) UID\n" +msgstr "" +" -o Cho phép mã số người dùng (UID) trùng (không duy nhất)\n" + +#: src/groupadd.c:68 src/groupdel.c:67 src/groupmod.c:71 src/grpck.c:61 +#: src/pwck.c:61 src/useradd.c:81 src/userdel.c:71 src/usermod.c:84 +msgid " -P path Search passwd, shadow and group file in \"path\"\n" +msgstr "" +" -P đường_dẫn Quét đường dẫn này tìm kiếm tập tin loại mật khẩu, bóng và " +"nhóm\n" + +#: src/groupadd.c:70 src/groupmod.c:73 src/useradd.c:83 src/usermod.c:86 +msgid " -p password Encrypted password as returned by crypt(3)\n" +msgstr " -p mật_khẩu Mật khẩu đã mật mã nhÆ° do crypt(3) trả lại\n" + +#: src/groupadd.c:72 src/useradd.c:89 +msgid " -r, --system Create a system account\n" +msgstr " -r, --system \t\tTạo một tài khoản hệ thống\n" + +#: src/groupadd.c:73 src/groupdel.c:69 src/useradd.c:91 src/userdel.c:73 +msgid " --service srv Add account to nameservice 'srv'\n" +msgstr " --service dịch_vụ \tThêm tài khoản vào dịch vụ tên này\n" + +#: src/groupadd.c:75 src/groupmod.c:79 src/useradd.c:93 src/usermod.c:97 +msgid " --usage Give a short usage message\n" +msgstr " --usage Hiển thị thông điệp cách sá»­ dụng ngắn.\n" + +#: src/groupadd.c:77 src/groupdel.c:73 src/useradd.c:95 src/userdel.c:77 +msgid "Valid services for --service are: files, ldap\n" +msgstr "" +"Dịch vụ hợp lệ cho tùy chọn « --service »:\n" +" • files\tcác tập tin\n" +" • ldap\tLDAP\n" + +#: src/groupadd.c:257 +#, c-format +msgid "%s: Can't get unique gid in range %u - %u.\n" +msgstr "%s: Không thể lấy GID duy nhất trong phạm vị %u - %u.\n" + +#: src/groupadd.c:312 +#, c-format +msgid "%s: You are using an undocumented option (-f)!\n" +msgstr "%s: Bạn đang dùng một tùy chọn không có tài liệu hướng dẫn (-f).\n" + +#: src/groupadd.c:320 src/groupadd.c:330 +#, c-format +msgid "%s: Invalid numeric argument `%s' for Group ID.\n" +msgstr "%s: Đối số thuộc số không hợp lệ « %s » đối với mã số nhóm (GID).\n" + +#: src/groupadd.c:352 src/useradd.c:1328 src/usermod.c:925 +#, c-format +msgid "%s: Invalid characters in password `%s'.\n" +msgstr "%s: Gặp ký tá»± không hợp lệ trong mật khẩu « %s ».\n" + +#: src/groupadd.c:398 +#, c-format +msgid "%s: You cannot use --gid and --preferred-gid at the same time.\n" +msgstr "%s: Không thể sá»­ dụng đồng thời « --gid » và « --preferred-gid ».\n" + +#: src/groupadd.c:419 src/groupdel.c:255 src/groupmod.c:339 src/useradd.c:1517 +#: src/userdel.c:485 src/usermod.c:1020 +#, c-format +msgid "%s: Too few arguments.\n" +msgstr "%s: Quá ít đối số\n" + +#: src/groupadd.c:425 +#, c-format +msgid "%s: You cannot use -f with -o.\n" +msgstr "%s: Bạn không thể sá»­ dụng đồng thời tùy chọn « -f » và « -o ».\n" + +#: src/groupadd.c:474 +#, c-format +msgid "%s: GID %u is not unique, using another one.\n" +msgstr "%s: GID %u không phải duy nhất nên dùng một GID khác.\n" + +#: src/groupadd.c:484 src/groupmod.c:398 +#, c-format +msgid "%s: GID %u is not unique.\n" +msgstr "%s: GID %u không phải duy nhất.\n" + +#: src/groupadd.c:495 src/groupmod.c:411 +#, c-format +msgid "%s: Invalid group name `%s'.\n" +msgstr "%s: Tên nhóm không hợp lệ « %s ».\n" + +#: src/groupadd.c:513 src/groupmod.c:421 +#, c-format +msgid "%s: Group `%s' already exists.\n" +msgstr "%s: Nhóm « %s » đã có.\n" + +#: src/groupadd.c:555 +#, c-format +msgid "%s: Cannot add group to LDAP database without DN.\n" +msgstr "" +"%s: Không thể thêm nhóm vào cÆ¡ sở dữ liệu LDAP mà không có DN (tên khác " +"biệt).\n" + +#: src/groupadd.c:572 +#, c-format +msgid "%s: Group not added to LDAP database.\n" +msgstr "%s: ChÆ°a thêm nhóm vào cÆ¡ sở dữ liệu LDAP.\n" + +#: src/groupadd.c:604 +#, c-format +msgid "%s: GROUPADD_CMD fails with exit code %d.\n" +msgstr "%s: GROUPADD_CMD bị lỗi với mã thoát %d.\n" + +#: src/groupdel.c:54 +#, c-format +msgid "Usage: %s [-D binddn] [-P path] group\n" +msgstr "Sá»­ dụng: %s [-D binddn] [-P đường_dẫn] nhóm\n" + +#: src/groupdel.c:61 +#, c-format +msgid "" +"%s - delete a group\n" +"\n" +msgstr "" +"%s — xoá một nhóm\n" +"\n" + +#: src/groupdel.c:130 src/groupdel.c:147 +#, c-format +msgid "%s: GID `%u' is primary group of `%s'.\n" +msgstr "%s: Mã số nhóm (GID) « %u » là nhóm chính của « %s ».\n" + +#: src/groupdel.c:297 src/groupmod.c:381 src/useradd.c:214 src/usermod.c:179 +#, c-format +msgid "%s: Group `%s' not found in service `%s'.\n" +msgstr "%s: Không tìm thấy nhóm « %s » trong dịch vụ « %s ».\n" + +#: src/groupdel.c:310 +#, c-format +msgid "%s: Cannot remove user's primary group.\n" +msgstr "%s: Không thể gỡ bỏ nhóm chính của người dùng.\n" + +#: src/groupdel.c:325 +#, c-format +msgid "%s: Cannot delete group from LDAP database without DN.\n" +msgstr "" +"%s: Không thể xoá nhóm khỏi cÆ¡ sở dữ liệu LDAP mà không có DN (tên khác " +"biệt).\n" + +#: src/groupdel.c:342 +#, c-format +msgid "%s: Group not deleted from LDAP database.\n" +msgstr "%s: ChÆ°a xoá nhóm khỏi cÆ¡ sở dữ liệu LDAP.\n" + +#: src/groupdel.c:355 +#, c-format +msgid "%s: GROUPDEL_PRECMD fails with exit code %d.\n" +msgstr "%s: GROUPDEL_PRECMD bị lỗi với mã thoát %d.\n" + +#: src/groupdel.c:373 +#, c-format +msgid "%s: Error deleting group `%s'.\n" +msgstr "%s: Gặp lỗi khi xoá nhóm « %s ».\n" + +#: src/groupdel.c:397 +#, c-format +msgid "%s: GROUPDEL_POSTCMD fails with exit code %d.\n" +msgstr "%s: GROUPDEL_POSTCMD bị lỗi với mã thoát %d.\n" + +#: src/groupmod.c:54 +#, c-format +msgid "Usage: %s [-g gid [-o]] [-n new_name] group\n" +msgstr "Sá»­ dụng: %s [-g gid [-o]] [-n tên_mới] nhóm\n" + +#: src/groupmod.c:61 +#, c-format +msgid "" +"%s - modify a group entry\n" +"\n" +msgstr "" +"%s — sá»­a đổi một mục nhập nhóm\n" +"\n" + +#: src/groupmod.c:65 +msgid " -g gid Change the groupid to the given number\n" +msgstr " -g SỐ Thay đổi mã số nhóm (GID) thành số này\n" + +#: src/groupmod.c:67 src/useradd.c:76 +msgid " -k skeldir Specify an alternative skel directory\n" +msgstr " -k thÆ°_mục Ghi rõ một thÆ° mục skel xen kẽ\n" + +#: src/groupmod.c:69 +msgid " -n name Change group name.\n" +msgstr " -n tên Thay đổi tên nhóm.\n" + +#: src/groupmod.c:75 +msgid " -A user Add the user to the group entry\n" +msgstr " -A người_dùng Thêm người dùng này vào mục nhập nhóm\n" + +#: src/groupmod.c:76 +msgid " -R user Remove the user from the group entry\n" +msgstr " -R người_dùng Gỡ bỏ người dùng này khỏi mục nhập nhóm\n" + +#: src/groupmod.c:81 src/usermod.c:99 +msgid "Valid services are: files, ldap\n" +msgstr "" +"Các dịch vụ hợp lệ:\n" +" • files\tcác tập tin\n" +" • ldap\tLDAP\n" + +#: src/groupmod.c:245 +#, c-format +msgid "%s: invalid numeric argument `%s' for Group ID.\n" +msgstr "%s: đối số thuộc số không hợp lệ « %s » đối với mã số nhóm (GID).\n" + +#: src/groupmod.c:271 +#, c-format +msgid "%s: invalid characters in password `%s'.\n" +msgstr "%s: gặp ký tá»± không hợp lệ trong mật khẩu « %s ».\n" + +#: src/groupmod.c:467 +#, c-format +msgid "%s: Cannot modify group in LDAP database without DN.\n" +msgstr "" +"%s: Không thể sá»­a đổi nhóm trong cÆ¡ sở dữ liệu LDAP mà không có tên khác " +"biệt (DN).\n" + +#: src/groupmod.c:485 +#, c-format +msgid "%s: Group not modified in LDAP database.\n" +msgstr "%s: ChÆ°a sá»­a đổi nhóm trong cÆ¡ sở dữ liệu LDAP.\n" + +#: src/grpck.c:51 +#, c-format +msgid "Usage: %s [-P path] [-q|-r]\n" +msgstr "Sá»­ dụng: %s [-P đường_dẫn] [-q|-r]\n" + +#: src/grpck.c:59 +#, c-format +msgid "" +"%s - check integrity of group file\n" +"\n" +msgstr "" +"%s — kiểm tra toàn vẹn của tập tin nhóm\n" +"\n" + +#: src/grpck.c:63 src/pwck.c:63 +msgid " -q, --quiet Don't print warnings, only errors\n" +msgstr " -q, --quiet Đừng in ra cảnh báo, chỉ lỗi\n" + +#: src/grpck.c:64 src/pwck.c:64 +msgid " -r, --read-only Run in read-only mode, don't make changes\n" +msgstr " -r, --read-only Chạy trong chế độ chỉ-đọc, không thay đổi gỉ\n" + +#: src/grpck.c:66 +msgid " -s, --sort Sort the group file, no checks are done\n" +msgstr " -s, --sort Sắp xếp tập tin nhóm, không kiểm tra gì\n" + +#: src/grpck.c:78 src/pwck.c:78 +#, c-format +msgid "No\n" +msgstr "Không\n" + +#: src/grpck.c:222 src/pwck.c:229 +#, c-format +msgid "Checking `%s'\n" +msgstr "Đang kiểm tra « %s »\n" + +#: src/grpck.c:337 src/grpck.c:384 +#, c-format +msgid "Invalid group entry.\n" +msgstr "Mục nhập nhóm không hợp lệ.\n" + +#: src/grpck.c:338 src/pwck.c:346 src/pwck.c:616 +#, c-format +msgid "Delete empty line? " +msgstr "Xoá dòng trống ? " + +#: src/grpck.c:356 +#, c-format +msgid "Invalid group entry with comment.\n" +msgstr "Mục nhập nhóm không hợp lệ với ghi chú.\n" + +#: src/grpck.c:357 src/grpck.c:385 src/grpck.c:402 src/grpck.c:418 +#: src/pwck.c:365 src/pwck.c:381 src/pwck.c:397 src/pwck.c:413 src/pwck.c:635 +#: src/pwck.c:650 src/pwck.c:666 src/pwck.c:682 src/pwck.c:700 +#, c-format +msgid "Delete line `%s'? " +msgstr "Xoá dòng « %s » ? " + +#: src/grpck.c:401 +#, c-format +msgid "Invalid group name `%s'.\n" +msgstr "Tên nhóm không hợp lệ « %s ».\n" + +#: src/grpck.c:417 +#, c-format +msgid "Duplicate group entry\n" +msgstr "Mục nhập nhóm trùng\n" + +#: src/grpck.c:445 +#, c-format +msgid "Group `%s': unknown user `%s'\n" +msgstr "Nhóm « %s »: không rõ người dùng « %s »\n" + +#: src/grpck.c:451 +#, c-format +msgid "Group `%s': Duplicate user entry `%s', already primary group.\n" +msgstr "Nhóm « %s »: Mục nhập người dùng trùng « %s », đã nhóm chính.\n" + +#: src/grpck.c:812 src/pwck.c:1074 +#, c-format +msgid "%s: -s and -r are incompatibile.\n" +msgstr "%s: hai tùy chọn « -s » và « -r » không tÆ°Æ¡ng thích với nhau.\n" + +#: src/grpconv.c:33 src/grpunconv.c:51 src/pwconv.c:44 src/pwunconv.c:44 +#, c-format +msgid "Usage: %s\n" +msgstr "Sá»­ dụng: %s\n" + +#: src/grpconv.c:40 +#, c-format +msgid "" +"%s - convert to shadow group\n" +"\n" +msgstr "" +"%s — chuyển đổi sang nhóm bóng\n" +"\n" + +#: src/grpconv.c:105 +#, c-format +msgid "%s: /etc/gshadow is not supported by this system.\n" +msgstr "%s: « /etc/gshadow » không được hệ thống này hỗ trợ.\n" + +#: src/grpunconv.c:58 +#, c-format +msgid "" +"%s - convert from shadow groups\n" +"\n" +msgstr "" +"%s — chuyển đổi từ các nhóm bóng\n" +"\n" + +#: src/grpunconv.c:61 +msgid " -P path Search group and gshadow file in \"path\"\n" +msgstr "" +" -P đường_dẫn Quét đường dẫn này tìm kiếm tập tin nhóm và tập tin " +"gshadow\n" + +#: src/grpunconv.c:219 +#, c-format +msgid "%s: No gshadow file found.\n" +msgstr "%s: Không tìm thấy tập tin gshadow.\n" + +#: src/grpunconv.c:243 src/pwconv.c:243 src/pwconv.c:267 src/pwunconv.c:190 +#, c-format +msgid "Cannot create backup file `%s': %m\n" +msgstr "Không thể tạo tập tin sao lÆ°u « %s »: %m\n" + +#: src/grpunconv.c:266 src/pwunconv.c:214 +#, c-format +msgid "Error while moving password for `%s'.\n" +msgstr "Gặp lỗi khi di chuyển mật khẩu đối với « %s ».\n" + +#: src/newgrp.c:52 +#, c-format +msgid "Usage: %s [-l|-c command] [group]\n" +msgstr "Sá»­ dụng: %s [-l|-c lệnh] [nhóm]\n" + +#: src/newgrp.c:60 +#, c-format +msgid "" +"%s - change the effective group id\n" +"\n" +msgstr "" +"%s — thay đổi mã số nhóm đang dùng\n" +"\n" + +#: src/newgrp.c:63 +msgid " -l, --login reinitialize environment as if logged in\n" +msgstr " -l, --login sÆ¡ khởi lại môi trường nhÆ° đã đăng nhập\n" + +#: src/newgrp.c:65 +msgid " -c command Execute `command' with new group\n" +msgstr " -c lệnh \t\tThá»±c hiện câu lệnh này với nhóm mới\n" + +#: src/newgrp.c:161 +#, c-format +msgid "%s: -l and -c are exclusive\n" +msgstr "%s: Hai tuỳ chọn « -l » và « -c » loại từ lẫn nhau\n" + +#: src/newgrp.c:167 +#, c-format +msgid "%s: -c requires a group argument\n" +msgstr "%s: Tùy chọn « -c » yêu cầu một đối số nhóm.\n" + +#: src/newgrp.c:174 +#, c-format +msgid "%s: Unknown user.\n" +msgstr "%s: Không rõ người dùng.\n" + +#: src/newgrp.c:195 +#, c-format +msgid "%s: bad group `%s'.\n" +msgstr "%s: nhóm sai « %s ».\n" + +#: src/newgrp.c:218 src/newgrp.c:313 +#, c-format +msgid "%s: calling getgroups failed: %s\n" +msgstr "%s: lỗi gọi « getgroups » (lấy các nhóm): %s\n" + +#: src/newgrp.c:271 +#, c-format +msgid "%s: failure to get group entry for %d.\n" +msgstr "%s: lỗi lấy mục nhập nhóm đối với %d.\n" + +#: src/newgrp.c:281 +msgid "Password: " +msgstr "Mật khẩu : " + +#: src/newgrp.c:284 +#, c-format +msgid "%s: password incorrect.\n" +msgstr "%s: mật khẩu không đúng.\n" + +#: src/newgrp.c:351 +#, c-format +msgid "%s: too many groups, not added.\n" +msgstr "%s: quá nhiều nhóm, chÆ°a thêm.\n" + +#: src/newgrp.c:358 +#, c-format +msgid "%s: calling setgroups failed: %s\n" +msgstr "%s: lỗi gọi « setgroups » (đặt các nhóm): %s\n" + +#: src/newgrp.c:365 src/newgrp.c:380 +#, c-format +msgid "%s: calling setgid failed: %s\n" +msgstr "%s: lỗi gọi « setgid » (đặt mã số nhóm): %s\n" + +#: src/newgrp.c:374 +#, c-format +msgid "%s: calling initgroups failed: %s\n" +msgstr "%s: lỗi gọi « initgroups » (sÆ¡ khởi các nhóm): %s\n" + +#: src/newgrp.c:389 +#, c-format +msgid "%s: calling setuid failed: %s\n" +msgstr "%s: lỗi gọi « setuid » (đặt mã số người dùng): %s\n" + +#: src/newgrp.c:401 +#, c-format +msgid "Cannot change to directory %s: %s\n" +msgstr "Không thể chuyển đổi sang thÆ° mục %s: %s\n" + +#: src/newgrp.c:439 +#, c-format +msgid "%s: execl failed: %s\n" +msgstr "%s: execl bị lỗi: %s\n" + +#: src/pam_rpasswd.c:219 src/pam_rpasswd.c:223 src/pam_rpasswd.c:330 +#: src/pam_rpasswd.c:334 src/rpasswd.c:211 src/rpasswd.c:214 src/rpasswd.c:297 +#: src/rpasswd.c:300 +#, c-format +msgid "error while reading request: %s" +msgstr "gặp lỗi khi đọc yêu cầu : %s" + +#: src/pam_rpasswd.c:220 src/rpasswd.c:212 src/rpasswd-client.c:58 +#: src/rpasswd-client.c:71 src/rpasswd-client.c:82 src/rpasswd-client.c:108 +#: src/rpasswd-client.c:121 +msgid "Peer has closed the TLS connection" +msgstr "Ngang hàng đã đóng kết nối TLS" + +#: src/pam_rpasswd.c:235 src/pam_rpasswd.c:344 +#, c-format +msgid "error while allocating memory: %m" +msgstr "gặp lỗi khi cấp phát bộ nhớ : %m" + +#: src/pam_rpasswd.c:242 src/rpasswd.c:223 src/rpasswd.c:312 +#, c-format +msgid "error while reading request data: %s" +msgstr "gặp lỗi khi đọc dữ liệu yêu cầu : %s" + +#: src/pam_rpasswd.c:296 src/rpasswd.c:269 src/rpasswd.c:358 +#, c-format +msgid "Cannot send input back to server: %s\n" +msgstr "Không thể gá»­i dữ liệu nhập về máy phục vụ : %s\n" + +#: src/pam_rpasswd.c:331 src/rpasswd.c:298 +msgid "wrong data received" +msgstr "nhận được dữ liệu không đúng" + +#: src/pam_rpasswd.c:352 +#, c-format +msgid "error while reading request data: %m" +msgstr "gặp lỗi khi đọc dữ liệu yêu cầu : %m" + +#: src/pam_rpasswd.c:403 +#, c-format +msgid "Cannot send input back to server: %m\n" +msgstr "Không thể gá»­i dữ liệu nhập về máy phục vụ : %m\n" + +#: src/pam_rpasswd.c:565 +#, c-format +msgid "SLP: Found Server on %s, port %s (%s)\n" +msgstr "SLP: Tìm được máy phục vụ trên %s, cổng %s (%s)\n" + +#: src/pam_rpasswd.c:568 +#, c-format +msgid "SLP: Found Server on %s, port %s\n" +msgstr "SLP: Tìm được máy phục vụ trên %s, cổng %s\n" + +#: src/pam_rpasswd.c:574 +#, c-format +msgid "SLP: Found Server on %s (%s)\n" +msgstr "SLP: Tìm được máy phục vụ trên %s (%s)\n" + +#: src/pam_rpasswd.c:577 +#, c-format +msgid "SLP: Found Server on %s\n" +msgstr "SLP: Tìm được máy phục vụ trên %s\n" + +#: src/passwd.c:210 +#, c-format +msgid "Unable to initialize BioAPI framework, BioAPI error #:%x.\n" +msgstr "Không thể sÆ¡ khởi khuôn khổ BioAPI: lỗi BioAPI #:%x.\n" + +#: src/passwd.c:220 +#, c-format +msgid "Unable to parse UUID (BioAPI error #:%x) : %s\n" +msgstr "Không thể phân tích UUID (lỗi BioAPI #:%x): %s\n" + +#: src/passwd.c:241 +#, c-format +msgid "Unable to load BioAPI BSP with UUID of %s, BioAPI error #%x.\n" +msgstr "Không thể nạp BSP BioAPI với UUID %s: lỗi BioAPI #%x.\n" + +#: src/passwd.c:252 +#, c-format +msgid "" +"Unable to attach default device to BioAPI BSP with UUID of %s, BioAPI error #" +"%x.\n" +msgstr "" +"Không thể gắn kết thiết bị mặc định tới BSP BioAPI với UUID %s: lỗi BioAPI #%" +"x.\n" + +#: src/passwd.c:278 +#, c-format +msgid "Unable to create BIR database directory, \"%s\"\n" +msgstr "Không thể tạo thÆ° mục cÆ¡ sở dữ liệu BIR, « %s »\n" + +#: src/passwd.c:291 +#, c-format +msgid "" +"Unable to create BSP-specific subdirectory in BIR database directory, \"%s" +"\"\n" +msgstr "" +"Không thể tạo thÆ° mục con đặc trÆ°ng cho BSP trong thÆ° mục cÆ¡ sở dữ liệu BIR, " +"« %s »\n" + +#: src/passwd.c:306 +#, c-format +msgid "" +"Unable to write biometric identification record, \"%s\": BioAPI error #%x\n" +msgstr "" +"Không thể ghi mục ghi nhận diện thuộc sinh trắc học, « %s »: lỗi BioAPI #%x.\n" + +#: src/passwd.c:318 +#, c-format +msgid "Unable to open BIR for writing, \"%s\"\n" +msgstr "Không thể mở BIR để ghi: « %s »\n" + +#: src/passwd.c:349 +#, c-format +msgid "Unable to enroll user %s using BSP with UUID of %s, BioAPI error #%x.\n" +msgstr "" +"Không thể đăng ký người dùng %s sá»­ dụng BSP với UUID %s: lỗi BioAPI #%x.\n" + +#: src/passwd.c:367 +#, c-format +msgid "Usage: %s [-f|-g|-s|-k[-q]] [account]\n" +msgstr "Sá»­ dụng: %s [-f|-g|-s|-k[-q]] [tài_khoản]\n" + +#: src/passwd.c:368 +#, c-format +msgid " %s [-D binddn] [-n min] [-x max] [-w warn] [-i inact] account\n" +msgstr "" +" %s [-D binddn] [-n thiểu] [-x đa] [-w cảnh_báo] [-i bị_động] " +"tài_khoản\n" + +#: src/passwd.c:369 +#, c-format +msgid " %s {-l|-u|-d|-S[-a]|-e} account\n" +msgstr " %s {-l|-u|-d|-S[-a]|-e} tài_khoản\n" + +#: src/passwd.c:371 +#, c-format +msgid " %s --bioapi [account]\n" +msgstr " %s --bioapi [tài_khoản]\n" + +#: src/passwd.c:373 +#, c-format +msgid " %s --stdin [account]\n" +msgstr " %s --stdin [tài_khoản]\n" + +#: src/passwd.c:380 src/rpasswd.c:93 src/rpasswdd.c:114 +#, c-format +msgid "" +"%s - change password information\n" +"\n" +msgstr "" +"%s — thay đổi thông tin mật khẩu\n" +"\n" + +#: src/passwd.c:382 +msgid " -f Change the finger (GECOS) information\n" +msgstr " -f Thay đổi thông tin finger (GECOS)\n" + +#: src/passwd.c:384 +msgid " -s Change the login shell\n" +msgstr " -s Thay đổi trình bao đăng nhập\n" + +#: src/passwd.c:385 +msgid " -g Change the group password\n" +msgstr " -g Thay đổi mật khẩu nhóm\n" + +#: src/passwd.c:386 +msgid " -k Change the password only if expired\n" +msgstr " -k Thay đổi mật khẩu chỉ nếu nó đã hết hạn dùng\n" + +#: src/passwd.c:387 +msgid " -q Try to be quiet\n" +msgstr " -q Thá»­ không xuất chi tiết\n" + +#: src/passwd.c:388 +msgid " -S Show the password attributes\n" +msgstr " -S Hiển thị các thuộc tính về mật khẩu\n" + +#: src/passwd.c:389 +msgid " -a Only with -S, show for all accounts\n" +msgstr "" +" -a Chỉ khi cùng với tùy chọn « -S », hiển thị cho mọi tài " +"khoản\n" + +#: src/passwd.c:390 +msgid " -d Delete the password for the named account\n" +msgstr " -d Xoá mật khẩu cho tài khoản tên đưa ra\n" + +#: src/passwd.c:391 +msgid " -l Locks the password entry for \"account\"\n" +msgstr " -l Khoá mục nhập mật khẩu cho « tài khoản »\n" + +#: src/passwd.c:392 +msgid " -u Try to unlock the password entry for \"account\"\n" +msgstr " -u Thá»­ mở khoá mục nhập mật khẩu cho « tài khoản »\n" + +#: src/passwd.c:393 +msgid " -e Force the user to change password at next login\n" +msgstr "" +" -e Ép buộc người dùng thay đổi mật khẩu vào lúc đăng nhập kế " +"tiếp\n" + +#: src/passwd.c:394 +msgid " -n min Set minimum field for \"account\"\n" +msgstr " -n thiểu Đặt trường tối thiểu cho « tài khoản »\n" + +#: src/passwd.c:395 +msgid " -x max Set maximum field for \"account\"\n" +msgstr " -x đa Đặt trường tối đa cho « tài khoản »\n" + +#: src/passwd.c:396 +msgid " -w warn Set warn field for \"account\"\n" +msgstr " -w warn Đặt trường cảnh báo cho « tài khoản »\n" + +#: src/passwd.c:398 +msgid " --bioapi Authentication token is handled via BioAPI\n" +msgstr " --bioapi Hiệu bài xác thá»±c được xá»­ lý thông qua BioAPI\n" + +#: src/passwd.c:405 +msgid " --stdin Read new password from stdin (root only)\n" +msgstr "" +" --stdin Đọc mật khẩu mới từ đầu vào tiêu chuẩn (chỉ người chủ)\n" + +#: src/passwd.c:597 +#, c-format +msgid "%s: User argument missing\n" +msgstr "%s: Thiếu đốí số người dùng\n" + +#: src/passwd.c:690 +#, c-format +msgid "%s: User `%s' is not known to service `%s'\n" +msgstr "%s: Người dùng « %s » không được dịch vụ « %s » nhận ra.\n" + +#: src/passwd.c:715 +#, c-format +msgid "%s: %s is not authorized to change the password of %s\n" +msgstr "%s: %s không được xác thá»±c để thay đổi mật khẩu của %s\n" + +#: src/passwd.c:744 +#, c-format +msgid "%s: Permission denied\n" +msgstr "%s: Không đủ quyền.\n" + +#: src/passwd.c:753 +#, c-format +msgid "You cannot change the shadow data for `%s'.\n" +msgstr "Bạn không thể thay đổi dữ liệu bóng cho %s.\n" + +#: src/passwd.c:781 +#, c-format +msgid "%s: -P flag not supported in this mode!\n" +msgstr "%s: Cờ « -P » không được hỗ trợ trong chế độ này.\n" + +#: src/passwd.c:811 +#, c-format +msgid "Changing password for %s.\n" +msgstr "Đang thay đổi mật khẩu cho %s.\n" + +#: src/passwd.c:960 +#, c-format +msgid "Error while changing password expiry information.\n" +msgstr "Gặp lỗi khi thay đổi thông tin hết hạn dùng mật khẩu.\n" + +#: src/passwd.c:962 +#, c-format +msgid "Error while changing password.\n" +msgstr "Gặp lỗi khi thay đổi mật khẩu.\n" + +#: src/passwd.c:974 +#, c-format +msgid "Password expiry information changed.\n" +msgstr "Thông tin hết hạn dùng mật khẩu đã được thay đổi.\n" + +#: src/passwd.c:976 +#, c-format +msgid "Password deleted.\n" +msgstr "Mật khẩu bị xoá.\n" + +#: src/passwd.c:1038 +#, c-format +msgid "passwd: Cannot execute %s" +msgstr "passwd: Không thể thá»±c hiện %s" + +#: src/pwck.c:51 +#, c-format +msgid "Usage: %s [-P path] [-q|-r|-s]\n" +msgstr "Sá»­ dụng: %s [-P đường_dẫn] [-q|-r|-s]\n" + +#: src/pwck.c:59 +#, c-format +msgid "" +"%s - check integrity of password files\n" +"\n" +msgstr "" +"%s — kiểm tra toàn vẹn của các tập tin mật khẩu\n" +"\n" + +#: src/pwck.c:66 +msgid " -s, --sort Sort the password file, no checks are done\n" +msgstr " -s, --sort Sắp xếp tập tin mật khẩu, không kiểm tra gì\n" + +#: src/pwck.c:345 src/pwck.c:380 +#, c-format +msgid "Invalid password entry.\n" +msgstr "Mục nhập mật khẩu không hợp lệ.\n" + +#: src/pwck.c:364 +#, c-format +msgid "Invalid password entry with comment.\n" +msgstr "Mục nhập mật khẩu không hợp lệ với ghi chú.\n" + +#: src/pwck.c:396 src/pwck.c:665 +#, c-format +msgid "Invalid account name `%s'.\n" +msgstr "Tên tài khoản không hợp lệ « %s ».\n" + +#: src/pwck.c:412 +#, c-format +msgid "Duplicate password entry\n" +msgstr "Mục nhập mật khẩu trùng\n" + +#: src/pwck.c:431 +#, c-format +msgid "User `%s': unknown group `%u'\n" +msgstr "Người dùng « %s »: không rõ nhóm « %u »\n" + +#: src/pwck.c:440 +#, c-format +msgid "User `%s': directory `%s' does not exist.\n" +msgstr "Người dùng « %s »: thÆ° mục « %s » không tồn tại.\n" + +#: src/pwck.c:449 +#, c-format +msgid "User `%s': shell `%s' is not executable.\n" +msgstr "Người dùng « %s »: trình bao « %s » không có khả năng thá»±c hiện.\n" + +#: src/pwck.c:506 +#, c-format +msgid "Checking `%s'.\n" +msgstr "Đang kiểm tra « %s ».\n" + +#: src/pwck.c:615 src/pwck.c:649 +#, c-format +msgid "Invalid shadow entry.\n" +msgstr "Mục nhập bóng không hợp lệ.\n" + +#: src/pwck.c:634 +#, c-format +msgid "Invalid shadow entry with comment.\n" +msgstr "Mục nhập bóng không hợp lệ với ghi chú.\n" + +#: src/pwck.c:681 +#, c-format +msgid "Duplicate shadow entry\n" +msgstr "Mục nhập bóng trùng\n" + +#: src/pwck.c:699 +#, c-format +msgid "No matching password file entry.\n" +msgstr "Không có mục nhập tập tin mật khẩu tÆ°Æ¡ng ứng.\n" + +#: src/pwck.c:714 +#, c-format +msgid "User `%s': last password change in the future.\n" +msgstr "" +"Người dùng « %s »: lần thay đổi mật khẩu cuối cùng nằm trong tÆ°Æ¡ng lai.\n" + +#: src/pwconv.c:51 +#, c-format +msgid "" +"%s - convert to shadow account\n" +"\n" +msgstr "" +"%s — chuyển đổi sang tài khoản bóng\n" +"\n" + +#: src/pwconv.c:307 +#, c-format +msgid "Orphaned entry '%s' removed from shadow database.\n" +msgstr "Mục nhập côi cút « %s » bị gỡ bỏ khỏi cÆ¡ sở dữ liệu bóng.\n" + +#: src/pwconv.c:316 +#, c-format +msgid "Error while deleting `%s' shadow account.\n" +msgstr "Gặp lỗi trong khi xoá tài khoản bóng « %s ».\n" + +#: src/pwconv.c:343 +#, c-format +msgid "%s: Error trying to get data for `%s'\n" +msgstr "%s: Gặp lỗi khi thá»­ lấy dữ liệu cho « %s »\n" + +#: src/pwconv.c:365 src/pwconv.c:388 src/pwconv.c:419 src/pwconv.c:435 +#, c-format +msgid "Error while converting `%s' to shadow account.\n" +msgstr "Gặp lỗi khi chuyển đổi « %s » sang tài khoản bóng.\n" + +#: src/pwconv.c:466 +#, c-format +msgid "Error while renaming temporary shadow file: %m\n" +msgstr "Gặp lỗi khi thay đổi tên của tập tin bóng tạm thời: %m\n" + +#: src/pwconv.c:491 +#, c-format +msgid "Error while renaming temporary password file: %m\n" +msgstr "Gặp lỗi khi thay đổi tên của tập tin mật khẩu tạm thời: %m\n" + +#: src/pwunconv.c:51 +#, c-format +msgid "" +"%s - convert from shadow account\n" +"\n" +msgstr "" +"%s — chuyển đổi từ tài khoản bóng\n" +"\n" + +#: src/pwunconv.c:166 +#, c-format +msgid "%s: No shadow file found.\n" +msgstr "%s: Không tìm thấy tập tin bóng.\n" + +#: src/rpasswd.c:85 +#, c-format +msgid "Usage: %s [-4|-6][-a][-f config-file][-h hostname][-p port][-v][name]\n" +msgstr "" +"Sá»­ dụng: %s [-4|-6][-a][-f tập_tin_cấu_hình][-h tên_máy][-p cổng][-v][tên]\n" + +#: src/rpasswd.c:95 +msgid " -4 Use IPv4 only\n" +msgstr " -4 Dùng chỉ IPv4\n" + +#: src/rpasswd.c:96 +msgid " -6 Use IPv6 only\n" +msgstr " -6 Dùng chỉ IPv6\n" + +#: src/rpasswd.c:98 +msgid " -a Admin mode, special admin password is required\n" +msgstr " -a Chế độ quản lý, yêu cầu mật khẩu quản lý đặc biệt\n" + +#: src/rpasswd.c:100 +msgid " -f config-file Specify a different config file\n" +msgstr " -f tập_tin_cấu_hình Ghi rõ tập tin cấu hình khác\n" + +#: src/rpasswd.c:101 +msgid " -h hostname Specify the remote server\n" +msgstr " -h tên_máy Ghi rõ máy phục vụ từ xa\n" + +#: src/rpasswd.c:102 +msgid " -p port Specify port remote server is listening on\n" +msgstr "" +" -p cổng Ghi rõ cổng trên đó máy phục vụ từ xa đang lắng nghe\n" + +#: src/rpasswd.c:104 +msgid " -r level Specify level of SSL certificate checks\n" +msgstr " -r cấp Ghi rõ cấp kiểm tra chứng nhận SSL\n" + +#: src/rpasswd.c:107 +msgid " --no-slp Don't use SLP to find a server\n" +msgstr " --no-slp Đừng dùng SLP để tìm máy phục vụ\n" + +#: src/rpasswd.c:109 +msgid " -v, --verbose Be verbose, print SSL connection data\n" +msgstr " -v, --verbose Xuất chi tiết, in ra dữ liệu kết nối SSL\n" + +#: src/rpasswd.c:150 +#, c-format +msgid "Warning: cannot turn echo off\n" +msgstr "Cảnh báo : không thể tắt khả năng phản hồi\n" + +#: src/rpasswd.c:515 +#, c-format +msgid "SLP: Found Server on %s, port %s" +msgstr "SLP: Tìm được máy phục vụ trên %s, cổng %s" + +#: src/rpasswd.c:518 +#, c-format +msgid "SLP: Found Server on %s" +msgstr "SLP: Tìm được máy phục vụ trên %s" + +#: src/rpasswd.c:554 +#, c-format +msgid "Go away, you do not exist!" +msgstr "Cút đi! Ta không tồn tại." + +#: src/rpasswd.c:568 +#, c-format +msgid "No server specified\n" +msgstr "ChÆ°a ghi rõ máy phục vụ\n" + +#: src/rpasswd-client.c:57 src/rpasswd-client.c:60 +#, c-format +msgid "error while sending start request: %s\n" +msgstr "gặp lỗi khi gá»­i yêu cầu bắt đầu : %s\n" + +#: src/rpasswd-client.c:70 src/rpasswd-client.c:73 +#, c-format +msgid "error while sending locale data: %s\n" +msgstr "gặp lỗi khi gá»­i dữ liệu miền địa phÆ°Æ¡ng: %s\n" + +#: src/rpasswd-client.c:81 src/rpasswd-client.c:84 +#, c-format +msgid "error while sending username: %s\n" +msgstr "gặp lỗi khi gá»­i tên người dùng: %s\n" + +#: src/rpasswd-client.c:107 src/rpasswd-client.c:110 src/rpasswd-client.c:120 +#: src/rpasswd-client.c:123 +#, c-format +msgid "error while sending string: %s\n" +msgstr "gặp lỗi khi gá»­i chuỗi: %s\n" + +#: src/rpasswd-client.c:318 +msgid "Searching a server...\n" +msgstr "Đang tìm kiếm trên một máy phục vụ...\n" + +#: src/rpasswd-client.c:323 +#, c-format +msgid "Error opening SLP handle: %i.\n" +msgstr "Gặp lỗi khi mở bộ quản lý SLP: %i.\n" + +#: src/rpasswd-client.c:334 +msgid "No service found with SLP.\n" +msgstr "Không tìm thấy dịch vụ với SLP.\n" + +#: src/rpasswd-client.c:353 +msgid "Error while searching for SLP description.\n" +msgstr "Gặp lỗi khi tìm kiếm mô tả SLP.\n" + +#: src/rpasswd-client.c:372 +#, c-format +msgid "" +"\n" +"Please select a server:\n" +msgstr "" +"\n" +"Hãy chọn máy phục vụ :\n" + +#: src/rpasswd-client.c:378 +#, c-format +msgid " (port %s)" +msgstr " (cổng %s)" + +#: src/rpasswd-client.c:388 +#, c-format +msgid "Enter number of choice [1-%d]: " +msgstr "Gõ số thích hợp [1-%d]: " + +#: src/rpasswd-client.c:458 +msgid "parsing config file" +msgstr "đang phân tích tâp tin cấu hình" + +#: src/rpasswd-client.c:501 src/rpasswd-client.c:504 +msgid "Trying entry:" +msgstr "Đang thá»­ nhập:" + +#: src/rpasswd-client.c:543 +#, c-format +msgid "Entry \"%s\" is not valid!\n" +msgstr "Mục nhập « %s » không hợp lệ.\n" + +#: src/rpasswd-client.c:547 +#, c-format +msgid "Entry \"%s\" is not valid, ignored!\n" +msgstr "Mục nhập « %s » không hợp lệ nên bị bỏ qua.\n" + +#: src/rpasswd-client.c:560 +msgid "Bad entries found.\n" +msgstr "Tìm thấy mục nhập sai.\n" + +#: src/rpasswd-client.c:565 +msgid "No entry found.\n" +msgstr "Không tìm thấy.\n" + +#: src/rpasswd-client.c:575 +msgid "No entry found." +msgstr "Không tìm thấy." + +#: src/rpasswd-client.c:609 +msgid "Hostname or service not known for specified protocol\n" +msgstr "Tên máy hay dịch vụ không được nhận ra đối với giao thức đưa ra.\n" + +#: src/rpasswd-client.c:623 +#, c-format +msgid "bad port: %s\n" +msgstr "cổng sai: %s\n" + +#: src/rpasswd-client.c:648 src/rpasswd-client.c:657 +#, c-format +msgid "Trying %s port %d...\n" +msgstr "Đang thá»­ %s cổng %d...\n" + +#: src/rpasswd-client.c:663 +#, c-format +msgid "Trying %s...\n" +msgstr "Đang thá»­ %s...\n" + +#: src/rpasswd-client.c:677 +#, c-format +msgid "connect to address %s: %s\n" +msgstr "kết nối tới địa chỉ %s: %s\n" + +#: src/rpasswd-client.c:732 src/rpasswd-client.c:1028 +msgid "Server certificate info:\n" +msgstr "Thông tin chứng nhận máy phục vụ :\n" + +#: src/rpasswd-client.c:742 +#, c-format +msgid " Certificate is valid since: %s" +msgstr " Chứng nhận hợp lệ kế từ : %s" + +#: src/rpasswd-client.c:744 +#, c-format +msgid " Certificate expires: %s" +msgstr " Chứng nhận hết hạn: %s" + +#: src/rpasswd-client.c:750 +#, c-format +msgid " Certificate public key: %s" +msgstr " Khoá công chứng nhận: %s" + +#: src/rpasswd-client.c:756 +#, c-format +msgid " Certificate version: #%d\n" +msgstr " Phiên bản chứng nhận: #%d\n" + +#: src/rpasswd-client.c:761 src/rpasswd-client.c:1034 +#, c-format +msgid " DN: %s\n" +msgstr " DN: %s\n" + +#: src/rpasswd-client.c:765 src/rpasswd-client.c:1041 +#, c-format +msgid " Issuer's DN: %s\n" +msgstr " DN của nhà cấp: %s\n" + +#: src/rpasswd-client.c:846 +#, c-format +msgid "Handshake failed: %s\n" +msgstr "Lỗi thiết lập quan hệ: %s\n" + +#: src/rpasswd-client.c:869 +#, c-format +msgid "TLS certificate error: %s\n" +msgstr "Lỗi chứng nhận TLS: %s\n" + +#: src/rpasswd-client.c:880 +#, c-format +msgid "" +"%s connection using %s-%s (%s)\n" +"\n" +msgstr "" +"%s kết nối dùng %s-%s (%s)\n" +"\n" + +#: src/rpasswd-client.c:898 +msgid "TLS authentication error: server certificate issuer is unknown.\n" +msgstr "Lỗi xác thá»±c TLS: không nhận ra nhà cấp chứng nhận.\n" + +#: src/rpasswd-client.c:906 +msgid "TLS authentication error: server certificate is NOT trusted.\n" +msgstr "Lỗi xác thá»±c TLS: KHÔNG tin cây chứng nhận máy phục vụ.\n" + +#: src/rpasswd-client.c:917 +msgid "TLS authentication error: server certificate not yet activated.\n" +msgstr "Lỗi xác thá»±c TLS: chÆ°a kích hoạt chứng nhận máy phục vụ.\n" + +#: src/rpasswd-client.c:925 +msgid "TLS authentication error: server certificate expired.\n" +msgstr "Lỗi xác thá»±c TLS: chứng nhận máy phục vụ đã hết hạn dùng.\n" + +#: src/rpasswd-client.c:960 +#, c-format +msgid "error loading default verify locations: %s\n" +msgstr "gặp lỗi khi nạp các địa điểm thẩm tra mặc định: %s\n" + +#: src/rpasswd-client.c:968 +#, c-format +msgid "error setting default verify path: %s\n" +msgstr "gặp lỗi khi đặt đường dẫn thẩm tra mặc định: %s\n" + +#: src/rpasswd-client.c:1003 +#, fuzzy +msgid "Unable to get certificate from peer.\n" +msgstr "Không thể lấy en-tợ-rô-pi từ %s\n" + +#: src/rpasswd-client.c:1017 +#, c-format +msgid "" +"SSL connection using %s\n" +"\n" +msgstr "" +"Kết nối SSL, dùng %s\n" +"\n" + +#: src/rpasswd-client.c:1022 +msgid "Server does not have a certificate?\n" +msgstr "Máy phục vụ không có chứng nhận ?\n" + +#: src/rpasswdd.c:102 +#, c-format +msgid "" +"Usage: %s [-4] [-6] [-d] [-c certificate] [-k privatekey] [-p port]\n" +" [--slp [--slp-timeout timeout] [--slp-descr description]]\n" +msgstr "" +"Sá»­ dụng: %s [-4] [-6] [-d] [-c chứng_nhận] [-k khoá_riêng] [-p cổng]\n" +" [--slp [--slp-timeout thời_hạn] [--slp-descr mô_tả]]\n" + +#: src/rpasswdd.c:105 +#, c-format +msgid "Usage: %s [-4] [-6] [-d] [-c certificate] [-k privatekey] [-p port]\n" +msgstr "Sá»­ dụng: %s [-4] [-6] [-d] [-c chứng_nhận] [-k khoá_riêng] [-p cổng]\n" + +#: src/rpasswdd.c:116 +msgid " -4 Use IPv4\n" +msgstr " -4 Dùng IPv4\n" + +#: src/rpasswdd.c:117 +msgid " -6 Use IPv6\n" +msgstr " -6 Dùng IPv6\n" + +#: src/rpasswdd.c:118 +msgid " -c certificate Specify alternate certificate file\n" +msgstr " -c chứng_nhận Ghi rõ tập tin chứng nhận xen kẽ\n" + +#: src/rpasswdd.c:119 +msgid " -k privatekey Specify alternate file with private key\n" +msgstr " -k khoá_riêng Ghi rõ tập tin xen kẽ với khoá riêng\n" + +#: src/rpasswdd.c:121 +msgid " -d Run in debug mode\n" +msgstr " -d Chạy trong chế độ gỡ lỗi\n" + +#: src/rpasswdd.c:122 +msgid " -p port Port on which the server should listen\n" +msgstr " -p cổng Cổng trên đó máy phục vụ nên lắng nghe\n" + +#: src/rpasswdd.c:125 +msgid " --slp Register at local SLP server\n" +msgstr " --slp Đang ký với máy/trình phục vụ SLP cục bộ\n" + +#: src/rpasswdd.c:126 +msgid " --slp-timeout Set timeout for re-registration\n" +msgstr " --slp-timeout Đặt thời hạn đăng ký lại\n" + +#: src/rpasswdd.c:127 +msgid " --slp-descr Set a description shown to SLP clients\n" +msgstr " --slp-descr Đặt mô tả được hiển thị cho ứng dụng khách SLP\n" + +#: src/rpasswdd.c:710 +#, c-format +msgid "Please authenticate as %s on %s" +msgstr "Hãy xác thá»±c với tÆ° cách %s trên %s" + +#: src/rpasswdd.c:749 +#, c-format +msgid "" +"\n" +"Now enter the new password for %s" +msgstr "" +"\n" +"Hãy nhập mật khẩu mới cho %s" + +#: src/rpasswdd.c:770 +#, c-format +msgid "setresuid failed on server: %s" +msgstr "setresuid bị lỗi trên máy phục vụ : %s" + +#: src/rpasswdd.c:813 +msgid "Password not changed" +msgstr "ChÆ°a thay đổi mật khẩu" + +#: src/rpasswdd.c:816 +msgid "Password changed" +msgstr "Mật khẩu đã thay đổi" + +#: src/rpasswdd.c:1349 +msgid "already running" +msgstr "đang chạy" + +#: src/useradd.c:54 src/usermod.c:55 +#, c-format +msgid "Usage: %s ...\n" +msgstr "Sá»­ dụng: %s ...\n" + +#: src/useradd.c:61 +#, c-format +msgid "" +"%s - create a new user\n" +"\n" +msgstr "" +"%s — tạo một người dùng mới\n" +"\n" + +#: src/useradd.c:63 src/usermod.c:64 +msgid " -c comment Set the GECOS field for the new account\n" +msgstr " -c ghi_chú Đặt trường GECOS cho tài khoản mới\n" + +#: src/useradd.c:65 +msgid " --show-defaults Print default values\n" +msgstr " --show-defaults In ra các giá trị mặc định\n" + +#: src/useradd.c:66 +msgid " --save-defaults Save modified default values\n" +msgstr " --save-defaults LÆ°u các giá trị mặc định đã sá»­a đổi\n" + +#: src/useradd.c:68 src/usermod.c:69 +msgid " -d homedir Home directory for the new user\n" +msgstr " -d thÆ°_mục ThÆ° mục chính cho người dùng mới\n" + +#: src/useradd.c:69 src/usermod.c:70 +msgid " -e expire Date on which the new account will be disabled\n" +msgstr " -e ngày Ngày hết hạn dùng tài khoản mới\n" + +#: src/useradd.c:71 src/usermod.c:72 +msgid "" +" -f inactive Days after a password expires until account is disabled\n" +msgstr "" +" -f số Số các ngày sau khi mật khẩu hết hạn đến khi tài khoản " +"bị tắt\n" + +#: src/useradd.c:73 src/usermod.c:74 +msgid " -G group,... List of supplementary groups\n" +msgstr " -G nhóm,... Danh sách các nhóm phụ\n" + +#: src/useradd.c:74 src/usermod.c:75 +msgid " -g gid Name/number of the users primary group\n" +msgstr " -g gid Tên/số của nhóm chính của người dùng\n" + +#: src/useradd.c:78 +msgid " -m Create home directory for the new user\n" +msgstr " -m Tạo thÆ° mục chính cho người dùng mới\n" + +#: src/useradd.c:85 +msgid " -u uid Force the new userid to be the given number\n" +msgstr " -u số Ép buộc mã số người dùng (UID) mới là số này\n" + +#: src/useradd.c:87 +msgid " -U umask Umask value used for creating home directory\n" +msgstr " -U umask Giá trị umask được dùng để tạo thÆ° mục chính\n" + +#: src/useradd.c:90 src/usermod.c:88 +msgid " -s shell Name of the user's login shell\n" +msgstr " -s trình_bao Tên trình bao đăng nhập của người dùng\n" + +#: src/useradd.c:186 +#, c-format +msgid "%s: Invalid numeric argument `%s' for group ID.\n" +msgstr "%s: Đối số thuộc số không hợp lệ « %s » cho mã số nhóm (GID)\n" + +#: src/useradd.c:196 src/usermod.c:160 +#, c-format +msgid "%s: Group `%u' not found in service `%s'.\n" +msgstr "%s: Không tìm thấy nhóm « %u » trong dịch vụ « %s ».\n" + +#: src/useradd.c:202 src/usermod.c:166 +#, c-format +msgid "%s: Unknown group `%u'.\n" +msgstr "%s: Không nhận ra nhóm « %u ».\n" + +#: src/useradd.c:301 +#, c-format +msgid "%s: Unknown group `%s' in %s.\n" +msgstr "%s: Không nhận ra nhóm « %s » trong %s.\n" + +#: src/useradd.c:316 +#, c-format +msgid "%s: Invalid home directory `%s' in %s.\n" +msgstr "%s: ThÆ° mục chính không hợp lê « %s » trong %s.\n" + +#: src/useradd.c:335 +#, c-format +msgid "%s: Invalid numeric argument `%s' for `INACTIVE' in %s.\n" +msgstr "" +"%s: Đối số thuộc số không hợp lệ « %s » cho « INACTIVE » (bị động) trong %s.\n" + +#: src/useradd.c:358 +#, c-format +msgid "%s: Expiredate `%s' is no date and no integer value >= -1 in %s.\n" +msgstr "" +"%s: Ngày hết hạn « %s » không phải là ngày tháng và cÅ©ng không phải là giá " +"trị số nguyên ≥ -1 trong %s.\n" + +#: src/useradd.c:374 +#, c-format +msgid "%s: Invalid shell `%s' in %s.\n" +msgstr "%s: Trình bao không hợp lệ « %s » trong %s.\n" + +#: src/useradd.c:388 +#, c-format +msgid "%s: Skel directory \"%s\" in %s does not exist.\n" +msgstr "%s: ThÆ° mục skel « %s » trong %s không tồn tại.\n" + +#: src/useradd.c:449 +#, c-format +msgid "%s: Invalid value `%s' for option CREATE_MAIL_SPOOL in %s.\n" +msgstr "" +"%s: Giá trị không hợp lệ « %s » cho tùy chọn « CREATE_MAIL_SPOOL » (tạo ống " +"chỉ thÆ° tín) trong %s.\n" + +#: src/useradd.c:465 +#, c-format +msgid "%s: Invalid numeric argument `%s' for `UMASK' in %s.\n" +msgstr "%s: Đối số thuộc số không hợp lệ « %s » cho « UMASK » trong %s.\n" + +#: src/useradd.c:913 +#, c-format +msgid "%s: Can't get unique uid in range %u - %u.\n" +msgstr "%s: Không thể lấy UID duy nhất trong phạm vị %u - %u.\n" + +#: src/useradd.c:987 +#, c-format +msgid "%s: Can't stat `%s': %m\n" +msgstr "%s: Không thể lấy trạng thái về « %s »: %m\n" + +#: src/useradd.c:1018 +#, c-format +msgid "" +"%s: No group named \"mail\" exists, creating mail spool with mode 0600.\n" +msgstr "" +"%s: Không có nhóm tên « mail » (thÆ° tín) nên đang tạo ống chỉ thÆ° tín với chế " +"độ 0600.\n" + +#: src/useradd.c:1026 +#, c-format +msgid "%s: Can't create mail spool for user %s.\n" +msgstr "%s: Không thể tạo ống chỉ thÆ° tín cho người dùng %s.\n" + +#: src/useradd.c:1095 src/usermod.c:520 +#, c-format +msgid "%s: Cannot create directory `%s'.\n" +msgstr "%s: Không thể tạo thÆ° mục « %s ».\n" + +#: src/useradd.c:1100 src/usermod.c:525 src/usermod.c:549 +#, c-format +msgid "%s: Warning: chown on `%s' failed: %m\n" +msgstr "%s: Cảnh báo : lỗi chown (thay đổi tình trạng sở hữu) trên « %s »: %m\n" + +#: src/useradd.c:1103 src/usermod.c:528 +#, c-format +msgid "%s: Warning: chmod on `%s' failed: %m\n" +msgstr "%s: Cảnh báo : lỗi chmod (thay đổi chế độ) trên « %s »: %m\n" + +#: src/useradd.c:1126 +#, c-format +msgid "%s: Copying of skel directory failed.\n" +msgstr "%s: Lỗi sao chép thÆ° mục skel.\n" + +#: src/useradd.c:1136 +#, c-format +msgid "%s: Warning: home directory already exists, not modifying it.\n" +msgstr "%s: Cảnh báo : thÆ° mục chính đã có nên không sá»­a đổi.\n" + +#: src/useradd.c:1197 +#, c-format +msgid "%s: Reading of `%s' was not successful.\n" +msgstr "%s: Việc đọc « %s » đã không thành công.\n" + +#: src/useradd.c:1226 src/usermod.c:798 +#, c-format +msgid "%s: Invalid comment `%s'.\n" +msgstr "%s: Ghi chú không hợp lệ « %s ».\n" + +#: src/useradd.c:1243 src/usermod.c:812 +#, c-format +msgid "%s: Invalid home directory `%s'.\n" +msgstr "%s: ThÆ° mục chính không hợp lê « %s ».\n" + +#: src/useradd.c:1264 src/usermod.c:836 +#, c-format +msgid "%s: Expiredate `%s' is no date and no integer value >= -1.\n" +msgstr "" +"%s: Ngày hết hạn « %s » không phải là ngày tháng và cÅ©ng không phải là giá " +"trị số nguyên ≥ -1.\n" + +#: src/useradd.c:1280 +#, c-format +msgid "%s: Invalid numeric argument `%s' for `-f'.\n" +msgstr "%s: Đối số thuộc số không hợp lệ « %s » cho « -f ».\n" + +#: src/useradd.c:1299 +#, c-format +msgid "%s: Skel directory `%s' does not exist.\n" +msgstr "%s: ThÆ° mục skel « %s » không tồn tại.\n" + +#: src/useradd.c:1341 src/usermod.c:935 +#, c-format +msgid "%s: Invalid shell `%s'.\n" +msgstr "%s: Trình bao không hợp lệ « %s ».\n" + +#: src/useradd.c:1350 src/useradd.c:1374 +#, c-format +msgid "%s: Invalid numeric argument `%s' for User ID.\n" +msgstr "%s: Đối số thuộc số không hợp lệ « %s » cho mã số người dùng (UID).\n" + +#: src/useradd.c:1364 +#, c-format +msgid "%s: Invalid numeric argument `%s' for `-U'.\n" +msgstr "%s: Đối số thuộc số không hợp lệ « %s » cho « -Ut ».\n" + +#: src/useradd.c:1425 +#, c-format +msgid "%s: You cannot use --uid and --preferred-uid at the same time.\n" +msgstr "%s: Không thể sá»­ dụng đồng thời « --uid » và « --preferred-uid ».\n" + +#: src/useradd.c:1576 +#, c-format +msgid "%s: Writing of `%s' was not successful.\n" +msgstr "%s: Việc ghi « %s » đã không thành công.\n" + +#: src/useradd.c:1604 src/usermod.c:1335 +#, c-format +msgid "%s: UID %u is not unique.\n" +msgstr "%s: UID %u không phải duy nhất.\n" + +#: src/useradd.c:1616 src/usermod.c:1349 +#, c-format +msgid "%s: Invalid account name `%s'.\n" +msgstr "%s: Tên tài khoản không hợp lệ « %s ».\n" + +#: src/useradd.c:1637 src/usermod.c:1360 +#, c-format +msgid "%s: Account `%s' already exists.\n" +msgstr "%s: Tài khoản « %s » đã có.\n" + +#: src/useradd.c:1721 +#, c-format +msgid "%s: Error: Cannot clear old faillog entry: %s\n" +msgstr "%s: Lỗi: Không thể xoá sạch mục nhập ghi lÆ°u faillog cÅ© : %s\n" + +#: src/useradd.c:1734 +#, c-format +msgid "%s: Error: Cannot clear old lastlog entry: %s\n" +msgstr "%s: Lỗi: Không thể xoá sạch mục nhập ghi lÆ°u lastlog cÅ© : %s\n" + +#: src/useradd.c:1748 +#, c-format +msgid "%s: Cannot add user to LDAP database without DN.\n" +msgstr "" +"%s: Không thể thêm người dùng vào cÆ¡ sở dữ liệu LDAP mà không có DN (tên " +"khác biệt).\n" + +#: src/useradd.c:1765 +#, c-format +msgid "%s: User not added to LDAP database.\n" +msgstr "%s: Người dùng không được thêm vào cÆ¡ sở dữ liệu LDAP.\n" + +#: src/useradd.c:1793 src/usermod.c:397 src/usermod.c:635 src/usermod.c:1563 +#, c-format +msgid "%s: ERROR: Cannot find group `%s' anymore!\n" +msgstr "%s: LỖI: Không còn tìm thấy nhóm « %s » nữa.\n" + +#: src/useradd.c:1797 src/usermod.c:1567 src/usermod.c:1667 +#, c-format +msgid "%s: Cannot find group `%s' in service `%s', ignored.\n" +msgstr "%s: Không tìm thấy nhóm « %s » trong dịch vụ « %s », nên bị bỏ qua.\n" + +#: src/useradd.c:1813 src/usermod.c:1583 +#, c-format +msgid "%s: Cannot add user to groups stored in LDAP database without DN.\n" +msgstr "" +"%s: Không thể thêm người dùng vào nhóm được lÆ°u trong cÆ¡ sở dữ liệu LDAP mà " +"không có tên khác biệt (DN).\n" + +#: src/useradd.c:1821 src/useradd.c:1839 src/useradd.c:1856 src/usermod.c:1591 +#: src/usermod.c:1610 src/usermod.c:1628 +#, c-format +msgid "%s: User not added to LDAP group `%s'.\n" +msgstr "%s: Người dùng không được thêm vào nhóm LDAP « %s ».\n" + +#: src/useradd.c:1908 +#, c-format +msgid "%s: USERADD_CMD fails with exit code %d.\n" +msgstr "%s: USERADD_CMD bị lỗi với mã thoát %d.\n" + +#: src/userdel.c:54 +#, c-format +msgid "Usage: %s [-D binddn] [-P path] [-r [-f]] user\n" +msgstr "Sá»­ dụng: %s [-D binddn] [-P đường_dẫn] [-r [-f]] người_dùng\n" + +#: src/userdel.c:61 +#, c-format +msgid "" +"%s - delete a user and related files\n" +"\n" +msgstr "" +"%s — xoá một người dùng và các tập tin tÆ°Æ¡ng ứng\n" +"\n" + +#: src/userdel.c:63 +msgid " -r Remove home directory and mail spool\n" +msgstr " -r Gỡ bỏ thÆ° mục chính và ống chỉ thÆ° tín\n" + +#: src/userdel.c:65 +msgid " -f Force removal of files, even if not owned by user\n" +msgstr "" +" -f\t\tÉp buộc gỡ bỏ các tập tin, thậm chí nếu người dùng không sở hữu\n" + +#: src/userdel.c:175 src/userdel.c:194 +#, c-format +msgid "%s: directory `%s' is in use by `%s'.\n" +msgstr "%s: thÆ° mục « %s » đang được « %s » dùng.\n" + +#: src/userdel.c:262 src/usermod.c:1663 +#, c-format +msgid "%s: ERROR: cannot find group `%s' anymore!\n" +msgstr "%s: LỖI: không còn tìm được nhóm « %s » nữa.\n" + +#: src/userdel.c:279 src/usermod.c:652 src/usermod.c:1683 +#, c-format +msgid "" +"%s: Cannot remove user from groups stored in LDAP database without DN.\n" +msgstr "" +"%s: Không thể gỡ bỏ người dùng khỏi nhóm được lÆ°u trong cÆ¡ sở dữ liệu LDAP " +"mà không có tên khác biệt (DN).\n" + +#: src/userdel.c:287 src/userdel.c:306 src/usermod.c:664 src/usermod.c:687 +#: src/usermod.c:1691 src/usermod.c:1710 src/usermod.c:1728 +#, c-format +msgid "%s: User not removed from LDAP group `%s'.\n" +msgstr "%s: Người dùng không được gỡ bỏ khỏi nhóm LDAP « %s ».\n" + +#: src/userdel.c:327 src/usermod.c:709 +#, c-format +msgid "%s: User not removed from group `%s'.\n" +msgstr "%s: Người dùng không được gỡ bỏ khỏi nhóm « %s ».\n" + +#: src/userdel.c:537 +#, c-format +msgid "%s: account `%s' is currently in use.\n" +msgstr "%s: tài khoản « %s » đang được dùng.\n" + +#: src/userdel.c:559 +#, c-format +msgid "%s: USERDEL_PRECMD fails with exit code %d.\n" +msgstr "%s: USERDEL_PRECMD bị lỗi với mã thoát %d.\n" + +# Note the changed order of variables / Ghi chú đã thay đổi thứ tá»± hai biến +#: src/userdel.c:587 src/userdel.c:605 +#, c-format +msgid "%s: `%s' is not owned by `%s', not removed.\n" +msgstr "%1$s: %3$s không sở hữu %2$s thì sẽ không gỡ bỏ nó.\n" + +#: src/userdel.c:593 src/userdel.c:615 +#, c-format +msgid "%s: warning: can't remove `%s': %s" +msgstr "%s: cảnh báo : không thể gỡ bỏ « %s »: %s" + +#: src/userdel.c:625 +#, c-format +msgid "%s: directory `%s' not removed.\n" +msgstr "%s: đã không gỡ bỏ thÆ° mục « %s ».\n" + +#: src/userdel.c:637 +#, c-format +msgid "%s: error deleting user `%s'.\n" +msgstr "%s: gặp lỗi khi xoá người dùng « %s ».\n" + +#: src/userdel.c:659 +#, c-format +msgid "%s: USERDEL_POSTCMD fails with exit code %d.\n" +msgstr "%s: USERDEL_POSTCMD bị lỗi với mã thoát %d.\n" + +#: src/usermod.c:62 +#, c-format +msgid "" +"%s - modify a user account\n" +"\n" +msgstr "" +"%s — sá»­a đổi một tài khoản người dùng\n" +"\n" + +#: src/usermod.c:77 +msgid " -l login Change login name.\n" +msgstr " -l tên Thay đổi tên đăng nhập.\n" + +#: src/usermod.c:78 +msgid " -m Move home directory to the new path\n" +msgstr " -m Di chuyển thÆ° mục chính sang đường dẫn mới\n" + +#: src/usermod.c:80 +msgid " -A group,... List of groups the user should be added to\n" +msgstr " -A nhóm,... Danh sách các nhóm vào chúng cần thêm người dùng\n" + +#: src/usermod.c:82 +msgid " -R group,... List of groups the user should be removed from\n" +msgstr " -R nhóm,... Danh sách các nhóm khỏi chúng cần gỡ bỏ người dùng\n" + +#: src/usermod.c:89 +msgid " -u uid Change the userid to the given number\n" +msgstr " -u số Thay đổi mã số người dùng (UID) thành số này\n" + +#: src/usermod.c:92 +msgid " -L Locks the password entry for \"user\"\n" +msgstr " -L Khoá mục nhâp mật khẩu cho « người dùng »\n" + +#: src/usermod.c:94 +msgid " -U Try to unlock the password entry for \"user\"\n" +msgstr " -U Thá»­ mở khoá mục nhâp mật khẩu cho « người dùng »\n" + +#: src/usermod.c:149 src/usermod.c:853 src/usermod.c:948 +#, c-format +msgid "%s: Invalid numeric argument `%s'.\n" +msgstr "%s: Đối số thuộc số không hợp lệ « %s ».\n" + +#: src/usermod.c:416 +#, c-format +msgid "%s: User not renamed in LDAP group `%s'.\n" +msgstr "%s: Đã không thay đổi tên người dùng trong nhóm LDAP « %s ».\n" + +#: src/usermod.c:433 +#, c-format +msgid "%s: User not renamed from LDAP group `%s'.\n" +msgstr "%s: Đã không thay đổi tên người dùng từ nhóm LDAP « %s ».\n" + +#: src/usermod.c:455 +#, c-format +msgid "%s: User not renamed in group `%s'.\n" +msgstr "%s: Đã không thay đổi tên người dùng trong nhóm « %s ».\n" + +#: src/usermod.c:558 +#, c-format +msgid "%s: Cannot copy directory %s to %s.\n" +msgstr "%s: Không thể sao chép thÆ° mục %s sang %s.\n" + +#: src/usermod.c:565 +#, c-format +msgid "%s: Cannot rename directory %s to %s.\n" +msgstr "%s: Không thể thay đổi tên thÆ° mục %s thành %s.\n" + +#: src/usermod.c:1067 +#, c-format +msgid "%s: Account `%s' does not exist.\n" +msgstr "%s: Tài khoản « %s » không tồn tại.\n" + +#: src/usermod.c:1175 src/usermod.c:1240 +#, c-format +msgid "%s: `%s' is primary group name.\n" +msgstr "%s: « %s » là tên nhóm chính.\n" + +#: src/usermod.c:1323 +#, c-format +msgid "%s: Account `%s' is currently in use.\n" +msgstr "%s: Tài khoản « %s » dang được dùng.\n" + +#: src/usermod.c:1418 +#, c-format +msgid "%s: Shadow passwords required for -e and -f.\n" +msgstr "%s: Mật khẩu bóng cần thiết cho hai tùy chọn « -e » và « -f ».\n" + +#: src/usermod.c:1443 +#, c-format +msgid "%s: Cannot modify user in LDAP database without DN.\n" +msgstr "" +"%s: Không thể sá»­a đổi người dùng trong cÆ¡ sở dữ liệu LDAP mà không có tên " +"khác biệt (DN).\n" + +#: src/usermod.c:1461 +#, c-format +msgid "%s: User not modified in LDAP database.\n" +msgstr "%s: Đã không sá»­a đổi người dùng trong cÆ¡ sở dữ liệu LDAP.\n" + +#: src/usermod.c:1780 src/usermod.c:1791 src/usermod.c:1817 +#, c-format +msgid "%s: Error: Cannot copy faillog entry: %s\n" +msgstr "%s: Lỗi: Không thể sao chép mục nhập ghi lÆ°u faillog: %s\n" + +#: src/usermod.c:1806 +#, c-format +msgid "%s: Error: Cannot copy lastlog entry: %s\n" +msgstr "%s: Lỗi: Không thể sao chép mục nhập ghi lÆ°u lastlog: %s\n" + +#: src/vipw.c:58 +#, c-format +msgid "Usage: %s [-g|-p|-s]\n" +msgstr "Sá»­ dụng: %s [-g|-p|-s]\n" + +#: src/vipw.c:66 +#, c-format +msgid "" +"%s - edit the password, group or shadow file\n" +"\n" +msgstr "" +"%s — hiệu chỉnh tập tin loại mật khẩu, nhom hay bóng.\n" +"\n" + +#: src/vipw.c:69 +msgid " -g, --group Edit the /etc/group file\n" +msgstr " -g, --group Hiệu chỉnh tập tin « /etc/group »\n" + +#: src/vipw.c:70 +msgid " -p, --passwd Edit the /etc/passwd file\n" +msgstr " -p, --passwd Hiệu chỉnh tập tin « /etc/passwd »\n" + +#: src/vipw.c:71 +msgid " -s, --shadow Edit the /etc/shadow file\n" +msgstr " -s, --shadow Hiệu chỉnh tập tin « /etc/shadow »\n" + +#: src/vipw.c:164 +#, c-format +msgid "Cannot lock `%s': already locked.\n" +msgstr "Không thể khoá « %s » vì nó đã khoá.\n" + +#: src/vipw.c:278 +#, c-format +msgid "%s: no changes made\n" +msgstr "%s: chÆ°a thay đổi gì\n" + +#: src/vipw.c:318 +#, c-format +msgid "Warning: cannot create backup file: %m\n" +msgstr "Cảnh báo : không thể tạo tập tin sao lÆ°u : %m\n" + +#~ msgid "cannot open socket: %s" +#~ msgstr "không thể mở ổ cắm: %s" + +#~ msgid "cannot enable socket to accept connections: %s" +#~ msgstr "không thể bật ổ cắm chấp nhận kết nối: %s" + +#~ msgid "handle_request: request received (Version = %d)" +#~ msgstr "handle_request: nhận được yêu cầu (Phiên bản = %d)" + +#~ msgid "cannot handle request version %d; current version is %d" +#~ msgstr "không thể quản lý yêu cầu phiên bản %d; phiên bản hiện thời là %d" + +#~ msgid "User %s: %s" +#~ msgstr "Người dùng %s: %s" + +#~ msgid "handle_request: exit (%d)" +#~ msgstr "handle_request: thoát (%d)" + +#~ msgid "while accepting connection: %s" +#~ msgstr "trong khi chấp nhận kết nối: %s" + +#~ msgid "Handshake has failed (%s)" +#~ msgstr "Lỗi thiết lập quan hệ (%s)" + +#~ msgid "client has closed the GNUTLS connection" +#~ msgstr "ứng dụng khách đã đóng kết nối GNUTLS" + +#~ msgid "cannot enable SSL encryption" +#~ msgstr "không thể bật mật mã SSL" + +#~ msgid "locale length in request too long: %d" +#~ msgstr "yêu cầu chứa chiều dài miền địa phÆ°Æ¡ng quá lớn: %d" + +#~ msgid "error while reading request locale: %s" +#~ msgstr "gặp lỗi khi đọc miền địa phÆ°Æ¡ng yêu cầu : %s" + +#~ msgid "data length in request too long: %d" +#~ msgstr "yêu cầu chứa chiều dài dữ liệu quá lớn: %d" + +#~ msgid "error while reading request username: %s" +#~ msgstr "gặp lỗi khi đọc tên người dùng yêu cầu : %s" + +#~ msgid "No username supplied" +#~ msgstr "ChÆ°a cung cấp tên người dùng" diff --git a/src/Makefile.am b/src/Makefile.am new file mode 100644 index 0000000..7d2e327 --- /dev/null +++ b/src/Makefile.am @@ -0,0 +1,159 @@ +# +# Copyright (c) 2002-2005, 2009 Thorsten Kukuk, Germany +# +# Author: Thorsten Kukuk +# +AUTOMAKE_OPTIONS = 1.7 gnits +MAINT_CHARSET = latin1 +# +LN_F = ln -f +RM_F = rm -f + +AM_CFLAGS = @EXTRA_CFLAGS@ +DEFS = @DEFS@ -DLOCALEDIR=\"$(localedir)\" +LDADD = @LIBINTL@ + +localedir = $(datadir)/locale +pamdir = $(libdir)/security + +INCLUDES = -I$(srcdir) -I$(top_srcdir)/lib -I$(top_srcdir) \ + -DLOCALEDIR=\"$(localedir)\" + +CLEANFILES = *~ tst-chage.* tst-passwd.* tst-group.* tst-groupadd.* \ + tst-long-group-entry.* tst-32bit-uid-gid.* tst-userdel.* \ + tst-groupmod.* tst-pwconv.* tst-pwunconv.* tst-pwck.* \ + tst-grpck.* tst-usermod.* tst-gpasswd.* ${EXTRA_PRGRAMS} + +bin_PROGRAMS = chage chfn chsh expiry gpasswd newgrp passwd rpasswd + +sbin_PROGRAMS = chpasswd groupadd groupdel groupmod grpconv grpunconv \ + pwconv pwunconv rpasswdd useradd userdel usermod vipw \ + pwck grpck + +if build_PAM_RPASSWD +pam_LTLIBRARIES = pam_rpasswd.la +endif + + +TESTS = tst-useradd tst-chage tst-passwd tst-groupadd tst-long-group-entry \ + tst-32bit-uid-gid tst-userdel tst-groupmod tst-pwconv tst-pwunconv \ + tst-pwck tst-grpck tst-usermod tst-gpasswd + +EXTRA_DIST = ${MANS} ${TESTS} rpasswd-client.c pam_rpasswd.map pam_rpasswd.8 + +man_MANS = chfn.1 chsh.1 expiry.1 passwd.1 rpasswd.conf.5 rpasswd.1 sg.1 \ + rpasswdd.8 chage.1 chpasswd.8 useradd.8 userdel.8 usermod.8 pwconv.8 \ + pwunconv.8 gpasswd.1 groupadd.8 groupdel.8 groupmod.8 grpconv.8 \ + grpunconv.8 vigr.8 vipw.8 newgrp.1 grpck.8 pwck.8 + +if build_PAM_RPASSWD +man_MANS += pam_rpasswd.8 +endif + +noinst_HEADERS = rpasswd-client.h + +pam_rpasswd_la_LDFLAGS = -Wl,--version-script=$(srcdir)/pam_rpasswd.map \ + -Wl,-no-undefined -no-undefined -avoid-version -module -shared \ + -Wl,-soname,pam_rpasswd.so +pam_rpasswd_la_CFLAGS = @EXTRA_CFLAGS@ -fPIC +pam_rpasswd_la_LIBADD = @PAM_LIBS@ @TLS_LIBS@ @SLP_LIBS@ + +chage_SOURCES = chage.c +chage_CFLAGS = @PIE_CFLAGS@ +chage_LDADD = ../lib/libpwdutils.a @PAM_LIBS@ @LDAP_LIBS@ @NSL_LIB@ @SELINUX_LIB@ @ATTR_LIB@ @NSCD_LIB@ +chage_LDFLAGS = @PIE_LDFLAGS@ + +chfn_SOURCES = chfn.c +chfn_CFLAGS = @PIE_CFLAGS@ +chfn_LDADD = ../lib/libpwdutils.a @PAM_LIBS@ @LDAP_LIBS@ @NSL_LIB@ @SELINUX_LIB@ @ATTR_LIB@ @NSCD_LIB@ @NSCD_LIB@ +chfn_LDFLAGS = @PIE_LDFLAGS@ + +chsh_SOURCES = chsh.c +chsh_CFLAGS = @PIE_CFLAGS@ +chsh_LDADD = ../lib/libpwdutils.a @PAM_LIBS@ @LDAP_LIBS@ @NSL_LIB@ @SELINUX_LIB@ @ATTR_LIB@ @NSCD_LIB@ +chsh_LDFLAGS = @PIE_LDFLAGS@ + +chpasswd_SOURCES = chpasswd.c +chpasswd_LDADD = ../lib/libpwdutils.a @LDAP_LIBS@ @NSL_LIB@ @CRYPT_LIB@ @SELINUX_LIB@ @ATTR_LIB@ @NSCD_LIB@ + +passwd_SOURCES = passwd.c +passwd_CFLAGS = @PIE_CFLAGS@ +passwd_LDADD = ../lib/libpwdutils.a @PAM_LIBS@ @LDAP_LIBS@ @NSL_LIB@ @SELINUX_LIB@ @ATTR_LIB@ @NSCD_LIB@ @BIOAPI_LIB@ +passwd_LDFLAGS = @PIE_LDFLAGS@ + +rpasswd_SOURCES = rpasswd.c +rpasswd_LDADD = ../lib/libpwdutils.a @TLS_LIBS@ @SLP_LIBS@ + +rpasswdd_SOURCES = rpasswdd.c +rpasswdd_LDADD = ../lib/libpwdutils.a @PAM_LIBS@ @TLS_LIBS@ @SLP_LIBS@ +rpasswdd_CFLAGS = @EXTRA_CFLAGS@ @PIE_CFLAGS@ +rpasswdd_LDFLAGS = @PIE_LDFLAGS@ + +expiry_SOURCES = expiry.c +expiry_CFLAGS = @EXTRA_CFLAGS@ @PIE_CFLAGS@ \ + -DPASSWD_PROGRAM=\"$(bindir)/passwd\" +expiry_LDADD = ../lib/libpwdutils.a @DL_LIBS@ +expiry_LDFLAGS = @PIE_LDFLAGS@ + +gpasswd_SOURCES = gpasswd.c +gpasswd_CFLAGS = @PIE_CFLAGS@ +gpasswd_LDADD = ../lib/libpwdutils.a @CRYPT_LIB@ @NSL_LIB@ @LDAP_LIBS@ @SELINUX_LIB@ @ATTR_LIB@ @NSCD_LIB@ +gpasswd_LDFLAGS = @PIE_LDFLAGS@ + +groupadd_SOURCES = groupadd.c +groupadd_LDADD = ../lib/libpwdutils.a @PAM_LIBS@ @LDAP_LIBS@ @NSL_LIB@ @SELINUX_LIB@ @ATTR_LIB@ @NSCD_LIB@ + +groupdel_SOURCES = groupdel.c +groupdel_LDADD = ../lib/libpwdutils.a @PAM_LIBS@ @LDAP_LIBS@ @NSL_LIB@ @SELINUX_LIB@ @ATTR_LIB@ @NSCD_LIB@ + +groupmod_SOURCES = groupmod.c +groupmod_LDADD = ../lib/libpwdutils.a @PAM_LIBS@ @LDAP_LIBS@ @NSL_LIB@ @SELINUX_LIB@ @ATTR_LIB@ @NSCD_LIB@ + +grpck_SOURCES = grpck.c +grpck_LDADD = ../lib/libpwdutils.a @SELINUX_LIB@ @ATTR_LIB@ + +grpconv_SOURCES = grpconv.c +grpconv_LDADD = ../lib/libpwdutils.a + +grpunconv_SOURCES = grpunconv.c +grpunconv_LDADD = ../lib/libpwdutils.a @LDAP_LIBS@ @NSL_LIB@ @SELINUX_LIB@ @ATTR_LIB@ @NSCD_LIB@ + +pwck_SOURCES = pwck.c +pwck_LDADD = ../lib/libpwdutils.a @SELINUX_LIB@ @ATTR_LIB@ + +pwconv_SOURCES = pwconv.c +pwconv_LDADD = ../lib/libpwdutils.a @LDAP_LIBS@ @NSL_LIB@ @SELINUX_LIB@ @ATTR_LIB@ @NSCD_LIB@ + +pwunconv_SOURCES = pwunconv.c +pwunconv_LDADD = ../lib/libpwdutils.a @LDAP_LIBS@ @NSL_LIB@ @SELINUX_LIB@ @ATTR_LIB@ @NSCD_LIB@ + +useradd_SOURCES = useradd.c +useradd_LDADD = ../lib/libpwdutils.a @PAM_LIBS@ @LDAP_LIBS@ @NSL_LIB@ @SELINUX_LIB@ @ATTR_LIB@ @NSCD_LIB@ + +userdel_SOURCES = userdel.c +userdel_LDADD = ../lib/libpwdutils.a @PAM_LIBS@ @LDAP_LIBS@ @NSL_LIB@ @SELINUX_LIB@ @ATTR_LIB@ @NSCD_LIB@ + +usermod_SOURCES = usermod.c +usermod_LDADD = ../lib/libpwdutils.a @PAM_LIBS@ @LDAP_LIBS@ @NSL_LIB@ @SELINUX_LIB@ @ATTR_LIB@ @NSCD_LIB@ + +vipw_SOURCES = vipw.c +vipw_LDADD = ../lib/libpwdutils.a @SELINUX_LIB@ @ATTR_LIB@ + +newgrp_SOURCES = newgrp.c +newgrp_CFLAGS = @PIE_CFLAGS@ +newgrp_LDADD = ../lib/libpwdutils.a @CRYPT_LIB@ +newgrp_LDFLAGS = @PIE_LDFLAGS@ + +install-exec-hook: + $(LN_F) $(DESTDIR)$(sbindir)/vipw $(DESTDIR)$(sbindir)/vigr + $(LN_F) $(DESTDIR)$(bindir)/newgrp $(DESTDIR)$(bindir)/sg + if test $$UID == 0; then \ + list='chage chfn chsh expiry passwd'; \ + for p in $$list ; do \ + chgrp shadow $(DESTDIR)$(bindir)/$$p; \ + chmod g+s $(DESTDIR)$(bindir)/$$p; \ + done ; \ + fi + +uninstall-hook: + $(RM_F) $(DESTDIR)$(sbindir)/vigr $(DESTDIR)$(bindir)/sg \ No newline at end of file diff --git a/src/Makefile.in b/src/Makefile.in new file mode 100644 index 0000000..2338bad --- /dev/null +++ b/src/Makefile.in @@ -0,0 +1,1278 @@ +# Makefile.in generated by automake 1.10.1 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + + + +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +bin_PROGRAMS = chage$(EXEEXT) chfn$(EXEEXT) chsh$(EXEEXT) \ + expiry$(EXEEXT) gpasswd$(EXEEXT) newgrp$(EXEEXT) \ + passwd$(EXEEXT) rpasswd$(EXEEXT) +sbin_PROGRAMS = chpasswd$(EXEEXT) groupadd$(EXEEXT) groupdel$(EXEEXT) \ + groupmod$(EXEEXT) grpconv$(EXEEXT) grpunconv$(EXEEXT) \ + pwconv$(EXEEXT) pwunconv$(EXEEXT) rpasswdd$(EXEEXT) \ + useradd$(EXEEXT) userdel$(EXEEXT) usermod$(EXEEXT) \ + vipw$(EXEEXT) pwck$(EXEEXT) grpck$(EXEEXT) +@build_PAM_RPASSWD_TRUE@am__append_1 = pam_rpasswd.8 +subdir = src +DIST_COMMON = $(noinst_HEADERS) $(srcdir)/Makefile.am \ + $(srcdir)/Makefile.in +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/m4/getline.m4 \ + $(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/iconv.m4 \ + $(top_srcdir)/m4/isc-posix.m4 \ + $(top_srcdir)/m4/japhar_grep_cflags.m4 \ + $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \ + $(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libtool.m4 \ + $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ + $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ + $(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \ + $(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.in +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = `echo $$p | sed -e 's|^.*/||'`; +am__installdirs = "$(DESTDIR)$(pamdir)" "$(DESTDIR)$(bindir)" \ + "$(DESTDIR)$(sbindir)" "$(DESTDIR)$(man1dir)" \ + "$(DESTDIR)$(man5dir)" "$(DESTDIR)$(man8dir)" +pamLTLIBRARIES_INSTALL = $(INSTALL) +LTLIBRARIES = $(pam_LTLIBRARIES) +pam_rpasswd_la_DEPENDENCIES = +pam_rpasswd_la_SOURCES = pam_rpasswd.c +pam_rpasswd_la_OBJECTS = pam_rpasswd_la-pam_rpasswd.lo +pam_rpasswd_la_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=link $(CCLD) $(pam_rpasswd_la_CFLAGS) \ + $(CFLAGS) $(pam_rpasswd_la_LDFLAGS) $(LDFLAGS) -o $@ +@build_PAM_RPASSWD_TRUE@am_pam_rpasswd_la_rpath = -rpath $(pamdir) +binPROGRAMS_INSTALL = $(INSTALL_PROGRAM) +sbinPROGRAMS_INSTALL = $(INSTALL_PROGRAM) +PROGRAMS = $(bin_PROGRAMS) $(sbin_PROGRAMS) +am_chage_OBJECTS = chage-chage.$(OBJEXT) +chage_OBJECTS = $(am_chage_OBJECTS) +chage_DEPENDENCIES = ../lib/libpwdutils.a +chage_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=link $(CCLD) $(chage_CFLAGS) $(CFLAGS) $(chage_LDFLAGS) \ + $(LDFLAGS) -o $@ +am_chfn_OBJECTS = chfn-chfn.$(OBJEXT) +chfn_OBJECTS = $(am_chfn_OBJECTS) +chfn_DEPENDENCIES = ../lib/libpwdutils.a +chfn_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=link $(CCLD) $(chfn_CFLAGS) $(CFLAGS) $(chfn_LDFLAGS) \ + $(LDFLAGS) -o $@ +am_chpasswd_OBJECTS = chpasswd.$(OBJEXT) +chpasswd_OBJECTS = $(am_chpasswd_OBJECTS) +chpasswd_DEPENDENCIES = ../lib/libpwdutils.a +am_chsh_OBJECTS = chsh-chsh.$(OBJEXT) +chsh_OBJECTS = $(am_chsh_OBJECTS) +chsh_DEPENDENCIES = ../lib/libpwdutils.a +chsh_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=link $(CCLD) $(chsh_CFLAGS) $(CFLAGS) $(chsh_LDFLAGS) \ + $(LDFLAGS) -o $@ +am_expiry_OBJECTS = expiry-expiry.$(OBJEXT) +expiry_OBJECTS = $(am_expiry_OBJECTS) +expiry_DEPENDENCIES = ../lib/libpwdutils.a +expiry_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=link $(CCLD) $(expiry_CFLAGS) $(CFLAGS) \ + $(expiry_LDFLAGS) $(LDFLAGS) -o $@ +am_gpasswd_OBJECTS = gpasswd-gpasswd.$(OBJEXT) +gpasswd_OBJECTS = $(am_gpasswd_OBJECTS) +gpasswd_DEPENDENCIES = ../lib/libpwdutils.a +gpasswd_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=link $(CCLD) $(gpasswd_CFLAGS) $(CFLAGS) \ + $(gpasswd_LDFLAGS) $(LDFLAGS) -o $@ +am_groupadd_OBJECTS = groupadd.$(OBJEXT) +groupadd_OBJECTS = $(am_groupadd_OBJECTS) +groupadd_DEPENDENCIES = ../lib/libpwdutils.a +am_groupdel_OBJECTS = groupdel.$(OBJEXT) +groupdel_OBJECTS = $(am_groupdel_OBJECTS) +groupdel_DEPENDENCIES = ../lib/libpwdutils.a +am_groupmod_OBJECTS = groupmod.$(OBJEXT) +groupmod_OBJECTS = $(am_groupmod_OBJECTS) +groupmod_DEPENDENCIES = ../lib/libpwdutils.a +am_grpck_OBJECTS = grpck.$(OBJEXT) +grpck_OBJECTS = $(am_grpck_OBJECTS) +grpck_DEPENDENCIES = ../lib/libpwdutils.a +am_grpconv_OBJECTS = grpconv.$(OBJEXT) +grpconv_OBJECTS = $(am_grpconv_OBJECTS) +grpconv_DEPENDENCIES = ../lib/libpwdutils.a +am_grpunconv_OBJECTS = grpunconv.$(OBJEXT) +grpunconv_OBJECTS = $(am_grpunconv_OBJECTS) +grpunconv_DEPENDENCIES = ../lib/libpwdutils.a +am_newgrp_OBJECTS = newgrp-newgrp.$(OBJEXT) +newgrp_OBJECTS = $(am_newgrp_OBJECTS) +newgrp_DEPENDENCIES = ../lib/libpwdutils.a +newgrp_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=link $(CCLD) $(newgrp_CFLAGS) $(CFLAGS) \ + $(newgrp_LDFLAGS) $(LDFLAGS) -o $@ +am_passwd_OBJECTS = passwd-passwd.$(OBJEXT) +passwd_OBJECTS = $(am_passwd_OBJECTS) +passwd_DEPENDENCIES = ../lib/libpwdutils.a +passwd_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=link $(CCLD) $(passwd_CFLAGS) $(CFLAGS) \ + $(passwd_LDFLAGS) $(LDFLAGS) -o $@ +am_pwck_OBJECTS = pwck.$(OBJEXT) +pwck_OBJECTS = $(am_pwck_OBJECTS) +pwck_DEPENDENCIES = ../lib/libpwdutils.a +am_pwconv_OBJECTS = pwconv.$(OBJEXT) +pwconv_OBJECTS = $(am_pwconv_OBJECTS) +pwconv_DEPENDENCIES = ../lib/libpwdutils.a +am_pwunconv_OBJECTS = pwunconv.$(OBJEXT) +pwunconv_OBJECTS = $(am_pwunconv_OBJECTS) +pwunconv_DEPENDENCIES = ../lib/libpwdutils.a +am_rpasswd_OBJECTS = rpasswd.$(OBJEXT) +rpasswd_OBJECTS = $(am_rpasswd_OBJECTS) +rpasswd_DEPENDENCIES = ../lib/libpwdutils.a +am_rpasswdd_OBJECTS = rpasswdd-rpasswdd.$(OBJEXT) +rpasswdd_OBJECTS = $(am_rpasswdd_OBJECTS) +rpasswdd_DEPENDENCIES = ../lib/libpwdutils.a +rpasswdd_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=link $(CCLD) $(rpasswdd_CFLAGS) $(CFLAGS) \ + $(rpasswdd_LDFLAGS) $(LDFLAGS) -o $@ +am_useradd_OBJECTS = useradd.$(OBJEXT) +useradd_OBJECTS = $(am_useradd_OBJECTS) +useradd_DEPENDENCIES = ../lib/libpwdutils.a +am_userdel_OBJECTS = userdel.$(OBJEXT) +userdel_OBJECTS = $(am_userdel_OBJECTS) +userdel_DEPENDENCIES = ../lib/libpwdutils.a +am_usermod_OBJECTS = usermod.$(OBJEXT) +usermod_OBJECTS = $(am_usermod_OBJECTS) +usermod_DEPENDENCIES = ../lib/libpwdutils.a +am_vipw_OBJECTS = vipw.$(OBJEXT) +vipw_OBJECTS = $(am_vipw_OBJECTS) +vipw_DEPENDENCIES = ../lib/libpwdutils.a +DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) +depcomp = $(SHELL) $(top_srcdir)/depcomp +am__depfiles_maybe = depfiles +COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ + $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ + $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +CCLD = $(CC) +LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \ + $(LDFLAGS) -o $@ +SOURCES = pam_rpasswd.c $(chage_SOURCES) $(chfn_SOURCES) \ + $(chpasswd_SOURCES) $(chsh_SOURCES) $(expiry_SOURCES) \ + $(gpasswd_SOURCES) $(groupadd_SOURCES) $(groupdel_SOURCES) \ + $(groupmod_SOURCES) $(grpck_SOURCES) $(grpconv_SOURCES) \ + $(grpunconv_SOURCES) $(newgrp_SOURCES) $(passwd_SOURCES) \ + $(pwck_SOURCES) $(pwconv_SOURCES) $(pwunconv_SOURCES) \ + $(rpasswd_SOURCES) $(rpasswdd_SOURCES) $(useradd_SOURCES) \ + $(userdel_SOURCES) $(usermod_SOURCES) $(vipw_SOURCES) +DIST_SOURCES = pam_rpasswd.c $(chage_SOURCES) $(chfn_SOURCES) \ + $(chpasswd_SOURCES) $(chsh_SOURCES) $(expiry_SOURCES) \ + $(gpasswd_SOURCES) $(groupadd_SOURCES) $(groupdel_SOURCES) \ + $(groupmod_SOURCES) $(grpck_SOURCES) $(grpconv_SOURCES) \ + $(grpunconv_SOURCES) $(newgrp_SOURCES) $(passwd_SOURCES) \ + $(pwck_SOURCES) $(pwconv_SOURCES) $(pwunconv_SOURCES) \ + $(rpasswd_SOURCES) $(rpasswdd_SOURCES) $(useradd_SOURCES) \ + $(userdel_SOURCES) $(usermod_SOURCES) $(vipw_SOURCES) +man1dir = $(mandir)/man1 +man5dir = $(mandir)/man5 +man8dir = $(mandir)/man8 +NROFF = nroff +MANS = $(man_MANS) +HEADERS = $(noinst_HEADERS) +ETAGS = etags +CTAGS = ctags +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +AMTAR = @AMTAR@ +AR = @AR@ +ATTR_LIB = @ATTR_LIB@ +AUDIT_LIBS = @AUDIT_LIBS@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +BIOAPI_LIB = @BIOAPI_LIB@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CRYPT_LIB = @CRYPT_LIB@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ -DLOCALEDIR=\"$(localedir)\" +DEPDIR = @DEPDIR@ +DL_LIBS = @DL_LIBS@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +EXTRA_CFLAGS = @EXTRA_CFLAGS@ +FGREP = @FGREP@ +GMSGFMT = @GMSGFMT@ +GMSGFMT_015 = @GMSGFMT_015@ +GREP = @GREP@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +INTLLIBS = @INTLLIBS@ +INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ +LAUS_LIBS = @LAUS_LIBS@ +LD = @LD@ +LDAP_LIBS = @LDAP_LIBS@ +LDFLAGS = @LDFLAGS@ +LIBICONV = @LIBICONV@ +LIBINTL = @LIBINTL@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBICONV = @LTLIBICONV@ +LTLIBINTL = @LTLIBINTL@ +LTLIBOBJS = @LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +MKDIR_P = @MKDIR_P@ +MSGFMT = @MSGFMT@ +MSGFMT_015 = @MSGFMT_015@ +MSGMERGE = @MSGMERGE@ +NM = @NM@ +NMEDIT = @NMEDIT@ +NSCD_LIB = @NSCD_LIB@ +NSL_LIB = @NSL_LIB@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PAM_LIBS = @PAM_LIBS@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PIE_CFLAGS = @PIE_CFLAGS@ +PIE_LDFLAGS = @PIE_LDFLAGS@ +POSUB = @POSUB@ +RANLIB = @RANLIB@ +SED = @SED@ +SELINUX_LIB = @SELINUX_LIB@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +SLP_LIBS = @SLP_LIBS@ +SSL_LIBS = @SSL_LIBS@ +STRIP = @STRIP@ +TLS_LIBS = @TLS_LIBS@ +USE_NLS = @USE_NLS@ +VERSION = @VERSION@ +XGETTEXT = @XGETTEXT@ +XGETTEXT_015 = @XGETTEXT_015@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libc_cv_fpie = @libc_cv_fpie@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = $(datadir)/locale +localstatedir = @localstatedir@ +lt_ECHO = @lt_ECHO@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ + +# +# Copyright (c) 2002-2005, 2009 Thorsten Kukuk, Germany +# +# Author: Thorsten Kukuk +# +AUTOMAKE_OPTIONS = 1.7 gnits +MAINT_CHARSET = latin1 +# +LN_F = ln -f +RM_F = rm -f +AM_CFLAGS = @EXTRA_CFLAGS@ +LDADD = @LIBINTL@ +pamdir = $(libdir)/security +INCLUDES = -I$(srcdir) -I$(top_srcdir)/lib -I$(top_srcdir) \ + -DLOCALEDIR=\"$(localedir)\" + +CLEANFILES = *~ tst-chage.* tst-passwd.* tst-group.* tst-groupadd.* \ + tst-long-group-entry.* tst-32bit-uid-gid.* tst-userdel.* \ + tst-groupmod.* tst-pwconv.* tst-pwunconv.* tst-pwck.* \ + tst-grpck.* tst-usermod.* tst-gpasswd.* ${EXTRA_PRGRAMS} + +@build_PAM_RPASSWD_TRUE@pam_LTLIBRARIES = pam_rpasswd.la +TESTS = tst-useradd tst-chage tst-passwd tst-groupadd tst-long-group-entry \ + tst-32bit-uid-gid tst-userdel tst-groupmod tst-pwconv tst-pwunconv \ + tst-pwck tst-grpck tst-usermod tst-gpasswd + +EXTRA_DIST = ${MANS} ${TESTS} rpasswd-client.c pam_rpasswd.map pam_rpasswd.8 +man_MANS = chfn.1 chsh.1 expiry.1 passwd.1 rpasswd.conf.5 rpasswd.1 \ + sg.1 rpasswdd.8 chage.1 chpasswd.8 useradd.8 userdel.8 \ + usermod.8 pwconv.8 pwunconv.8 gpasswd.1 groupadd.8 groupdel.8 \ + groupmod.8 grpconv.8 grpunconv.8 vigr.8 vipw.8 newgrp.1 \ + grpck.8 pwck.8 $(am__append_1) +noinst_HEADERS = rpasswd-client.h +pam_rpasswd_la_LDFLAGS = -Wl,--version-script=$(srcdir)/pam_rpasswd.map \ + -Wl,-no-undefined -no-undefined -avoid-version -module -shared \ + -Wl,-soname,pam_rpasswd.so + +pam_rpasswd_la_CFLAGS = @EXTRA_CFLAGS@ -fPIC +pam_rpasswd_la_LIBADD = @PAM_LIBS@ @TLS_LIBS@ @SLP_LIBS@ +chage_SOURCES = chage.c +chage_CFLAGS = @PIE_CFLAGS@ +chage_LDADD = ../lib/libpwdutils.a @PAM_LIBS@ @LDAP_LIBS@ @NSL_LIB@ @SELINUX_LIB@ @ATTR_LIB@ @NSCD_LIB@ +chage_LDFLAGS = @PIE_LDFLAGS@ +chfn_SOURCES = chfn.c +chfn_CFLAGS = @PIE_CFLAGS@ +chfn_LDADD = ../lib/libpwdutils.a @PAM_LIBS@ @LDAP_LIBS@ @NSL_LIB@ @SELINUX_LIB@ @ATTR_LIB@ @NSCD_LIB@ @NSCD_LIB@ +chfn_LDFLAGS = @PIE_LDFLAGS@ +chsh_SOURCES = chsh.c +chsh_CFLAGS = @PIE_CFLAGS@ +chsh_LDADD = ../lib/libpwdutils.a @PAM_LIBS@ @LDAP_LIBS@ @NSL_LIB@ @SELINUX_LIB@ @ATTR_LIB@ @NSCD_LIB@ +chsh_LDFLAGS = @PIE_LDFLAGS@ +chpasswd_SOURCES = chpasswd.c +chpasswd_LDADD = ../lib/libpwdutils.a @LDAP_LIBS@ @NSL_LIB@ @CRYPT_LIB@ @SELINUX_LIB@ @ATTR_LIB@ @NSCD_LIB@ +passwd_SOURCES = passwd.c +passwd_CFLAGS = @PIE_CFLAGS@ +passwd_LDADD = ../lib/libpwdutils.a @PAM_LIBS@ @LDAP_LIBS@ @NSL_LIB@ @SELINUX_LIB@ @ATTR_LIB@ @NSCD_LIB@ @BIOAPI_LIB@ +passwd_LDFLAGS = @PIE_LDFLAGS@ +rpasswd_SOURCES = rpasswd.c +rpasswd_LDADD = ../lib/libpwdutils.a @TLS_LIBS@ @SLP_LIBS@ +rpasswdd_SOURCES = rpasswdd.c +rpasswdd_LDADD = ../lib/libpwdutils.a @PAM_LIBS@ @TLS_LIBS@ @SLP_LIBS@ +rpasswdd_CFLAGS = @EXTRA_CFLAGS@ @PIE_CFLAGS@ +rpasswdd_LDFLAGS = @PIE_LDFLAGS@ +expiry_SOURCES = expiry.c +expiry_CFLAGS = @EXTRA_CFLAGS@ @PIE_CFLAGS@ \ + -DPASSWD_PROGRAM=\"$(bindir)/passwd\" + +expiry_LDADD = ../lib/libpwdutils.a @DL_LIBS@ +expiry_LDFLAGS = @PIE_LDFLAGS@ +gpasswd_SOURCES = gpasswd.c +gpasswd_CFLAGS = @PIE_CFLAGS@ +gpasswd_LDADD = ../lib/libpwdutils.a @CRYPT_LIB@ @NSL_LIB@ @LDAP_LIBS@ @SELINUX_LIB@ @ATTR_LIB@ @NSCD_LIB@ +gpasswd_LDFLAGS = @PIE_LDFLAGS@ +groupadd_SOURCES = groupadd.c +groupadd_LDADD = ../lib/libpwdutils.a @PAM_LIBS@ @LDAP_LIBS@ @NSL_LIB@ @SELINUX_LIB@ @ATTR_LIB@ @NSCD_LIB@ +groupdel_SOURCES = groupdel.c +groupdel_LDADD = ../lib/libpwdutils.a @PAM_LIBS@ @LDAP_LIBS@ @NSL_LIB@ @SELINUX_LIB@ @ATTR_LIB@ @NSCD_LIB@ +groupmod_SOURCES = groupmod.c +groupmod_LDADD = ../lib/libpwdutils.a @PAM_LIBS@ @LDAP_LIBS@ @NSL_LIB@ @SELINUX_LIB@ @ATTR_LIB@ @NSCD_LIB@ +grpck_SOURCES = grpck.c +grpck_LDADD = ../lib/libpwdutils.a @SELINUX_LIB@ @ATTR_LIB@ +grpconv_SOURCES = grpconv.c +grpconv_LDADD = ../lib/libpwdutils.a +grpunconv_SOURCES = grpunconv.c +grpunconv_LDADD = ../lib/libpwdutils.a @LDAP_LIBS@ @NSL_LIB@ @SELINUX_LIB@ @ATTR_LIB@ @NSCD_LIB@ +pwck_SOURCES = pwck.c +pwck_LDADD = ../lib/libpwdutils.a @SELINUX_LIB@ @ATTR_LIB@ +pwconv_SOURCES = pwconv.c +pwconv_LDADD = ../lib/libpwdutils.a @LDAP_LIBS@ @NSL_LIB@ @SELINUX_LIB@ @ATTR_LIB@ @NSCD_LIB@ +pwunconv_SOURCES = pwunconv.c +pwunconv_LDADD = ../lib/libpwdutils.a @LDAP_LIBS@ @NSL_LIB@ @SELINUX_LIB@ @ATTR_LIB@ @NSCD_LIB@ +useradd_SOURCES = useradd.c +useradd_LDADD = ../lib/libpwdutils.a @PAM_LIBS@ @LDAP_LIBS@ @NSL_LIB@ @SELINUX_LIB@ @ATTR_LIB@ @NSCD_LIB@ +userdel_SOURCES = userdel.c +userdel_LDADD = ../lib/libpwdutils.a @PAM_LIBS@ @LDAP_LIBS@ @NSL_LIB@ @SELINUX_LIB@ @ATTR_LIB@ @NSCD_LIB@ +usermod_SOURCES = usermod.c +usermod_LDADD = ../lib/libpwdutils.a @PAM_LIBS@ @LDAP_LIBS@ @NSL_LIB@ @SELINUX_LIB@ @ATTR_LIB@ @NSCD_LIB@ +vipw_SOURCES = vipw.c +vipw_LDADD = ../lib/libpwdutils.a @SELINUX_LIB@ @ATTR_LIB@ +newgrp_SOURCES = newgrp.c +newgrp_CFLAGS = @PIE_CFLAGS@ +newgrp_LDADD = ../lib/libpwdutils.a @CRYPT_LIB@ +newgrp_LDFLAGS = @PIE_LDFLAGS@ +all: all-am + +.SUFFIXES: +.SUFFIXES: .c .lo .o .obj +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ + && exit 0; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnits src/Makefile'; \ + cd $(top_srcdir) && \ + $(AUTOMAKE) --gnits src/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +install-pamLTLIBRARIES: $(pam_LTLIBRARIES) + @$(NORMAL_INSTALL) + test -z "$(pamdir)" || $(MKDIR_P) "$(DESTDIR)$(pamdir)" + @list='$(pam_LTLIBRARIES)'; for p in $$list; do \ + if test -f $$p; then \ + f=$(am__strip_dir) \ + echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(pamLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) '$$p' '$(DESTDIR)$(pamdir)/$$f'"; \ + $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(pamLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) "$$p" "$(DESTDIR)$(pamdir)/$$f"; \ + else :; fi; \ + done + +uninstall-pamLTLIBRARIES: + @$(NORMAL_UNINSTALL) + @list='$(pam_LTLIBRARIES)'; for p in $$list; do \ + p=$(am__strip_dir) \ + echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(pamdir)/$$p'"; \ + $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(pamdir)/$$p"; \ + done + +clean-pamLTLIBRARIES: + -test -z "$(pam_LTLIBRARIES)" || rm -f $(pam_LTLIBRARIES) + @list='$(pam_LTLIBRARIES)'; for p in $$list; do \ + dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \ + test "$$dir" != "$$p" || dir=.; \ + echo "rm -f \"$${dir}/so_locations\""; \ + rm -f "$${dir}/so_locations"; \ + done +pam_rpasswd.la: $(pam_rpasswd_la_OBJECTS) $(pam_rpasswd_la_DEPENDENCIES) + $(pam_rpasswd_la_LINK) $(am_pam_rpasswd_la_rpath) $(pam_rpasswd_la_OBJECTS) $(pam_rpasswd_la_LIBADD) $(LIBS) +install-binPROGRAMS: $(bin_PROGRAMS) + @$(NORMAL_INSTALL) + test -z "$(bindir)" || $(MKDIR_P) "$(DESTDIR)$(bindir)" + @list='$(bin_PROGRAMS)'; for p in $$list; do \ + p1=`echo $$p|sed 's/$(EXEEXT)$$//'`; \ + if test -f $$p \ + || test -f $$p1 \ + ; then \ + f=`echo "$$p1" | sed 's,^.*/,,;$(transform);s/$$/$(EXEEXT)/'`; \ + echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(binPROGRAMS_INSTALL) '$$p' '$(DESTDIR)$(bindir)/$$f'"; \ + $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(binPROGRAMS_INSTALL) "$$p" "$(DESTDIR)$(bindir)/$$f" || exit 1; \ + else :; fi; \ + done + +uninstall-binPROGRAMS: + @$(NORMAL_UNINSTALL) + @list='$(bin_PROGRAMS)'; for p in $$list; do \ + f=`echo "$$p" | sed 's,^.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/'`; \ + echo " rm -f '$(DESTDIR)$(bindir)/$$f'"; \ + rm -f "$(DESTDIR)$(bindir)/$$f"; \ + done + +clean-binPROGRAMS: + @list='$(bin_PROGRAMS)'; for p in $$list; do \ + f=`echo $$p|sed 's/$(EXEEXT)$$//'`; \ + echo " rm -f $$p $$f"; \ + rm -f $$p $$f ; \ + done + +installcheck-binPROGRAMS: $(bin_PROGRAMS) + bad=0; pid=$$$$; list="$(bin_PROGRAMS)"; for p in $$list; do \ + case ' $(AM_INSTALLCHECK_STD_OPTIONS_EXEMPT) ' in \ + *" $$p "* | *" $(srcdir)/$$p "*) continue;; \ + esac; \ + f=`echo "$$p" | \ + sed 's,^.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/'`; \ + for opt in --help --version; do \ + if "$(DESTDIR)$(bindir)/$$f" $$opt >c$${pid}_.out \ + 2>c$${pid}_.err &2; bad=1; fi; \ + done; \ + done; rm -f c$${pid}_.???; exit $$bad +install-sbinPROGRAMS: $(sbin_PROGRAMS) + @$(NORMAL_INSTALL) + test -z "$(sbindir)" || $(MKDIR_P) "$(DESTDIR)$(sbindir)" + @list='$(sbin_PROGRAMS)'; for p in $$list; do \ + p1=`echo $$p|sed 's/$(EXEEXT)$$//'`; \ + if test -f $$p \ + || test -f $$p1 \ + ; then \ + f=`echo "$$p1" | sed 's,^.*/,,;$(transform);s/$$/$(EXEEXT)/'`; \ + echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(sbinPROGRAMS_INSTALL) '$$p' '$(DESTDIR)$(sbindir)/$$f'"; \ + $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(sbinPROGRAMS_INSTALL) "$$p" "$(DESTDIR)$(sbindir)/$$f" || exit 1; \ + else :; fi; \ + done + +uninstall-sbinPROGRAMS: + @$(NORMAL_UNINSTALL) + @list='$(sbin_PROGRAMS)'; for p in $$list; do \ + f=`echo "$$p" | sed 's,^.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/'`; \ + echo " rm -f '$(DESTDIR)$(sbindir)/$$f'"; \ + rm -f "$(DESTDIR)$(sbindir)/$$f"; \ + done + +clean-sbinPROGRAMS: + @list='$(sbin_PROGRAMS)'; for p in $$list; do \ + f=`echo $$p|sed 's/$(EXEEXT)$$//'`; \ + echo " rm -f $$p $$f"; \ + rm -f $$p $$f ; \ + done + +installcheck-sbinPROGRAMS: $(sbin_PROGRAMS) + bad=0; pid=$$$$; list="$(sbin_PROGRAMS)"; for p in $$list; do \ + case ' $(AM_INSTALLCHECK_STD_OPTIONS_EXEMPT) ' in \ + *" $$p "* | *" $(srcdir)/$$p "*) continue;; \ + esac; \ + f=`echo "$$p" | \ + sed 's,^.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/'`; \ + for opt in --help --version; do \ + if "$(DESTDIR)$(sbindir)/$$f" $$opt >c$${pid}_.out \ + 2>c$${pid}_.err &2; bad=1; fi; \ + done; \ + done; rm -f c$${pid}_.???; exit $$bad +chage$(EXEEXT): $(chage_OBJECTS) $(chage_DEPENDENCIES) + @rm -f chage$(EXEEXT) + $(chage_LINK) $(chage_OBJECTS) $(chage_LDADD) $(LIBS) +chfn$(EXEEXT): $(chfn_OBJECTS) $(chfn_DEPENDENCIES) + @rm -f chfn$(EXEEXT) + $(chfn_LINK) $(chfn_OBJECTS) $(chfn_LDADD) $(LIBS) +chpasswd$(EXEEXT): $(chpasswd_OBJECTS) $(chpasswd_DEPENDENCIES) + @rm -f chpasswd$(EXEEXT) + $(LINK) $(chpasswd_OBJECTS) $(chpasswd_LDADD) $(LIBS) +chsh$(EXEEXT): $(chsh_OBJECTS) $(chsh_DEPENDENCIES) + @rm -f chsh$(EXEEXT) + $(chsh_LINK) $(chsh_OBJECTS) $(chsh_LDADD) $(LIBS) +expiry$(EXEEXT): $(expiry_OBJECTS) $(expiry_DEPENDENCIES) + @rm -f expiry$(EXEEXT) + $(expiry_LINK) $(expiry_OBJECTS) $(expiry_LDADD) $(LIBS) +gpasswd$(EXEEXT): $(gpasswd_OBJECTS) $(gpasswd_DEPENDENCIES) + @rm -f gpasswd$(EXEEXT) + $(gpasswd_LINK) $(gpasswd_OBJECTS) $(gpasswd_LDADD) $(LIBS) +groupadd$(EXEEXT): $(groupadd_OBJECTS) $(groupadd_DEPENDENCIES) + @rm -f groupadd$(EXEEXT) + $(LINK) $(groupadd_OBJECTS) $(groupadd_LDADD) $(LIBS) +groupdel$(EXEEXT): $(groupdel_OBJECTS) $(groupdel_DEPENDENCIES) + @rm -f groupdel$(EXEEXT) + $(LINK) $(groupdel_OBJECTS) $(groupdel_LDADD) $(LIBS) +groupmod$(EXEEXT): $(groupmod_OBJECTS) $(groupmod_DEPENDENCIES) + @rm -f groupmod$(EXEEXT) + $(LINK) $(groupmod_OBJECTS) $(groupmod_LDADD) $(LIBS) +grpck$(EXEEXT): $(grpck_OBJECTS) $(grpck_DEPENDENCIES) + @rm -f grpck$(EXEEXT) + $(LINK) $(grpck_OBJECTS) $(grpck_LDADD) $(LIBS) +grpconv$(EXEEXT): $(grpconv_OBJECTS) $(grpconv_DEPENDENCIES) + @rm -f grpconv$(EXEEXT) + $(LINK) $(grpconv_OBJECTS) $(grpconv_LDADD) $(LIBS) +grpunconv$(EXEEXT): $(grpunconv_OBJECTS) $(grpunconv_DEPENDENCIES) + @rm -f grpunconv$(EXEEXT) + $(LINK) $(grpunconv_OBJECTS) $(grpunconv_LDADD) $(LIBS) +newgrp$(EXEEXT): $(newgrp_OBJECTS) $(newgrp_DEPENDENCIES) + @rm -f newgrp$(EXEEXT) + $(newgrp_LINK) $(newgrp_OBJECTS) $(newgrp_LDADD) $(LIBS) +passwd$(EXEEXT): $(passwd_OBJECTS) $(passwd_DEPENDENCIES) + @rm -f passwd$(EXEEXT) + $(passwd_LINK) $(passwd_OBJECTS) $(passwd_LDADD) $(LIBS) +pwck$(EXEEXT): $(pwck_OBJECTS) $(pwck_DEPENDENCIES) + @rm -f pwck$(EXEEXT) + $(LINK) $(pwck_OBJECTS) $(pwck_LDADD) $(LIBS) +pwconv$(EXEEXT): $(pwconv_OBJECTS) $(pwconv_DEPENDENCIES) + @rm -f pwconv$(EXEEXT) + $(LINK) $(pwconv_OBJECTS) $(pwconv_LDADD) $(LIBS) +pwunconv$(EXEEXT): $(pwunconv_OBJECTS) $(pwunconv_DEPENDENCIES) + @rm -f pwunconv$(EXEEXT) + $(LINK) $(pwunconv_OBJECTS) $(pwunconv_LDADD) $(LIBS) +rpasswd$(EXEEXT): $(rpasswd_OBJECTS) $(rpasswd_DEPENDENCIES) + @rm -f rpasswd$(EXEEXT) + $(LINK) $(rpasswd_OBJECTS) $(rpasswd_LDADD) $(LIBS) +rpasswdd$(EXEEXT): $(rpasswdd_OBJECTS) $(rpasswdd_DEPENDENCIES) + @rm -f rpasswdd$(EXEEXT) + $(rpasswdd_LINK) $(rpasswdd_OBJECTS) $(rpasswdd_LDADD) $(LIBS) +useradd$(EXEEXT): $(useradd_OBJECTS) $(useradd_DEPENDENCIES) + @rm -f useradd$(EXEEXT) + $(LINK) $(useradd_OBJECTS) $(useradd_LDADD) $(LIBS) +userdel$(EXEEXT): $(userdel_OBJECTS) $(userdel_DEPENDENCIES) + @rm -f userdel$(EXEEXT) + $(LINK) $(userdel_OBJECTS) $(userdel_LDADD) $(LIBS) +usermod$(EXEEXT): $(usermod_OBJECTS) $(usermod_DEPENDENCIES) + @rm -f usermod$(EXEEXT) + $(LINK) $(usermod_OBJECTS) $(usermod_LDADD) $(LIBS) +vipw$(EXEEXT): $(vipw_OBJECTS) $(vipw_DEPENDENCIES) + @rm -f vipw$(EXEEXT) + $(LINK) $(vipw_OBJECTS) $(vipw_LDADD) $(LIBS) + +mostlyclean-compile: + -rm -f *.$(OBJEXT) + +distclean-compile: + -rm -f *.tab.c + +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/chage-chage.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/chfn-chfn.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/chpasswd.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/chsh-chsh.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/expiry-expiry.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gpasswd-gpasswd.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/groupadd.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/groupdel.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/groupmod.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/grpck.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/grpconv.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/grpunconv.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/newgrp-newgrp.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pam_rpasswd_la-pam_rpasswd.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/passwd-passwd.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pwck.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pwconv.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pwunconv.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rpasswd.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rpasswdd-rpasswdd.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/useradd.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/userdel.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/usermod.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/vipw.Po@am__quote@ + +.c.o: +@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(COMPILE) -c $< + +.c.obj: +@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` +@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'` + +.c.lo: +@am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $< + +pam_rpasswd_la-pam_rpasswd.lo: pam_rpasswd.c +@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pam_rpasswd_la_CFLAGS) $(CFLAGS) -MT pam_rpasswd_la-pam_rpasswd.lo -MD -MP -MF $(DEPDIR)/pam_rpasswd_la-pam_rpasswd.Tpo -c -o pam_rpasswd_la-pam_rpasswd.lo `test -f 'pam_rpasswd.c' || echo '$(srcdir)/'`pam_rpasswd.c +@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/pam_rpasswd_la-pam_rpasswd.Tpo $(DEPDIR)/pam_rpasswd_la-pam_rpasswd.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='pam_rpasswd.c' object='pam_rpasswd_la-pam_rpasswd.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pam_rpasswd_la_CFLAGS) $(CFLAGS) -c -o pam_rpasswd_la-pam_rpasswd.lo `test -f 'pam_rpasswd.c' || echo '$(srcdir)/'`pam_rpasswd.c + +chage-chage.o: chage.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(chage_CFLAGS) $(CFLAGS) -MT chage-chage.o -MD -MP -MF $(DEPDIR)/chage-chage.Tpo -c -o chage-chage.o `test -f 'chage.c' || echo '$(srcdir)/'`chage.c +@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/chage-chage.Tpo $(DEPDIR)/chage-chage.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='chage.c' object='chage-chage.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(chage_CFLAGS) $(CFLAGS) -c -o chage-chage.o `test -f 'chage.c' || echo '$(srcdir)/'`chage.c + +chage-chage.obj: chage.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(chage_CFLAGS) $(CFLAGS) -MT chage-chage.obj -MD -MP -MF $(DEPDIR)/chage-chage.Tpo -c -o chage-chage.obj `if test -f 'chage.c'; then $(CYGPATH_W) 'chage.c'; else $(CYGPATH_W) '$(srcdir)/chage.c'; fi` +@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/chage-chage.Tpo $(DEPDIR)/chage-chage.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='chage.c' object='chage-chage.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(chage_CFLAGS) $(CFLAGS) -c -o chage-chage.obj `if test -f 'chage.c'; then $(CYGPATH_W) 'chage.c'; else $(CYGPATH_W) '$(srcdir)/chage.c'; fi` + +chfn-chfn.o: chfn.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(chfn_CFLAGS) $(CFLAGS) -MT chfn-chfn.o -MD -MP -MF $(DEPDIR)/chfn-chfn.Tpo -c -o chfn-chfn.o `test -f 'chfn.c' || echo '$(srcdir)/'`chfn.c +@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/chfn-chfn.Tpo $(DEPDIR)/chfn-chfn.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='chfn.c' object='chfn-chfn.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(chfn_CFLAGS) $(CFLAGS) -c -o chfn-chfn.o `test -f 'chfn.c' || echo '$(srcdir)/'`chfn.c + +chfn-chfn.obj: chfn.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(chfn_CFLAGS) $(CFLAGS) -MT chfn-chfn.obj -MD -MP -MF $(DEPDIR)/chfn-chfn.Tpo -c -o chfn-chfn.obj `if test -f 'chfn.c'; then $(CYGPATH_W) 'chfn.c'; else $(CYGPATH_W) '$(srcdir)/chfn.c'; fi` +@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/chfn-chfn.Tpo $(DEPDIR)/chfn-chfn.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='chfn.c' object='chfn-chfn.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(chfn_CFLAGS) $(CFLAGS) -c -o chfn-chfn.obj `if test -f 'chfn.c'; then $(CYGPATH_W) 'chfn.c'; else $(CYGPATH_W) '$(srcdir)/chfn.c'; fi` + +chsh-chsh.o: chsh.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(chsh_CFLAGS) $(CFLAGS) -MT chsh-chsh.o -MD -MP -MF $(DEPDIR)/chsh-chsh.Tpo -c -o chsh-chsh.o `test -f 'chsh.c' || echo '$(srcdir)/'`chsh.c +@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/chsh-chsh.Tpo $(DEPDIR)/chsh-chsh.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='chsh.c' object='chsh-chsh.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(chsh_CFLAGS) $(CFLAGS) -c -o chsh-chsh.o `test -f 'chsh.c' || echo '$(srcdir)/'`chsh.c + +chsh-chsh.obj: chsh.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(chsh_CFLAGS) $(CFLAGS) -MT chsh-chsh.obj -MD -MP -MF $(DEPDIR)/chsh-chsh.Tpo -c -o chsh-chsh.obj `if test -f 'chsh.c'; then $(CYGPATH_W) 'chsh.c'; else $(CYGPATH_W) '$(srcdir)/chsh.c'; fi` +@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/chsh-chsh.Tpo $(DEPDIR)/chsh-chsh.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='chsh.c' object='chsh-chsh.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(chsh_CFLAGS) $(CFLAGS) -c -o chsh-chsh.obj `if test -f 'chsh.c'; then $(CYGPATH_W) 'chsh.c'; else $(CYGPATH_W) '$(srcdir)/chsh.c'; fi` + +expiry-expiry.o: expiry.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(expiry_CFLAGS) $(CFLAGS) -MT expiry-expiry.o -MD -MP -MF $(DEPDIR)/expiry-expiry.Tpo -c -o expiry-expiry.o `test -f 'expiry.c' || echo '$(srcdir)/'`expiry.c +@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/expiry-expiry.Tpo $(DEPDIR)/expiry-expiry.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='expiry.c' object='expiry-expiry.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(expiry_CFLAGS) $(CFLAGS) -c -o expiry-expiry.o `test -f 'expiry.c' || echo '$(srcdir)/'`expiry.c + +expiry-expiry.obj: expiry.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(expiry_CFLAGS) $(CFLAGS) -MT expiry-expiry.obj -MD -MP -MF $(DEPDIR)/expiry-expiry.Tpo -c -o expiry-expiry.obj `if test -f 'expiry.c'; then $(CYGPATH_W) 'expiry.c'; else $(CYGPATH_W) '$(srcdir)/expiry.c'; fi` +@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/expiry-expiry.Tpo $(DEPDIR)/expiry-expiry.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='expiry.c' object='expiry-expiry.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(expiry_CFLAGS) $(CFLAGS) -c -o expiry-expiry.obj `if test -f 'expiry.c'; then $(CYGPATH_W) 'expiry.c'; else $(CYGPATH_W) '$(srcdir)/expiry.c'; fi` + +gpasswd-gpasswd.o: gpasswd.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gpasswd_CFLAGS) $(CFLAGS) -MT gpasswd-gpasswd.o -MD -MP -MF $(DEPDIR)/gpasswd-gpasswd.Tpo -c -o gpasswd-gpasswd.o `test -f 'gpasswd.c' || echo '$(srcdir)/'`gpasswd.c +@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/gpasswd-gpasswd.Tpo $(DEPDIR)/gpasswd-gpasswd.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='gpasswd.c' object='gpasswd-gpasswd.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gpasswd_CFLAGS) $(CFLAGS) -c -o gpasswd-gpasswd.o `test -f 'gpasswd.c' || echo '$(srcdir)/'`gpasswd.c + +gpasswd-gpasswd.obj: gpasswd.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gpasswd_CFLAGS) $(CFLAGS) -MT gpasswd-gpasswd.obj -MD -MP -MF $(DEPDIR)/gpasswd-gpasswd.Tpo -c -o gpasswd-gpasswd.obj `if test -f 'gpasswd.c'; then $(CYGPATH_W) 'gpasswd.c'; else $(CYGPATH_W) '$(srcdir)/gpasswd.c'; fi` +@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/gpasswd-gpasswd.Tpo $(DEPDIR)/gpasswd-gpasswd.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='gpasswd.c' object='gpasswd-gpasswd.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gpasswd_CFLAGS) $(CFLAGS) -c -o gpasswd-gpasswd.obj `if test -f 'gpasswd.c'; then $(CYGPATH_W) 'gpasswd.c'; else $(CYGPATH_W) '$(srcdir)/gpasswd.c'; fi` + +newgrp-newgrp.o: newgrp.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(newgrp_CFLAGS) $(CFLAGS) -MT newgrp-newgrp.o -MD -MP -MF $(DEPDIR)/newgrp-newgrp.Tpo -c -o newgrp-newgrp.o `test -f 'newgrp.c' || echo '$(srcdir)/'`newgrp.c +@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/newgrp-newgrp.Tpo $(DEPDIR)/newgrp-newgrp.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='newgrp.c' object='newgrp-newgrp.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(newgrp_CFLAGS) $(CFLAGS) -c -o newgrp-newgrp.o `test -f 'newgrp.c' || echo '$(srcdir)/'`newgrp.c + +newgrp-newgrp.obj: newgrp.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(newgrp_CFLAGS) $(CFLAGS) -MT newgrp-newgrp.obj -MD -MP -MF $(DEPDIR)/newgrp-newgrp.Tpo -c -o newgrp-newgrp.obj `if test -f 'newgrp.c'; then $(CYGPATH_W) 'newgrp.c'; else $(CYGPATH_W) '$(srcdir)/newgrp.c'; fi` +@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/newgrp-newgrp.Tpo $(DEPDIR)/newgrp-newgrp.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='newgrp.c' object='newgrp-newgrp.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(newgrp_CFLAGS) $(CFLAGS) -c -o newgrp-newgrp.obj `if test -f 'newgrp.c'; then $(CYGPATH_W) 'newgrp.c'; else $(CYGPATH_W) '$(srcdir)/newgrp.c'; fi` + +passwd-passwd.o: passwd.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(passwd_CFLAGS) $(CFLAGS) -MT passwd-passwd.o -MD -MP -MF $(DEPDIR)/passwd-passwd.Tpo -c -o passwd-passwd.o `test -f 'passwd.c' || echo '$(srcdir)/'`passwd.c +@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/passwd-passwd.Tpo $(DEPDIR)/passwd-passwd.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='passwd.c' object='passwd-passwd.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(passwd_CFLAGS) $(CFLAGS) -c -o passwd-passwd.o `test -f 'passwd.c' || echo '$(srcdir)/'`passwd.c + +passwd-passwd.obj: passwd.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(passwd_CFLAGS) $(CFLAGS) -MT passwd-passwd.obj -MD -MP -MF $(DEPDIR)/passwd-passwd.Tpo -c -o passwd-passwd.obj `if test -f 'passwd.c'; then $(CYGPATH_W) 'passwd.c'; else $(CYGPATH_W) '$(srcdir)/passwd.c'; fi` +@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/passwd-passwd.Tpo $(DEPDIR)/passwd-passwd.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='passwd.c' object='passwd-passwd.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(passwd_CFLAGS) $(CFLAGS) -c -o passwd-passwd.obj `if test -f 'passwd.c'; then $(CYGPATH_W) 'passwd.c'; else $(CYGPATH_W) '$(srcdir)/passwd.c'; fi` + +rpasswdd-rpasswdd.o: rpasswdd.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(rpasswdd_CFLAGS) $(CFLAGS) -MT rpasswdd-rpasswdd.o -MD -MP -MF $(DEPDIR)/rpasswdd-rpasswdd.Tpo -c -o rpasswdd-rpasswdd.o `test -f 'rpasswdd.c' || echo '$(srcdir)/'`rpasswdd.c +@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/rpasswdd-rpasswdd.Tpo $(DEPDIR)/rpasswdd-rpasswdd.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='rpasswdd.c' object='rpasswdd-rpasswdd.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(rpasswdd_CFLAGS) $(CFLAGS) -c -o rpasswdd-rpasswdd.o `test -f 'rpasswdd.c' || echo '$(srcdir)/'`rpasswdd.c + +rpasswdd-rpasswdd.obj: rpasswdd.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(rpasswdd_CFLAGS) $(CFLAGS) -MT rpasswdd-rpasswdd.obj -MD -MP -MF $(DEPDIR)/rpasswdd-rpasswdd.Tpo -c -o rpasswdd-rpasswdd.obj `if test -f 'rpasswdd.c'; then $(CYGPATH_W) 'rpasswdd.c'; else $(CYGPATH_W) '$(srcdir)/rpasswdd.c'; fi` +@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/rpasswdd-rpasswdd.Tpo $(DEPDIR)/rpasswdd-rpasswdd.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='rpasswdd.c' object='rpasswdd-rpasswdd.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(rpasswdd_CFLAGS) $(CFLAGS) -c -o rpasswdd-rpasswdd.obj `if test -f 'rpasswdd.c'; then $(CYGPATH_W) 'rpasswdd.c'; else $(CYGPATH_W) '$(srcdir)/rpasswdd.c'; fi` + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs +install-man1: $(man1_MANS) $(man_MANS) + @$(NORMAL_INSTALL) + test -z "$(man1dir)" || $(MKDIR_P) "$(DESTDIR)$(man1dir)" + @list='$(man1_MANS) $(dist_man1_MANS) $(nodist_man1_MANS)'; \ + l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \ + for i in $$l2; do \ + case "$$i" in \ + *.1*) list="$$list $$i" ;; \ + esac; \ + done; \ + for i in $$list; do \ + if test -f $(srcdir)/$$i; then file=$(srcdir)/$$i; \ + else file=$$i; fi; \ + ext=`echo $$i | sed -e 's/^.*\\.//'`; \ + case "$$ext" in \ + 1*) ;; \ + *) ext='1' ;; \ + esac; \ + inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \ + inst=`echo $$inst | sed -e 's/^.*\///'`; \ + inst=`echo $$inst | sed '$(transform)'`.$$ext; \ + echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man1dir)/$$inst'"; \ + $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man1dir)/$$inst"; \ + done +uninstall-man1: + @$(NORMAL_UNINSTALL) + @list='$(man1_MANS) $(dist_man1_MANS) $(nodist_man1_MANS)'; \ + l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \ + for i in $$l2; do \ + case "$$i" in \ + *.1*) list="$$list $$i" ;; \ + esac; \ + done; \ + for i in $$list; do \ + ext=`echo $$i | sed -e 's/^.*\\.//'`; \ + case "$$ext" in \ + 1*) ;; \ + *) ext='1' ;; \ + esac; \ + inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \ + inst=`echo $$inst | sed -e 's/^.*\///'`; \ + inst=`echo $$inst | sed '$(transform)'`.$$ext; \ + echo " rm -f '$(DESTDIR)$(man1dir)/$$inst'"; \ + rm -f "$(DESTDIR)$(man1dir)/$$inst"; \ + done +install-man5: $(man5_MANS) $(man_MANS) + @$(NORMAL_INSTALL) + test -z "$(man5dir)" || $(MKDIR_P) "$(DESTDIR)$(man5dir)" + @list='$(man5_MANS) $(dist_man5_MANS) $(nodist_man5_MANS)'; \ + l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \ + for i in $$l2; do \ + case "$$i" in \ + *.5*) list="$$list $$i" ;; \ + esac; \ + done; \ + for i in $$list; do \ + if test -f $(srcdir)/$$i; then file=$(srcdir)/$$i; \ + else file=$$i; fi; \ + ext=`echo $$i | sed -e 's/^.*\\.//'`; \ + case "$$ext" in \ + 5*) ;; \ + *) ext='5' ;; \ + esac; \ + inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \ + inst=`echo $$inst | sed -e 's/^.*\///'`; \ + inst=`echo $$inst | sed '$(transform)'`.$$ext; \ + echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man5dir)/$$inst'"; \ + $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man5dir)/$$inst"; \ + done +uninstall-man5: + @$(NORMAL_UNINSTALL) + @list='$(man5_MANS) $(dist_man5_MANS) $(nodist_man5_MANS)'; \ + l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \ + for i in $$l2; do \ + case "$$i" in \ + *.5*) list="$$list $$i" ;; \ + esac; \ + done; \ + for i in $$list; do \ + ext=`echo $$i | sed -e 's/^.*\\.//'`; \ + case "$$ext" in \ + 5*) ;; \ + *) ext='5' ;; \ + esac; \ + inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \ + inst=`echo $$inst | sed -e 's/^.*\///'`; \ + inst=`echo $$inst | sed '$(transform)'`.$$ext; \ + echo " rm -f '$(DESTDIR)$(man5dir)/$$inst'"; \ + rm -f "$(DESTDIR)$(man5dir)/$$inst"; \ + done +install-man8: $(man8_MANS) $(man_MANS) + @$(NORMAL_INSTALL) + test -z "$(man8dir)" || $(MKDIR_P) "$(DESTDIR)$(man8dir)" + @list='$(man8_MANS) $(dist_man8_MANS) $(nodist_man8_MANS)'; \ + l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \ + for i in $$l2; do \ + case "$$i" in \ + *.8*) list="$$list $$i" ;; \ + esac; \ + done; \ + for i in $$list; do \ + if test -f $(srcdir)/$$i; then file=$(srcdir)/$$i; \ + else file=$$i; fi; \ + ext=`echo $$i | sed -e 's/^.*\\.//'`; \ + case "$$ext" in \ + 8*) ;; \ + *) ext='8' ;; \ + esac; \ + inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \ + inst=`echo $$inst | sed -e 's/^.*\///'`; \ + inst=`echo $$inst | sed '$(transform)'`.$$ext; \ + echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man8dir)/$$inst'"; \ + $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man8dir)/$$inst"; \ + done +uninstall-man8: + @$(NORMAL_UNINSTALL) + @list='$(man8_MANS) $(dist_man8_MANS) $(nodist_man8_MANS)'; \ + l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \ + for i in $$l2; do \ + case "$$i" in \ + *.8*) list="$$list $$i" ;; \ + esac; \ + done; \ + for i in $$list; do \ + ext=`echo $$i | sed -e 's/^.*\\.//'`; \ + case "$$ext" in \ + 8*) ;; \ + *) ext='8' ;; \ + esac; \ + inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \ + inst=`echo $$inst | sed -e 's/^.*\///'`; \ + inst=`echo $$inst | sed '$(transform)'`.$$ext; \ + echo " rm -f '$(DESTDIR)$(man8dir)/$$inst'"; \ + rm -f "$(DESTDIR)$(man8dir)/$$inst"; \ + done + +ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonemtpy = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + mkid -fID $$unique +tags: TAGS + +TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + tags=; \ + here=`pwd`; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$tags $$unique; \ + fi +ctags: CTAGS +CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + tags=; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + test -z "$(CTAGS_ARGS)$$tags$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$tags $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && cd $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) $$here + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +check-TESTS: $(TESTS) + @failed=0; all=0; xfail=0; xpass=0; skip=0; ws='[ ]'; \ + srcdir=$(srcdir); export srcdir; \ + list=' $(TESTS) '; \ + if test -n "$$list"; then \ + for tst in $$list; do \ + if test -f ./$$tst; then dir=./; \ + elif test -f $$tst; then dir=; \ + else dir="$(srcdir)/"; fi; \ + if $(TESTS_ENVIRONMENT) $${dir}$$tst; then \ + all=`expr $$all + 1`; \ + case " $(XFAIL_TESTS) " in \ + *$$ws$$tst$$ws*) \ + xpass=`expr $$xpass + 1`; \ + failed=`expr $$failed + 1`; \ + echo "XPASS: $$tst"; \ + ;; \ + *) \ + echo "PASS: $$tst"; \ + ;; \ + esac; \ + elif test $$? -ne 77; then \ + all=`expr $$all + 1`; \ + case " $(XFAIL_TESTS) " in \ + *$$ws$$tst$$ws*) \ + xfail=`expr $$xfail + 1`; \ + echo "XFAIL: $$tst"; \ + ;; \ + *) \ + failed=`expr $$failed + 1`; \ + echo "FAIL: $$tst"; \ + ;; \ + esac; \ + else \ + skip=`expr $$skip + 1`; \ + echo "SKIP: $$tst"; \ + fi; \ + done; \ + if test "$$failed" -eq 0; then \ + if test "$$xfail" -eq 0; then \ + banner="All $$all tests passed"; \ + else \ + banner="All $$all tests behaved as expected ($$xfail expected failures)"; \ + fi; \ + else \ + if test "$$xpass" -eq 0; then \ + banner="$$failed of $$all tests failed"; \ + else \ + banner="$$failed of $$all tests did not behave as expected ($$xpass unexpected passes)"; \ + fi; \ + fi; \ + dashes="$$banner"; \ + skipped=""; \ + if test "$$skip" -ne 0; then \ + skipped="($$skip tests were not run)"; \ + test `echo "$$skipped" | wc -c` -le `echo "$$banner" | wc -c` || \ + dashes="$$skipped"; \ + fi; \ + report=""; \ + if test "$$failed" -ne 0 && test -n "$(PACKAGE_BUGREPORT)"; then \ + report="Please report to $(PACKAGE_BUGREPORT)"; \ + test `echo "$$report" | wc -c` -le `echo "$$banner" | wc -c` || \ + dashes="$$report"; \ + fi; \ + dashes=`echo "$$dashes" | sed s/./=/g`; \ + echo "$$dashes"; \ + echo "$$banner"; \ + test -z "$$skipped" || echo "$$skipped"; \ + test -z "$$report" || echo "$$report"; \ + echo "$$dashes"; \ + test "$$failed" -eq 0; \ + else :; fi + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ + fi; \ + cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ + else \ + test -f $(distdir)/$$file \ + || cp -p $$d/$$file $(distdir)/$$file \ + || exit 1; \ + fi; \ + done +check-am: all-am + $(MAKE) $(AM_MAKEFLAGS) check-TESTS +check: check-am +all-am: Makefile $(LTLIBRARIES) $(PROGRAMS) $(MANS) $(HEADERS) +installdirs: + for dir in "$(DESTDIR)$(pamdir)" "$(DESTDIR)$(bindir)" "$(DESTDIR)$(sbindir)" "$(DESTDIR)$(man1dir)" "$(DESTDIR)$(man5dir)" "$(DESTDIR)$(man8dir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + +clean-generic: + -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-binPROGRAMS clean-generic clean-libtool \ + clean-pamLTLIBRARIES clean-sbinPROGRAMS mostlyclean-am + +distclean: distclean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +distclean-am: clean-am distclean-compile distclean-generic \ + distclean-tags + +dvi: dvi-am + +dvi-am: + +html: html-am + +info: info-am + +info-am: + +install-data-am: install-man install-pamLTLIBRARIES + +install-dvi: install-dvi-am + +install-exec-am: install-binPROGRAMS install-sbinPROGRAMS + @$(NORMAL_INSTALL) + $(MAKE) $(AM_MAKEFLAGS) install-exec-hook + +install-html: install-html-am + +install-info: install-info-am + +install-man: install-man1 install-man5 install-man8 + +install-pdf: install-pdf-am + +install-ps: install-ps-am + +installcheck-am: installcheck-binPROGRAMS installcheck-sbinPROGRAMS + +maintainer-clean: maintainer-clean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-compile mostlyclean-generic \ + mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-binPROGRAMS uninstall-man \ + uninstall-pamLTLIBRARIES uninstall-sbinPROGRAMS + @$(NORMAL_INSTALL) + $(MAKE) $(AM_MAKEFLAGS) uninstall-hook + +uninstall-man: uninstall-man1 uninstall-man5 uninstall-man8 + +.MAKE: install-am install-exec-am install-strip uninstall-am + +.PHONY: CTAGS GTAGS all all-am check check-TESTS check-am clean \ + clean-binPROGRAMS clean-generic clean-libtool \ + clean-pamLTLIBRARIES clean-sbinPROGRAMS ctags distclean \ + distclean-compile distclean-generic distclean-libtool \ + distclean-tags distdir dvi dvi-am html html-am info info-am \ + install install-am install-binPROGRAMS install-data \ + install-data-am install-dvi install-dvi-am install-exec \ + install-exec-am install-exec-hook install-html install-html-am \ + install-info install-info-am install-man install-man1 \ + install-man5 install-man8 install-pamLTLIBRARIES install-pdf \ + install-pdf-am install-ps install-ps-am install-sbinPROGRAMS \ + install-strip installcheck installcheck-am \ + installcheck-binPROGRAMS installcheck-sbinPROGRAMS installdirs \ + maintainer-clean maintainer-clean-generic mostlyclean \ + mostlyclean-compile mostlyclean-generic mostlyclean-libtool \ + pdf pdf-am ps ps-am tags uninstall uninstall-am \ + uninstall-binPROGRAMS uninstall-hook uninstall-man \ + uninstall-man1 uninstall-man5 uninstall-man8 \ + uninstall-pamLTLIBRARIES uninstall-sbinPROGRAMS + + +install-exec-hook: + $(LN_F) $(DESTDIR)$(sbindir)/vipw $(DESTDIR)$(sbindir)/vigr + $(LN_F) $(DESTDIR)$(bindir)/newgrp $(DESTDIR)$(bindir)/sg + if test $$UID == 0; then \ + list='chage chfn chsh expiry passwd'; \ + for p in $$list ; do \ + chgrp shadow $(DESTDIR)$(bindir)/$$p; \ + chmod g+s $(DESTDIR)$(bindir)/$$p; \ + done ; \ + fi + +uninstall-hook: + $(RM_F) $(DESTDIR)$(sbindir)/vigr $(DESTDIR)$(bindir)/sg +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/src/chage.1 b/src/chage.1 new file mode 100644 index 0000000..78c17a5 --- /dev/null +++ b/src/chage.1 @@ -0,0 +1,109 @@ +.\" -*- nroff -*- +.\" Copyright (C) 2002, 2003, 2005 Thorsten Kukuk +.\" Author: Thorsten Kukuk +.\" +.\" This program is free software; you can redistribute it and/or modify +.\" it under the terms of the GNU General Public License version 2 as +.\" published by the Free Software Foundation. +.\" +.\" 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +.\" +.TH chage 1 "November 2005" "pwdutils" +.SH NAME +chage \- change user password expiry information +.SH SYNOPSIS +.TP 6 +\fBchage\fR [\fB-D \fIbinddn\fR] [\fB-P \fIpath\fR] [\fB-m \fImindays\fR] +[\fB-M \fImaxdays\fR] [\fB-d \fIlastday\fR] [\fB-I \fIinactive\fR] +[\fB-E \fIexpiredate\fR] [\fB-W \fIwarndays\fR] \fIuser\fR +.TP 5 +\fBchage\fR \fB-l\fR [\fIuser\fR] +.SH DESCRIPTION +\fBchage\fR is used to list and change the password expiry information +of a user. It allows the system administrator to change the number of +days between allowed and required password changes and the date of the +last password change. It allows also to define when an account will +expire. The \fBchage\fR command is restricted to the system administrator, +except for the \fB-l\fR option, which may be used by an user to determine +when his password or account is due to expire. +.PP +If no option is given, \fBchage\fR operates in an interactive mode, prompting +the user with the current values for all of the fields. Enter the new +value to change the field, or leave the line blank to use the current +value. If the users exists in the local \fIpasswd\fR file, but not in +the local \fIshadow\fR file, chage will create a new entry in the +\fIshadow\fR file. +.SH OPTIONS +.TP +.BI "\-D, \-\-binddn" " binddn" +Use the Distinguished Name binddn to bind to the LDAP directory. +The user will be prompted for a password for simple authentication. +.TP +.BI "\-P, \-\-path" " path" +The \fIpasswd\fR and \fIshadow\fR files are located below +the specified directory path. \fBchage\fR will use this files, +not \fI/etc/passwd\fR and \fI/etc/shadow\fR. +This is useful for example on NIS master servers, where you do +not want to give all users in the NIS database automatic access +to your NIS server and the NIS map is build from special files. +.TP +.B "\-l, \-\-list" +This option will list the password expiry information in a human +readable format. The user will see the date when he changed the +password the last time, when the password will be expire, when the +password will be locked and when the account will expire. +.TP +.BI "\-m, \-\-mindays" " mindays" +With this option the minimum number of days between password +changes is changed. A value of zero for this field indicates that +the user may change her password at any time. Else the user will not be +permitted to change the password until \fImin\fR days have elapsed. +.TP +.BI "\-M, \-\-maxdays" " maxdays" +With this option the maximum number of days during which a +password is valid is changed. When \fImaxdays\fR plus \fIlastday\fR +is less than the current day, the user will be required to change +his password before being able to use the account. +.TP +.BI "\-d, \-\-lastday" " lastday" +With this option the date when the password was last changed can +be set to another value. \fIlastday\fR has to be specified as +number of days since January 1st, 1970. The date may also be +expressed in the format YYYY-MM-DD. If supported by the system, +a value of zero forces the user to change the password at next +login. +.TP +.BI "\-E, \-\-expiredate" " expiredate" +With this option the date when the account will be expired can +be changed. \fIexpiredate\fR has to be specified as number of +days since January 1st, 1970. The date may also be expressed in +the format YYYY-MM-DD. +.TP +.BI "\-I, \-\-inactive" " inactive" +This option is used to set the number of days of inactivity after +a password has expired before the account is locked. A user whose +account is locked must contact the system administrator before +being able to use the account again. +A value of -1 disables this feature. +.TP +.BI "\-W, \-\-warndays" " warndays" +With this option the number of days of warning before a password +change is required can be changed. This option is the number of +days prior to the password expiring that a user will be warned +the password is about to expire. +.SH FILES +passwd \- user account information +.br +shadow \- shadow user account information +.SH SEE ALSO +.BR passwd (1), +.BR passwd (5) +.SH AUTHOR +Thorsten Kukuk diff --git a/src/chage.c b/src/chage.c new file mode 100644 index 0000000..ddc2977 --- /dev/null +++ b/src/chage.c @@ -0,0 +1,776 @@ +/* Copyright (C) 2002-2006, 2008 Thorsten Kukuk + Author: Thorsten Kukuk + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License version 2 as + published by the Free Software Foundation. + + 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ + + +#ifdef HAVE_CONFIG_H +#include +#endif + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#ifdef HAVE_LIBNSCD_H +#include +#endif + +#include "i18n.h" +#include "error_codes.h" +#include "public.h" +#include "logindefs.h" +#include "read-files.h" +#include "utf8conv.h" +#include "logging.h" + +#ifdef USE_LDAP +#include "libldap.h" +#endif + +#define DAY (24L*3600L) +#define SCALE DAY + +static void +print_usage (FILE *stream, const char *program) +{ + fprintf (stream, _("Usage: %s [-D binddn][-P path][-m mindays][-M maxdays][-d lastday][-I inactive][-E expiredate][-W warndays] user\n"), + program); + fprintf (stream, _(" %s -l user\n"), + program); +} + +static void +print_help (const char *program) +{ + print_usage (stdout, program); + fprintf (stdout, _("%s - change user password expiry information\n\n"), + program); + +#ifdef USE_LDAP + fputs (_(" -D binddn Use dn \"binddn\" to bind to the LDAP directory\n"), + stdout); +#endif + fputs (_(" -P path Search passwd and shadow file in \"path\"\n"), + stdout); + + fputs (_(" --service srv Use nameservice 'srv'\n"), stdout); + fputs (_(" -q, --quiet Don't be verbose\n"), stdout); + fputs (_(" --help Give this help list\n"), stdout); + fputs (_(" -u, --usage Give a short usage message\n"), stdout); + fputs (_(" -v, --version Print program version\n"), stdout); + fputs (_("Valid services are: files, nis, nisplus, ldap\n"), stdout); +} + +/* Print the time in a human readable format. */ +static void +print_date (time_t date) +{ +#ifdef HAVE_STRFTIME + struct tm *tp; + char buf[80]; + + tp = gmtime (&date); + strftime (buf, sizeof buf, "%b %d, %Y", tp); + puts (buf); +#else + struct tm *tp; + char *cp; + + tp = gmtime (&date); + cp = asctime (tp); + printf ("%6.6s, %4.4s\n", cp + 4, cp + 20); +#endif +} + +/* Print the current values of the expiration fields. */ +static void +print_shadow_info (user_t *data) +{ + printf (_("Minimum:\t%ld\n"), data->sp.sp_min); + printf (_("Maximum:\t%ld\n"), data->sp.sp_max); + printf (_("Warning:\t%ld\n"), data->sp.sp_warn); + printf (_("Inactive:\t%ld\n"), data->sp.sp_inact); + printf (_("Last Change:\t\t")); + if (data->sp.sp_lstchg == 0) + printf (_("Unknown, password is forced to change at next login\n")); + else if (data->sp.sp_lstchg < 0) + printf (_("Never\n")); + else + print_date (data->sp.sp_lstchg * SCALE); + printf (_("Password Expires:\t")); + if (data->sp.sp_lstchg <= 0 || data->sp.sp_max >= 10000 * (DAY / SCALE) + || data->sp.sp_max < 0) + printf (_("Never\n")); + else + print_date (data->sp.sp_lstchg * SCALE + data->sp.sp_max * SCALE); + printf (_("Password Inactive:\t")); + if (data->sp.sp_lstchg <= 0 || data->sp.sp_inact < 0 || + data->sp.sp_max >= 10000 * (DAY / SCALE) || data->sp.sp_max < 0) + printf (_("Never\n")); + else + print_date (data->sp.sp_lstchg * SCALE + + (data->sp.sp_max + data->sp.sp_inact) * SCALE); + printf (_("Account Expires:\t")); + if (data->sp.sp_expire < 0) + printf (_("Never\n")); + else + print_date (data->sp.sp_expire * SCALE); +} + +static int +change_shadow_info (user_t *data) +{ + char *buf, *res, *cp; + + if (asprintf (&buf, "%ld", data->sp.sp_min) < 0) + return E_FAILURE; + res = get_value (buf, _("Minimum Password Age")); + free (buf); + if (res == NULL || + ((data->spn.sp_min = strtol (res, &cp, 10)) == 0 && *cp) || + data->spn.sp_min < -1) + { + if (cp && *cp) + fprintf (stderr, _("Input is no integer value\n")); + else + fprintf (stderr, _("Negative numbers are not allowed as input (except -1)\n")); + return E_FAILURE; + } + free (res); + + if (asprintf (&buf, "%ld", data->sp.sp_max) < 0) + return E_FAILURE; + res = get_value (buf, _("Maximum Password Age")); + free (buf); + if (res == NULL || + ((data->spn.sp_max = strtol (res, &cp, 10)) == 0 && *cp) || + data->spn.sp_max < -1) + { + if (cp && *cp) + fprintf (stderr, _("Input is no integer value\n")); + else + fprintf (stderr, _("Negative numbers are not allowed as input (except -1)\n")); + return E_FAILURE; + } + free (res); + + if (asprintf (&buf, "%ld", data->sp.sp_warn) < 0) + return E_FAILURE; + res = get_value (buf, _("Password Expiration Warning")); + free (buf); + if (res == NULL || + ((data->spn.sp_warn = strtol (res, &cp, 10)) == 0 && *cp) || + data->spn.sp_warn < -1) + { + if (cp && *cp) + fprintf (stderr, _("Input is no integer value\n")); + else + fprintf (stderr, _("Negative numbers are not allowed as input (except -1)\n")); + return E_FAILURE; + } + free (res); + + if (asprintf (&buf, "%ld", data->sp.sp_inact) < 0) + return E_FAILURE; + res = get_value (buf, _("Password Inactive")); + free (buf); + if (res == NULL || + ((data->spn.sp_inact = strtol (res, &cp, 10)) == 0 && *cp) || + data->spn.sp_inact < -1) + return E_FAILURE; + + buf = date2str (data->sp.sp_lstchg * SCALE); + res = get_value (buf, _("Last Password Change (YYYY-MM-DD)")); + free (buf); + if (res == NULL) + return E_FAILURE; + else if (strcmp (res, "1969-12-31") == 0 || + strcmp (res, "0") == 0 || + strcmp (res, "-1") == 0) + data->sp.sp_lstchg = -1; + else + { + data->spn.sp_lstchg = str2date (res); + free (res); + if (data->spn.sp_lstchg == -1) + { + fprintf (stderr, _("Invalid date\n")); + return E_FAILURE; + } + } + + buf = date2str (data->sp.sp_expire * SCALE); + res = get_value (buf, _("Account Expiration Date (YYYY-MM-DD)")); + free (buf); + if (res == NULL) + return E_FAILURE; + else if (strcmp (res, "1969-12-31") == 0 || + strcmp (res, "0") == 0 || + strcmp (res, "-1") == 0) + data->spn.sp_expire = -1; + else + { + data->spn.sp_expire = str2date (res); + free (res); + if (data->spn.sp_expire == -1) + { + fprintf (stderr, _("Invalid date\n")); + return E_FAILURE; + } + } + return 0; +} + +int +main (int argc, char *argv[]) +{ + const char *program = "chage"; + uid_t uid = getuid (); + user_t *pw_data = NULL; + char *use_service = NULL; + char *caller_name = NULL; + char *mindays = NULL, *maxdays = NULL, *lastday = NULL, *inactive = NULL; + char *expiredate = NULL, *warndays = NULL; +#ifdef USE_LDAP + char *binddn = NULL; +#endif + int interactive = 1; + int silent = 0; + int l_flag = 0; + +#ifdef ENABLE_NLS + setlocale(LC_ALL, ""); + bindtextdomain(PACKAGE, LOCALEDIR); + textdomain(PACKAGE); +#endif + + open_sec_log(program); + + /* Before going any further, raise the ulimit and ignore + signals. */ + init_environment (); + + while (1) + { + int c; + int option_index = 0; + static struct option long_options[] = { + {"mindays", required_argument, NULL, 'm' }, + {"maxdays", required_argument, NULL, 'M' }, + {"lastday", required_argument, NULL, 'd' }, + {"inactive", required_argument, NULL, 'I' }, + {"expiredate", required_argument, NULL, 'E' }, + {"warndays", required_argument, NULL, 'W' }, + {"list", no_argument, NULL, 'l' }, +#ifdef USE_LDAP + {"binddn", required_argument, NULL, 'D' }, +#endif + {"quiet", no_argument, NULL, 'q' }, + {"path", required_argument, NULL, 'P' }, + {"version", no_argument, NULL, 'v' }, + {"usage", no_argument, NULL, 'u' }, + {"service", required_argument, NULL, '\254' }, + {"help", no_argument, NULL, '\255' }, + {NULL, 0, NULL, '\0'} + }; + + c = getopt_long (argc, argv, "lm:M:d:D:I:E:W:P:vuq", + long_options, &option_index); + if (c == (-1)) + break; + switch (c) + { + case 'm': + mindays = optarg; + interactive = 0; + break; + case 'M': + maxdays = optarg; + interactive = 0; + break; + case 'd': + lastday = optarg; + interactive = 0; + break; + case 'I': + inactive = optarg; + interactive = 0; + break; + case 'E': + expiredate = optarg; + interactive = 0; + break; + case 'W': + warndays = optarg; + interactive = 0; + break; +#ifdef USE_LDAP + case 'D': + binddn = optarg; + break; +#endif + case 'l': + l_flag = 1; + break; + case 'P': + if (uid != 0) + { + sec_log (program, MSG_PATH_ARG_DENIED, uid); + fprintf (stderr, + _("Only root is allowed to specify another path\n")); + return E_NOPERM; + } + else + files_etc_dir = strdup (optarg); + break; + case 'q': + silent = 1; + break; + case '\254': + if (use_service != NULL) + { + print_usage (stderr, program); + return E_BAD_ARG; + } + + if (strcasecmp (optarg, "yp") == 0 || + strcasecmp (optarg, "nis") == 0) + use_service = "nis"; + else if (strcasecmp (optarg, "nis+") == 0 || + strcasecmp (optarg, "nisplus") == 0) + use_service = "nisplus"; + else if (strcasecmp (optarg, "files") == 0) + use_service = "files"; +#ifdef USE_LDAP + else if (strcasecmp (optarg, "ldap") == 0) + use_service = "ldap"; +#endif + else + { + fprintf (stderr, _("Service `%s' not supported.\n"), optarg); + print_usage (stderr, program); + return E_BAD_ARG; + } + break; + case '\255': + print_help (program); + return 0; + case 'v': + print_version (program, "2008"); + return 0; + case 'u': + print_usage (stdout, program); + return 0; + default: + print_error (program); + return E_USAGE; + } + } + + argc -= optind; + argv += optind; + + if (argc > 1) + { + fprintf (stderr, _("%s: Too many arguments.\n"), program); + print_error (program); + return E_USAGE; + } + + if (l_flag && !interactive) + { + fprintf (stderr, _("%s: Do not include \"l\" with other flags\n"), + program); + print_usage (stderr, program); + return E_USAGE; + } + else + { + int buflen = 256; + char *buffer = alloca (buflen); + struct passwd resultbuf; + struct passwd *pw; + char *arg_user; + + /* Determine our own user name for authentication. */ + while (getpwuid_r (uid, &resultbuf, buffer, buflen, &pw) != 0 + && errno == ERANGE) + { + errno = 0; + buflen += 256; + buffer = alloca (buflen); + } + + if (!pw) + { + sec_log (program, MSG_NO_ACCOUNT_FOUND, uid); + fprintf (stderr, _("%s: Cannot determine your user name.\n"), + program); + return E_UNKNOWN_USER; + } + + caller_name = strdupa (pw->pw_name); + + /* if we show/modify the data for another user, get the data from + this one. */ + if (argc == 1) + arg_user = locale_to_utf8 (argv[0]); + else + arg_user = pw->pw_name; + + pw_data = do_getpwnam (arg_user, use_service); + if (pw_data == NULL || pw_data->service == S_NONE) + { + if (use_service) + fprintf (stderr, + _("%s: User `%s' is not known to service `%s'.\n"), + program, utf8_to_locale (arg_user), use_service); + else + fprintf (stderr, _("%s: Unknown user `%s'.\n"), program, + utf8_to_locale (arg_user)); + return E_UNKNOWN_USER; + } + } + + if (!l_flag) + { + /* Only root is allowed to change aging for local users. */ + if (uid && (pw_data->service == S_LOCAL +#ifdef USE_LDAP + || (pw_data->service == S_LDAP && binddn == NULL) +#endif + )) + { + sec_log (program, MSG_PERMISSION_DENIED, + pw_data->pw.pw_name, pw_data->pw.pw_uid, uid); + fprintf (stderr, + _("Only an administrator is allowed to change aging information.\n")); + free_user_t (pw_data); + return E_NOPERM; + } + + /* If no shadow entry exist for this account, check if we can + create them. */ + if (!pw_data->use_shadow) + { + char shadowfile[strlen (files_etc_dir) + 8]; + char *cp = stpcpy (shadowfile, files_etc_dir); + strcpy (cp, "/shadow"); + + if (access (shadowfile, F_OK) != 0) + { + fprintf (stderr, + _("This system does not support shadow accounts.\n")); + return E_MISSING; + } + else if (pw_data->service != S_LOCAL) + { + fprintf (stderr, + _("This account does not have a shadow entry.\n")); + return E_MISSING; + } + else + { + /* Initialize data with dummy values. */ + pw_data->sp.sp_lstchg = -1; + pw_data->sp.sp_min = -1; + pw_data->sp.sp_max = -1; + pw_data->sp.sp_warn = -1; + pw_data->sp.sp_inact = -1; + pw_data->sp.sp_expire = -1; + pw_data->sp.sp_flag = -1; + } + } + } + +#ifdef USE_LDAP + if (binddn && pw_data->service == S_LDAP) + pw_data->oldclearpwd = strdup (get_ldap_password (binddn)); + else +#endif /* USE_LDAP */ + if (do_authentication (program, caller_name, pw_data) != 0) + { + sec_log (program, MSG_PERMISSION_DENIED, + pw_data->pw.pw_name, pw_data->pw.pw_uid, uid); + free_user_t (pw_data); + return E_NOPERM; + } + /* We don't need to extra ask for a password with "-l" and if the + password is stored in the local file. */ + else if (!l_flag && pw_data->service != S_LOCAL) + if (get_old_clear_password (pw_data) != 0) + { + free_user_t (pw_data); + return E_FAILURE; + } + + if (l_flag) + { + if (uid != 0 && pw_data->service != S_LDAP && + strcmp (caller_name, pw_data->pw.pw_name) != 0) + { + sec_log (program, MSG_PERMISSION_DENIED, + pw_data->pw.pw_name, pw_data->pw.pw_uid, uid); + fprintf (stderr, + _("You can only list your own aging information.\n")); + return E_NOPERM; + } + + if (setgid (getgid ()) || setuid (uid)) + { + sec_log (program, MSG_DROP_PRIVILEGE_FAILED, errno, uid); + fprintf (stderr, _("%s: Failed to drop privileges: %s\n"), + program, strerror (errno)); + return E_FAILURE; + } + + if (pw_data->use_shadow) + { + sec_log (program, MSG_SHADOW_DATA_PRINTED, + pw_data->pw.pw_name, pw_data->pw.pw_uid, uid); + print_shadow_info (pw_data); + } + else + fprintf (stdout, _("No aging information available for %s.\n"), + utf8_to_locale (pw_data->pw.pw_name)); + + return 0; + } + + /* Caller must be root or he needs to know the binddn and password + for LDAP administrator. */ + if (uid != 0 +#ifdef USE_LDAP + && !(binddn && pw_data->service == S_LDAP) +#endif + ) + return E_USAGE; + + if (interactive) + { + int res; + + if (!silent) + printf (_("Changing aging information for %s.\n"), + utf8_to_locale (pw_data->pw.pw_name)); + + if ((res = change_shadow_info (pw_data)) != 0) + { + if (!silent) + printf (_("Aging information not changed.\n")); + return E_FAILURE; + } + } + else + { + char *cp; + int error = 0; + + if (mindays) + if (((pw_data->spn.sp_min = strtol (mindays, &cp, 10)) == 0 && *cp) || + pw_data->spn.sp_min < -1) + ++error; + + if (maxdays) + if (((pw_data->spn.sp_max = strtol (maxdays, &cp, 10)) == 0 && *cp) || + pw_data->spn.sp_max < -1) + ++error; + + if (warndays) + if (((pw_data->spn.sp_warn = strtol (warndays, &cp, 10)) == 0 && *cp) + || pw_data->spn.sp_warn < -1) + ++error; + + if (inactive) + if (((pw_data->spn.sp_inact = strtol (inactive, &cp, 10)) == 0 && *cp) + || pw_data->spn.sp_inact < -1) + ++error; + + if (lastday) + { + if (strcmp (lastday, "1969-12-31") == 0) + pw_data->sp.sp_lstchg = -1; + else + { + pw_data->spn.sp_lstchg = str2date (lastday); + if (pw_data->spn.sp_lstchg == -1) + { + if (((pw_data->spn.sp_lstchg = + strtol (lastday, &cp, 10)) == 0 && *cp) || + pw_data->spn.sp_lstchg < -1) + { + fprintf (stderr, + _("Lastday is no date and no integer value >= -1\n")); + ++error; + } + } + } + } + + if (expiredate) + { + if (strcmp (expiredate, "1969-12-31") == 0) + pw_data->spn.sp_expire = -1; + else + { + pw_data->spn.sp_expire = str2date (expiredate); + if (pw_data->spn.sp_expire == -1) + { + if (((pw_data->spn.sp_expire = + strtol (expiredate, &cp, 10)) == 0 && *cp) || + pw_data->spn.sp_expire < -1) + { + fprintf (stderr, _("Expiredate is no date and no integer value >= -1\n")); + ++error; + } + } + } + } + if (error) + { + if (!silent) + fprintf (stderr, _("Error while parsing options.\n")); + free_user_t (pw_data); + return E_BAD_ARG; + } + } + + /* we don't need to change the data if there is no change */ + if (pw_data->sp.sp_min == pw_data->spn.sp_min && + pw_data->sp.sp_max == pw_data->spn.sp_max && + pw_data->sp.sp_warn == pw_data->spn.sp_warn && + pw_data->sp.sp_inact == pw_data->spn.sp_inact && + pw_data->sp.sp_lstchg == pw_data->spn.sp_lstchg && + pw_data->sp.sp_expire == pw_data->spn.sp_expire) + { + if (!silent) + printf (_("Aging information not changed.\n")); + return 0; + } + else + { + pw_data->sp_changed = TRUE; + pw_data->todo = DO_MODIFY; + } + +#ifdef USE_LDAP + if (binddn) + pw_data->binddn = strdup (binddn); +#endif + + /* We have a shadow file, but this user does not have + a shadow entry. Create one. */ + if (!pw_data->use_shadow) + { + int rc; + + /* Backup original password and replace it with a "x" + in local files. Report error*/ + pw_data->todo = DO_MODIFY; + pw_data->sp.sp_pwdp = pw_data->pw.pw_passwd; + pw_data->newpassword = "x"; + rc = write_user_data (pw_data, 0); + pw_data->newpassword = NULL; + + if (rc != 0) + { + fprintf (stderr, + _("Error while converting to shadow account.\n")); + free_user_t (pw_data); + return E_FAILURE; + } + + pw_data->use_shadow = 1; + pw_data->todo = DO_CREATE_SHADOW; + pw_data->sp.sp_namp = pw_data->pw.pw_name; + pw_data->sp.sp_lstchg = pw_data->spn.sp_lstchg; + pw_data->sp.sp_min = pw_data->spn.sp_min; + pw_data->sp.sp_max = pw_data->spn.sp_max; + pw_data->sp.sp_warn = pw_data->spn.sp_warn; + pw_data->sp.sp_inact = pw_data->spn.sp_inact; + pw_data->sp.sp_expire = pw_data->spn.sp_expire; + } + + if (write_user_data (pw_data, 0) != 0) + { + fprintf (stderr, _("Error while changing aging information.\n")); + free_user_t (pw_data); + return E_FAILURE; + } + else + { +#ifdef HAVE_NSCD_FLUSH_CACHE + nscd_flush_cache ("passwd"); +#endif + if (!silent) + printf (_("Aging information changed.\n")); + } + + if (pw_data->sp.sp_min != pw_data->spn.sp_min) + sec_log (program, MSG_MINIMUM_AGE, + pw_data->pw.pw_name, pw_data->pw.pw_uid, + pw_data->spn.sp_min, pw_data->sp.sp_min, uid); + if (pw_data->sp.sp_max != pw_data->spn.sp_max) + sec_log (program, MSG_MAXIMUM_AGE, + pw_data->pw.pw_name, pw_data->pw.pw_uid, + pw_data->spn.sp_max, pw_data->sp.sp_max, uid); + if (pw_data->sp.sp_warn != pw_data->spn.sp_warn) + sec_log (program, MSG_WARNING_DAYS, + pw_data->pw.pw_name, pw_data->pw.pw_uid, + pw_data->spn.sp_warn, pw_data->sp.sp_warn, uid); + if (pw_data->sp.sp_inact != pw_data->spn.sp_inact) + sec_log (program, MSG_INACTIVE_DAYS, + pw_data->pw.pw_name, pw_data->pw.pw_uid, + pw_data->spn.sp_inact, pw_data->sp.sp_inact, uid); + + if (pw_data->sp.sp_lstchg != pw_data->spn.sp_lstchg) + { + char *new_lstchg, *old_lstchg; + + new_lstchg = date2str (pw_data->spn.sp_lstchg * DAY); + old_lstchg = date2str (pw_data->sp.sp_lstchg * DAY); + sec_log (program, MSG_LAST_CHANGE_DATE, + pw_data->pw.pw_name, pw_data->pw.pw_uid, + new_lstchg, old_lstchg, uid); + + free(new_lstchg); + free(old_lstchg); + } + if (pw_data->sp.sp_expire != pw_data->spn.sp_expire) + { + char *new_exp, *old_exp; + + new_exp = date2str (pw_data->spn.sp_expire * DAY); + old_exp = date2str (pw_data->sp.sp_expire * DAY); + sec_log (program, MSG_EXPIRE_DATE, + pw_data->pw.pw_name, pw_data->pw.pw_uid, + new_exp, old_exp, uid); + + free(new_exp); + free(old_exp); + } + + free_user_t (pw_data); + + return 0; +} diff --git a/src/chfn.1 b/src/chfn.1 new file mode 100644 index 0000000..5657591 --- /dev/null +++ b/src/chfn.1 @@ -0,0 +1,104 @@ +.\" -*- nroff -*- +.\" Copyright (C) 2002, 2003, 2004 Thorsten Kukuk +.\" Author: Thorsten Kukuk +.\" +.\" This program is free software; you can redistribute it and/or modify +.\" it under the terms of the GNU General Public License version 2 as +.\" published by the Free Software Foundation. +.\" +.\" 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +.\" +.TH chfn 1 "February 2004" "pwdutils" +.SH NAME +chfn \- change finger information +.SH SYNOPSIS +.TP 5 +\fBchfn\fR +[\fB-D \fIbinddn\fR] [\fB-P \fIpath\fR] [\fB-f \fIname\fR] [\fB-o \fIoffice\fR] [\fB-p \fIphone\fR] [\fB-h \fIhome_phone\fR] [\fB-m \fIother\fR] [\fB-r \fIservice\fR] [\fB-q\fR] [\fB-u\fR] [\fB-v\fR] [\fIuser\fR] +.SH DESCRIPTION +\fBchfn\fR is used to change the user finger information. This are +the users fullname, office room number, office phone number and home phone +number. This information is stored in the \fI/etc/passwd\fR file and +typically printed by +.BR finger (1) +and similiar programs. A normal user may only change the fields for their +own account, the super user may change the fields for any account. Also, +only the super user may use the \fB-o\fR option to change the undefined +portions of the GECOS field. +.PP +If no information is given on the command line, \fBchfn\fR operates in +an interactive fashion, prompting the user for each field. +Enter the new value to change the field, or leave the line blank to use +the current value. Enter \fInone\fR or a blank only to remove the current +value. The current value is displayed between a pair of \fB[ ]\fR marks. +.PP +The only restrictions placed on the contents of the fields is that no +control characters may be present, nor any of comma, colon, or equal +sign. The \fIother\fR field does not have this restriction, and is used to +store accounting information used by other applications. +.PP +This version of \fBchfn\fR is able to change the shell of +local, NIS, NIS+ and LDAP accounts, if the permissions allow +it. +.SH OPTIONS +.TP +.BI "\-D, \-\-binddn" " binddn" +Use the Distinguished Name binddn to bind to the LDAP directory. +The user will be prompted for a password for simple authentication. +.TP +.BI "\-P, \-\-path" " path" +The \fIpasswd\fR and \fIshadow\fR files are located below +the specified directory path. \fBchfn\fR will use this files, +not \fI/etc/passwd\fR and \fI/etc/shadow\fR. +This is useful for example on NIS master servers, where you do +not want to give all users in the NIS database automatic access +to your NIS server and the NIS map is build from special files. +.TP +.B "\-f, \-\-full-name" +Specify your real name. +.TP +.B "\-o, \-\-office" +Specify your office room number. +.TP +.B "\-p, \-\-phone" +Specify your office phone number. +.TP +.B "\-h, \-\-home-phone" +Specify your home phone number. +.TP +.B "\-m, \-\-other" +Specify the undefined portions of the GECOS field. +.TP +.B "\-r, \-\-service" +Specify the service where the GECOS field should be changed. +Supported services are \fIfiles\fR, \fIldap\fR, \fInis\fR and \fInisplus\fR. +.TP +.B "\-q, \-\-quite" +Don't be verbose. +.TP +.B "\-u, \-\-usage" +Print a usage message and exit. +.TP +.B " \-\-help" +Print a more verbose help text and exit. +.TP +.B "-v, \-\-version" +Print version information and exit. +.SH ENVIRONMENT +SHADOW_CHFN \- If this environment variable is set to \fI1\fR, the chfn +options are compatible to the version from the shadow suite. +.SH FILES +/etc/passwd \- user account information +.SH SEE ALSO +.BR chsh (1), +.BR finger (1), +.BR passwd (5) +.SH AUTHOR +Thorsten Kukuk diff --git a/src/chfn.c b/src/chfn.c new file mode 100644 index 0000000..a18d581 --- /dev/null +++ b/src/chfn.c @@ -0,0 +1,740 @@ +/* Copyright (C) 2002, 2003, 2004, 2005 Thorsten Kukuk + Author: Thorsten Kukuk + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License version 2 as + published by the Free Software Foundation. + + 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ + + +#ifdef HAVE_CONFIG_H +#include +#endif + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#ifdef WITH_SELINUX +#include +#include +#endif +#ifdef HAVE_LIBNSCD_H +#include +#endif + +#include "i18n.h" +#include "public.h" +#include "utf8conv.h" +#include "logindefs.h" +#include "error_codes.h" +#include "read-files.h" + +#ifdef USE_LDAP +#include "libldap.h" +#endif + +#ifndef _ +#define _(String) gettext (String) +#endif + +static int shadow_chfn = 0; + +struct fn_info { + char *fullname; + char *roomno; + char *work_phone; + char *home_phone; + char *other; +}; +typedef struct fn_info fn_info; + +static void +print_usage_shadow (FILE *stream, const char *program) +{ + fprintf (stream, _("Usage: %s [-f name] [-r room] [-w work_phone]\n [-h home_phone] [-o other] [-q] [-u] [-v] [user]\n"), + program); +} + +static void +print_help_shadow (const char *program) +{ + print_usage_shadow (stdout, program); + fprintf (stdout, _("%s - change user name and information\n\n"), + program); + fputs (_(" -f full-name Change your real name\n"), stdout); + fputs (_(" -r room Change your office room number\n"), stdout); + fputs (_(" -w work_phone Change your office phone number\n"), stdout); + fputs (_(" -h home_phone Change your home phone number\n"), stdout); + fputs (_(" -o other Change the undefined portions of the GECOS field\n"), stdout); + fputs (_(" -q, --quiet Don't be verbose\n"), stdout); + if (strcmp(program, "chfn") == 0) + fputs (_(" --service srv Use nameservice 'srv'\n"), stdout); + fputs (_(" --help Give this help list\n"), stdout); + fputs (_(" -u, --usage Give a short usage message\n"), stdout); + fputs (_(" -v, --version Print program version\n"), stdout); + + if (strcmp(program, "chfn") == 0) + fputs (_("Valid services are: files, nis, nisplus, ldap\n"), + stdout); +} + +static void +print_usage_util (FILE *stream, const char *program) +{ + fprintf (stream, _("Usage: %s [-D binddn] [-P path] [-f name] [-o office] [-p office-phone]\n [-h home-phone][-m other] [-q] [-u] [-v] [user]\n"), + program); +} + +static void +print_help_util (const char *program) +{ + print_usage_util (stdout, program); + fprintf (stdout, _("%s - change user name and information\n\n"), + program); +#ifdef USE_LDAP + fputs (_(" -D binddn Use dn \"binddn\" to bind to the LDAP directory\n"), + stdout); +#endif + fputs (_(" -P path Search passwd and shadow file in \"path\"\n"), + stdout); + fputs (_(" -f full-name Change your real name\n"), stdout); + fputs (_(" -o office Change your office room number\n"), stdout); + fputs (_(" -p phone Change your office phone number\n"), stdout); + fputs (_(" -h home-phone Change your home phone number\n"), stdout); + fputs (_(" -m other Change the undefined portions of the GECOS field\n"), stdout); + if (strcmp(program, "chfn") == 0) + fputs (_(" --service srv Use nameservice 'srv'\n"), stdout); + fputs (_(" -q, --quiet Don't be verbose\n"), stdout); + fputs (_(" --help Give this help list\n"), stdout); + fputs (_(" -u, --usage Give a short usage message\n"), stdout); + fputs (_(" -v, --version Print program version\n"), stdout); + + if (strcmp(program, "chfn") == 0) + fputs (_("Valid services are: files, nis, nisplus, ldap\n"), + stdout); +} + +static int +may_change_field (int field) +{ + const char *cp; + + /* root is always allowed to change everything. */ + if (getuid () == 0) + return 1; + + cp = getlogindefs_str ("CHFN_RESTRICT", ""); + /* CHFN_RESTRICT specifies exactly which fields may be changed + by regular users. */ + if (!cp) + cp = ""; + /* For backward compatibility, "yes" is equivalent to "rwh", + "no" is equivalent to "frwh". */ + else if (strcmp (cp, "yes") == 0) + cp = "rwh"; + else if (strcmp (cp, "no") == 0) + cp = "frwh"; + if (strchr (cp, field)) + return 1; + return 0; +} + +/* get_fields - change the user's GECOS information interactively + prompt the user for each of the four fields and fill in the fields from + the user's response, or leave alone if nothing was entered. */ +static void +get_fields (fn_info *old, fn_info *new) +{ + printf (_("Enter the new value, or press ENTER for the default\n")); + + /* Allow the user to abort with Ctrl-C. */ + signal (SIGINT, SIG_DFL); + + if (may_change_field ('f')) + new->fullname = get_value (old->fullname, _("Full Name")); + else + printf (_("\tFull Name: %s\n"), old->fullname ?:""); + + if (may_change_field ('r')) + new->roomno = get_value (old->roomno, _("Room Number")); + else + printf (_("\tRoom Number: %s\n"), old->roomno ?:""); + + if (may_change_field ('w')) + new->work_phone = get_value (old->work_phone, _("Work Phone")); + else + printf (_("\tWork Phone: %s\n"), old->work_phone ?:""); + + if (may_change_field ('h')) + new->home_phone = get_value (old->home_phone, _("Home Phone")); + else + printf (_("\tHome Phone: %s\n"), old->home_phone ?:""); + + if (getuid() == 0) + new->other = get_value (old->other, _("Other")); + else + printf (_("\tOther: %s\n"), old->other ?:""); + + signal (SIGINT, SIG_IGN); +} + +/* parse_passwd () -- take a struct password and fill in the + fields of the struct fn_info. */ +static void +parse_passwd (const char *gecos, struct fn_info *info) +{ + if (gecos) + { + char *cp = strdup (gecos); + info->fullname = cp; + cp = strchr (cp, ','); + if (cp) { *cp = 0, cp++; } else return; + info->roomno = cp; + cp = strchr (cp, ','); + if (cp) { *cp = 0, cp++; } else return; + info->work_phone = cp; + cp = strchr (cp, ','); + if (cp) { *cp = 0, cp++; } else return; + info->home_phone = cp; + /* extra fields contain site-specific information, and + * can not be changed by this version of chfn. */ + cp = strchr (cp, ','); + if (cp) { *cp = 0, cp++; } else return; + info->other = cp; + } +} + +/* convert a multibye string to a wide character string, so + that we can use iswprint. */ +static wchar_t * +mbstowcs_alloc (const char *string) +{ + size_t size = strlen (string) + 1; + wchar_t *buf = malloc (size * sizeof (wchar_t)); + + if (buf == NULL) + return NULL; + + size = mbstowcs (buf, string, size); + if (size == (size_t) -1) + return NULL; + buf = realloc (buf, (size + 1) * sizeof (wchar_t)); + return buf; +} + +static int +check_field (const char *program, const char *field, const char *illegal) +{ + wchar_t *wstr = mbstowcs_alloc (field); + wchar_t *willegal = mbstowcs_alloc (illegal); + size_t i; + + /* keep /etc/passwd clean. */ + for (i = 0; i < wcslen (wstr); i++) + { + wchar_t c = wstr[i]; + if (wcschr (willegal, c) != NULL || c == '"' || c == '\n') + { + printf (_("%s: The characters '%s\"' are not allowed.\n"), + program, illegal); + return 1; + } + if (iswcntrl (c)) + { + printf (_("%s: Control characters are not allowed.\n"), program); + return 1; + } + } + + return 0; +} + +int +main (int argc, char *argv[]) +{ + uid_t uid = getuid (); + user_t *pw_data = NULL; + char *use_service = NULL; + char *caller_name = NULL; + char *new_gecos = NULL; + char *locale_name; + int interactive = 1; + fn_info new; + int silent = 0; +#ifdef USE_LDAP + char *binddn = NULL; +#endif + static struct option long_options_shadow[] = { + {"full-name", required_argument, NULL, 'f' }, + {"room", required_argument, NULL, 'r' }, + {"work-phone", required_argument, NULL, 'w' }, + {"home-phone", required_argument, NULL, 'h' }, + {"other", required_argument, NULL, 'o' }, + {"service", required_argument, NULL, '\254' }, + {"quiet", no_argument, NULL, 'q' }, + {"version", no_argument, NULL, 'v' }, + {"usage", no_argument, NULL, 'u' }, + {"help", no_argument, NULL, '\255' }, + {NULL, 0, NULL, '\0'} + }; + static char *optstring_shadow = "f:r:w:h:o:qvu"; + static struct option long_options_util[] = { +#ifdef USE_LDAP + {"binddn", required_argument, NULL, 'D' }, +#endif + {"path", required_argument, NULL, 'P' }, + {"full-name", required_argument, NULL, 'f' }, + {"office", required_argument, NULL, 'o' }, + {"phone", required_argument, NULL, 'p' }, + {"home-phone", required_argument, NULL, 'h' }, + {"other", required_argument, NULL, 'm' }, + {"quiet", no_argument, NULL, 'q' }, + {"version", no_argument, NULL, 'v' }, + {"usage", no_argument, NULL, 'u' }, + {"service", required_argument, NULL, '\254' }, + {"help", no_argument, NULL, '\255' }, + {NULL, 0, NULL, '\0'} + }; + static char *optstring_util = "D:P:f:o:p:h:m:qvu"; + struct option *long_options; + char *optstring; + char *envstr; + const char *program = basename (argv[0]); + +#ifdef ENABLE_NLS + setlocale(LC_ALL, ""); + bindtextdomain(PACKAGE, LOCALEDIR); + textdomain(PACKAGE); +#endif + + if (strcasecmp (program, "ypchfn") == 0) + use_service = "nis"; + else if (strcasecmp (program, "chfn") != 0) + { + fprintf (stderr, _("%s: Don't know what I should do.\n"), program); + return 1; + } + + openlog (program, LOG_PID, LOG_AUTHPRIV); + + /* Before going any further, raise the ulimit and ignore + signals. */ + init_environment (); + + envstr = getenv ("SHADOW_CHFN"); + if (envstr) + { + if (strcmp (envstr, "0") == 0) + shadow_chfn = 0; + else if (strcmp (envstr, "1") == 0) + shadow_chfn = 1; + } + + memset (&new, 0, sizeof (new)); + + if (shadow_chfn) + { + long_options = long_options_shadow; + optstring = optstring_shadow; + } + else + { + long_options = long_options_util; + optstring = optstring_util; + } + + while (1) + { + int c; + int option_index = 0; + + c = getopt_long (argc, argv, optstring, + long_options, &option_index); + if (c == (-1)) + break; + switch (c) + { + case 'f': + if (!may_change_field ('f')) + { + fprintf (stderr, _("%s: Permission denied.\n"), program); + return 1; + } + new.fullname = locale_to_utf8 (optarg); + interactive = 0; + break; + case 'r': + case 'o': + case 'm': + /* This four have all a different meaning, depending on + SHADOW_CHFN. In result we check for office/room, misc + field and service switch. */ + if ((shadow_chfn && c == 'o') || + (!shadow_chfn && c == 'm')) + { + /* -o other or -m other */ + if (getuid() != 0) + { + fprintf (stderr, _("%s: Permission denied.\n"), program); + return 1; + } + new.other = locale_to_utf8 (optarg); + interactive = 0; + } + else if ((shadow_chfn && c == 'r') || + (!shadow_chfn && c == 'o')) + { + /* shadow chfn has "-r room" else "-o office" */ + if (!may_change_field ('r')) + { + fprintf (stderr, _("%s: Permission denied.\n"), program); + return 1; + } + new.roomno = locale_to_utf8 (optarg); + interactive = 0; + } + break; + case '\254': + if (use_service != NULL) + { + if (shadow_chfn) + print_usage_shadow (stderr, program); + else + print_usage_util (stderr, program); + return 1; + } + + if (strcasecmp (optarg, "yp") == 0 || + strcasecmp (optarg, "nis") == 0) + use_service = "nis"; + else if (strcasecmp (optarg, "nis+") == 0 || + strcasecmp (optarg, "nisplus") == 0) + use_service = "nisplus"; + else if (strcasecmp (optarg, "files") == 0) + use_service = "files"; +#ifdef USE_LDAP + else if (strcasecmp (optarg, "ldap") == 0) + use_service = "ldap"; +#endif + else + { + fprintf (stderr, + _("Service `%s' not supported.\n"), optarg); + if (shadow_chfn) + print_usage_shadow (stderr, program); + else + print_usage_util (stderr, program); + return 1; + } + break; + case 'w': + case 'p': + if (!may_change_field ('w')) + { + fprintf (stderr, _("%s: Permission denied.\n"), program); + return 1; + } + new.work_phone = locale_to_utf8 (optarg); + interactive = 0; + break; + case 'h': + if (!may_change_field ('h')) + { + fprintf (stderr, _("%s: Permission denied.\n"), program); + return 1; + } + new.home_phone = locale_to_utf8 (optarg); + interactive = 0; + break; + case 'q': + silent = 1; + break; +#ifdef USE_LDAP + case 'D': + binddn = optarg; + break; +#endif + case 'P': + if (uid != 0) + { + fprintf (stderr, + _("Only root is allowed to specify another path\n")); + return E_NOPERM; + } + else + files_etc_dir = strdup (optarg); + break; + case '\255': + if (shadow_chfn) + print_help_shadow (program); + else + print_help_util (program); + return 0; + case 'v': + print_version (program, "2005"); + return 0; + case 'u': + if (shadow_chfn) + print_usage_shadow (stdout, program); + else + print_usage_util (stdout, program); + return 0; + default: + print_error (program); + return 1; + } + } + + argc -= optind; + argv += optind; + + if (argc > 1) + { + fprintf (stderr, _("%s: Too many arguments.\n"), program); + print_error (program); + return 1; + } + + { + int buflen = 256; + char *buffer = alloca (buflen); + struct passwd resultbuf; + struct passwd *pw; + + /* Determine our own user name for authentication. */ + while (getpwuid_r (uid, &resultbuf, buffer, buflen, &pw) != 0 + && errno == ERANGE) + { + errno = 0; + buflen += 256; + buffer = alloca (buflen); + } + if (!pw) + { + fprintf (stderr, _("%s: Cannot determine your user name.\n"), + program); + return 1; + } + + caller_name = strdupa (pw->pw_name); + + /* We change the passwd information for another user, get that + data, too. */ + if (argc == 1) + { + char *user = locale_to_utf8 (argv[0]); + + while (getpwnam_r (user, &resultbuf, buffer, buflen, &pw) != 0 + && errno == ERANGE) + { + errno = 0; + buflen += 256; + buffer = alloca (buflen); + } + free (user); + + if (!pw) + { + fprintf (stderr, _("%s: Unknown user `%s'.\n"), + program, argv[0]); + return 1; + } + } + + pw_data = do_getpwnam (pw->pw_name, use_service); + if (pw_data == NULL || pw_data->service == S_NONE) + { + if (use_service) + fprintf (stderr, + _("%s: User `%s' is not known to service `%s'.\n"), + program, utf8_to_locale (pw->pw_name), use_service); + else + fprintf (stderr, _("%s: Unknown user `%s'.\n"), program, + utf8_to_locale (pw->pw_name)); + return 1; + } + + locale_name = utf8_to_locale (pw_data->pw.pw_name); + } + +#ifdef WITH_SELINUX + if (is_selinux_enabled () > 0) + { + if ((uid == 0) && + (selinux_check_access (pw_data->pw.pw_name, PASSWD__CHFN) != 0)) + { + security_context_t user_context; + if (getprevcon (&user_context) < 0) + user_context = + (security_context_t) strdup (_("Unknown user context")); + fprintf (stderr, + _("%s: %s is not authorized to change the finger information for %s.\n"), + program, user_context, locale_name); + if (security_getenforce() > 0) + { + syslog (LOG_ALERT, + "%s is not authorized to change the finger information for %s", + user_context, pw_data->pw.pw_name); + freecon (user_context); + return E_NOPERM; + } + else + { + fprintf (stderr, + _("SELinux is in permissive mode, continuing.\n")); + freecon (user_context); + } + } + } +#endif + + /* Only root is allowed to change the gecos field for local users. */ + if (uid && uid != pw_data->pw.pw_uid && + (pw_data->service == S_LOCAL +#ifdef USE_LDAP + || (pw_data->service == S_LDAP && binddn == NULL) +#endif + )) + { + syslog (LOG_ERR, "%u cannot change finger information for `%s'", + uid, pw_data->pw.pw_name); + fprintf (stderr, + _("You cannot change the finger information for `%s'.\n"), + locale_name); + free_user_t (pw_data); + return 1; + } + + if (!silent) + printf (_("Changing finger information for %s.\n"), locale_name); + + if (getlogindefs_bool ("CHFN_AUTH", 1) || pw_data->service != S_LOCAL) + { +#ifdef USE_LDAP + if (binddn && pw_data->service == S_LDAP) + pw_data->oldclearpwd = strdup (get_ldap_password (binddn)); + else +#endif /* USE_LDAP */ + if (do_authentication (program, caller_name, pw_data) != 0) + { + free_user_t (pw_data); + return 1; + } + if (pw_data->service != S_LOCAL && get_old_clear_password (pw_data) != 0) + return 1; + } + + { + fn_info old; + int len; + + memset (&old, 0, sizeof (old)); + + parse_passwd (pw_data->pw.pw_gecos, &old); + if (interactive) + get_fields (&old, &new); + + if (!new.fullname) + new.fullname = strdup (old.fullname ?:""); + if (check_field (program, new.fullname, ":,=") != 0) + { + fprintf (stderr, _("%s: Invalid name: `%s'\n"), program, + utf8_to_locale (new.fullname)); + return 1; + } + if (!new.roomno) + new.roomno = strdup (old.roomno ?:""); + if (check_field (program, new.roomno, ":,=") != 0) + { + fprintf (stderr, _("%s: Invalid room number: `%s'\n"), program, + utf8_to_locale (new.roomno)); + return 1; + } + if (!new.work_phone) + new.work_phone = strdup (old.work_phone ?:""); + if (check_field (program, new.work_phone, ":,=") != 0) + { + fprintf (stderr, _("%s: Invalid work phone: `%s'\n"), program, + utf8_to_locale (new.work_phone)); + return 1; + } + if (!new.home_phone) + new.home_phone = strdup (old.home_phone ?:""); + if (check_field (program, new.home_phone, ":,=") != 0) + { + fprintf (stderr, _("%s: Invalid home phone: `%s'\n"), program, + utf8_to_locale (new.home_phone)); + return 1; + } + if (!new.other) + new.other = strdup (old.other ?:""); + if (check_field (program, new.other, ":") != 0) + { + fprintf (stderr, _("%s: `%s' contains illegal characters.\n"), + program, utf8_to_locale (new.other)); + return 1; + } + + /* create the new gecos string */ + len = (strlen (new.fullname) + strlen (new.roomno) + + strlen (new.work_phone) + strlen (new.home_phone) + + strlen (new.other) + 4); + new_gecos = (char *)malloc (len + 1); + sprintf (new_gecos, "%s,%s,%s,%s,%s", new.fullname, new.roomno, + new.work_phone, new.home_phone, new.other); + + /* remove trailing empty fields (but not subfields of new.other) */ + if (new.other[0] == '\0') + { + while (len > 0 && new_gecos[len-1] == ',') + len--; + new_gecos[len] = 0; + } + } + + /* we don't need to change the gecos field if here is no change */ + if (strcmp (pw_data->pw.pw_gecos, new_gecos) == 0) + { + if (!silent) + printf (_("Finger information not changed.\n")); + return 0; + } + + pw_data->new_gecos = new_gecos; + + if (write_user_data (pw_data, 0) != 0) + { + fprintf (stderr, _("Error while changing finger information.\n")); + free_user_t (pw_data); + return 1; + } + else + { +#ifdef HAVE_NSCD_FLUSH_CACHE + nscd_flush_cache ("passwd"); +#endif + if (!silent) + printf (_("Finger information changed.\n")); + } + + free_user_t (pw_data); + + return 0; +} diff --git a/src/chpasswd.8 b/src/chpasswd.8 new file mode 100644 index 0000000..e2a4d77 --- /dev/null +++ b/src/chpasswd.8 @@ -0,0 +1,61 @@ +.\" -*- nroff -*- +.\" Copyright (C) 2003, 2004 Thorsten Kukuk +.\" Author: Thorsten Kukuk +.\" +.\" This program is free software; you can redistribute it and/or modify +.\" it under the terms of the GNU General Public License version 2 as +.\" published by the Free Software Foundation. +.\" +.\" 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +.\" +.TH chpasswd 8 "Feburary 2004" "pwdutils" +.SH NAME +chpasswd \- change user passwords in batch +.SH SYNOPSIS +\fBchpasswd\fR [\fB-D \fIbinddn\fR] [\fB-P \fIpath\fR] [\fB-c \fIdes\fR|\fImd5\fR|\fIblowfish\fR | \fB-e\fR] \fI[file]\fR +.SH DESCRIPTION +\fBchpasswd\fR changes passwords for user accounts in batch. It +reads a list of login and password pairs from standard input +or a file and uses this information to update the passwords of this +user accounts. The named account must exist and the password age will +be updated. Each input line is of the format: +.sp 1 + \fIuser_name\fR:\fIpassword\fR +.sp 1 +If the hash algorithmus is not given on the commandline, the value +of \fIGROUP_CRYPT\fR or, if not specified, \fICRYPT\fR from +\fI/etc/default/passwd\fR is used as hash algorithmus. +If not configured, the traditinal \fIdes\fR algorithmus is used. +.SH OPTIONS +.TP +.BI "\-c" " des|md5|blowfish" +This option specifies the hash algorithmus, which should be used to +encrypt the passwords. +.TP +.B "\-e" +The passwords are expected to be in encrypted form. Normally the +passwords are expected to be cleartext. +.TP +.BI "\-D, \-\-binddn" " binddn" +Use the Distinguished Name binddn to bind to the LDAP directory. +The user will be prompted for a password for simple authentication. +.TP +.BI "\-P, \-\-path" " path" +The \fIpasswd\fR and \fIshadow\fR files are located below +the specified directory path. \fBchpasswd\fR will use this files, +not \fI/etc/passwd\fR and \fI/etc/shadow\fR. +.SH FILES +/etc/default/passwd \- default values for password hash +.SH SEE ALSO +.BR passwd (1), +.BR passwd (5), +.BR shadow (5) +.SH AUTHOR +Thorsten Kukuk diff --git a/src/chpasswd.c b/src/chpasswd.c new file mode 100644 index 0000000..f0743b1 --- /dev/null +++ b/src/chpasswd.c @@ -0,0 +1,407 @@ +/* Copyright (C) 2003, 2004, 2005 Thorsten Kukuk + Author: Thorsten Kukuk + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License version 2 as + published by the Free Software Foundation. + + 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ + + +#ifdef HAVE_CONFIG_H +#include +#endif + +#include +#include +#include +#include +#include +#include +#include +#if defined(HAVE_XCRYPT_H) +#include +#elif defined(HAVE_CRYPT_H) +#include +#endif +#include +#include +#ifdef HAVE_LIBNSCD_H +#include +#endif + +#include "i18n.h" +#include "public.h" +#include "logging.h" +#include "logindefs.h" +#include "read-files.h" +#include "error_codes.h" +#include "parse_crypt_arg.h" + +#ifdef USE_LDAP +#include "libldap.h" +#endif /* USE_LDAP */ + +#ifndef _ +#define _(String) gettext (String) +#endif + +static void +print_usage (FILE *stream, const char *program) +{ + fprintf (stream, _("Usage: %s [-D binddn] [-P path] [-e] [-c des|md5|blowfish] [file]\n"), + program); +} + +static void +print_help (const char *program) +{ + print_usage (stdout, program); + fprintf (stdout, _("%s - update password entries in batch\n\n"), program); + +#ifdef USE_LDAP + fputs (_(" -D binddn Use dn \"binddn\" to bind to the LDAP directory\n"), + stdout); +#endif + fputs (_(" -P path Search passwd and shadow file in \"path\"\n"), + stdout); + fputs (_(" -c, --crypt Password should be encrypted with DES, MD5 or blowfish\n"), + stdout); + fputs (_(" -e, --encrypted The passwords are in encrypted form\n"), + stdout); + fputs (_(" --service srv Use nameservice 'srv'\n"), stdout); + fputs (_(" --help Give this help list\n"), stdout); + fputs (_(" -u, --usage Give a short usage message\n"), stdout); + fputs (_(" -v, --version Print program version\n"), stdout); + fputs (_("Valid services are: files, nis, nisplus, ldap\n"), stdout); +} + +int +main (int argc, char *argv[]) +{ + FILE *input = NULL; + const char *program = "chpasswd"; + crypt_t use_crypt; + int encrypted = 0; + char *buf = NULL; + size_t buflen = 0; + unsigned long line = 0, errors = 0; + char *use_service = NULL; +#ifdef USE_LDAP + char *oldclearpwd = NULL; + char *binddn = NULL; +#endif + +#ifdef ENABLE_NLS + setlocale(LC_ALL, ""); + bindtextdomain(PACKAGE, LOCALEDIR); + textdomain(PACKAGE); +#endif + + open_sec_log (program); + + use_crypt = parse_crypt_arg (getlogindefs_str ("CRYPT", "des")); + + while (1) + { + int c; + int option_index = 0; + static struct option long_options[] = { +#ifdef USE_LDAP + {"binddn", required_argument, NULL, 'D' }, +#endif + {"path", required_argument, NULL, 'P' }, + {"crypt", no_argument, NULL, 'c' }, + {"md5", no_argument, NULL, 'm' }, + {"encrypt", no_argument, NULL, 'e' }, + {"service", required_argument, NULL, '\254' }, + {"version", no_argument, NULL, 'v' }, + {"usage", no_argument, NULL, 'u' }, + {"help", no_argument, NULL, '\255' }, + {NULL, 0, NULL, '\0'} + }; + + c = getopt_long (argc, argv, "D:P:c:mevu", + long_options, &option_index); + if (c == (-1)) + break; + switch (c) + { +#ifdef USE_LDAP + case 'D': + binddn = optarg; + break; +#endif + case 'P': + files_etc_dir = strdup (optarg); + break; + case 'c': + use_crypt = parse_crypt_arg (optarg); + break; + case 'm': + use_crypt = MD5; + break; + case 'e': + ++encrypted; + break; + case '\254': + if (use_service != NULL) + { + print_usage (stderr, program); + return E_BAD_ARG; + } + + if (strcasecmp (optarg, "yp") == 0 || + strcasecmp (optarg, "nis") == 0) + use_service = "nis"; + else if (strcasecmp (optarg, "nis+") == 0 || + strcasecmp (optarg, "nisplus") == 0) + use_service = "nisplus"; + else if (strcasecmp (optarg, "files") == 0) + use_service = "files"; +#ifdef USE_LDAP + else if (strcasecmp (optarg, "ldap") == 0) + use_service = "ldap"; +#endif + else + { + fprintf (stderr, _("Service `%s' not supported.\n"), optarg); + print_usage (stderr, program); + return E_BAD_ARG; + } + break; + case '\255': + print_help (program); + return 0; + case 'v': + print_version (program, "2005"); + return 0; + case 'u': + print_usage (stdout, program); + return 0; + default: + print_error (program); + return E_USAGE; + } + } + + argc -= optind; + argv += optind; + + if (argc == 0) + input = stdin; + else if (argc == 1) + { + input = fopen (argv[0], "r"); + if (input == NULL) + { + fprintf (stderr, "%s: %s: %s\n", program, argv[0], + strerror (errno)); + return E_BAD_ARG; + } + } + else if (argc > 1) + { + fprintf (stderr, _("%s: Too many arguments.\n"), program); + print_error (program); + return E_USAGE; + } + +#ifdef USE_LDAP + if (binddn) + { + /* A user tries to change data stored in a LDAP database and + knows the Manager dn, now we need the password from him. */ + ldap_session_t *session = create_ldap_session (LDAP_PATH_CONF); + char *cp; + + if (session == NULL) + return E_FAILURE; + + cp = getpass (_("Enter LDAP Password:")); + + if (open_ldap_session (session) != 0) + return E_FAILURE; + + if (ldap_authentication (session, NULL, binddn, cp) != 0) + return E_NOPERM; + + close_ldap_session (session); + + oldclearpwd = strdup (cp); + } +#endif /* USE_LDAP */ + + /* Read each line, separating login from the password. The password + entry for each user will be looked up in the appropriate place, + defined through the search order in /etc/nsswitch.conf. */ + + while (!feof (input)) + { + char *tmp, *cp; + user_t *pw_data; + time_t now; +#if defined(HAVE_GETLINE) + ssize_t n = getline (&buf, &buflen, input); +#elif defined (HAVE_GETDELIM) + ssize_t n = getdelim (&buf, &buflen, '\n', input); +#else + ssize_t n; + + if (buf == NULL) + { + buflen = 8096; + buf = malloc (buflen); + } + buf[0] = '\0'; + fgets (buf, buflen - 1, input); + if (buf != NULL) + n = strlen (buf); + else + n = 0; +#endif /* HAVE_GETLINE / HAVE_GETDELIM */ + + ++line; + cp = buf; + + if (n < 1) + break; + + tmp = strchr (cp, ':'); + if (tmp) + *tmp = '\0'; + else + { + fprintf (stderr,_("%s: line %ld: missing new password\n"), + program, line); + ++errors; + continue; + } + + pw_data = do_getpwnam (cp, use_service); + if (pw_data == NULL || pw_data->service == S_NONE) + { + fprintf (stderr, _("%s: line %ld: unknown user %s\n"), + program, line, cp); + ++errors; + continue; + } + + cp = tmp+1; + tmp = strchr (cp, '\n'); + if (tmp) + *tmp = '\0'; + + if (encrypted) + pw_data->newpassword = strdup (cp); + else + { + char *salt; + struct crypt_data output; + memset (&output, 0, sizeof (output)); + + switch (use_crypt) + { + case DES: + /* If we don't support passwords longer 8 characters, + truncate them */ + if (strlen (cp) > 8) + cp[8] = '\0'; + salt = make_crypt_salt ("", 0); + if (salt != NULL) + pw_data->newpassword = strdup (crypt_r (cp, salt, &output)); + else + { + fprintf (stderr, _("Cannot create salt for standard crypt")); + ++errors; + continue; + } + free (salt); + break; + + case MD5: + /* MD5 has a limit of 127 characters */ + if (strlen (cp) > 127) + cp[127] = '\0'; + salt = make_crypt_salt ("$1$", 0); + if (salt != NULL) + pw_data->newpassword = strdup (crypt_r (cp, salt, &output)); + else + { + fprintf (stderr, _("Cannot create salt for MD5 crypt")); + ++errors; + continue; + } + free (salt); + break; + case BLOWFISH: +#if defined(HAVE_XCRYPT_GENSALT_R) + /* blowfish has a limit of 72 characters */ + if (use_crypt == BLOWFISH && strlen (cp) > 72) + cp[72] = '\0'; + salt = make_crypt_salt ("$2a$", 0 /* XXX crypt_rounds */); + if (salt != NULL) + pw_data->newpassword = strdup (crypt_r (cp, salt, &output)); + else + { + fprintf (stderr, _("Cannot create salt for blowfish crypt")); + ++errors; + continue; + } + free (salt); +#endif + break; + default: + abort(); + } + } + time (&now); + pw_data->spn.sp_lstchg = (long int)now / (24L*3600L); + pw_data->sp_changed = TRUE; + +#ifdef USE_LDAP + /* Add binddn data if user is stored in LDAP database and + we know the binddn. */ + if (pw_data->service == S_LDAP) + { + if (binddn) + pw_data->binddn = strdup (binddn); + if (oldclearpwd) + pw_data->oldclearpwd = strdup (oldclearpwd); + } +#endif + + if (write_user_data (pw_data, 0) != 0) + { + fprintf (stderr, + _("%s: line %ld: cannot update password entry\n"), + program, line); + ++errors; + continue; + } + + free_user_t (pw_data); + } + +#ifdef HAVE_NSCD_FLUSH_CACHE + nscd_flush_cache ("passwd"); +#endif + + if (errors) + { + fprintf (stderr, _("%s: errors occurred, %ld passwords not updated\n"), + program, errors); + } + + if (input != stdin) + fclose (input); + + return E_SUCCESS; +} diff --git a/src/chsh.1 b/src/chsh.1 new file mode 100644 index 0000000..18945c5 --- /dev/null +++ b/src/chsh.1 @@ -0,0 +1,86 @@ +.\" -*- nroff -*- +.\" Copyright (C) 2002, 2003, 2004 Thorsten Kukuk +.\" Author: Thorsten Kukuk +.\" +.\" This program is free software; you can redistribute it and/or modify +.\" it under the terms of the GNU General Public License version 2 as +.\" published by the Free Software Foundation. +.\" +.\" 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +.\" +.TH chsh 1 "February 2004" "pwdutils" +.SH NAME +chsh \- change login shell +.SH SYNOPSIS +.TP 5 +\fBchsh\fR +[\fB-D \fIbinddn\fR] [\fB-P \fIpath\fR] [\fB-s \fIshell\fR] [\fB-l\fR] [\fB-q\fR] [\fB-u\fR] [\fB-v\fR] [\fIuser\fR] +.SH DESCRIPTION +\fBchsh\fR is used to change the user login shell. +A normal user may only change the login shell for their own account, +the super user may change the login shell for any account. +.PP +If a shell is not given on the command line, \fBchsh\fR operates in +an interactive fashion, prompting the user with the current login shell. +Enter the new value to change the field, or leave the line blank to use +the current value. Enter \fInone\fR to remove the current value. +The current value is displayed between a pair of \fB[ ]\fR marks. +.PP +The only restrictions placed on the login shell is that the +command name must be listed in \fI/etc/shells\fR, unless the +invoker is the super-user, and then any value may be added. +An account with a restricted login shell may not change +their login shell. +.PP +This version of \fBchsh\fR is able to change the shell of +local, NIS, NIS+ and LDAP accounts , if the permissions allow +it. +.SH OPTIONS +.TP +.BI "\-D, \-\-binddn" " binddn" +Use the Distinguished Name binddn to bind to the LDAP directory. +The user will be prompted for a password for simple authentication. +.TP +.BI "\-P, \-\-path" " path" +The \fIpasswd\fR file is located below the specified directory +path. \fBchsh\fR will use this files, not \fI/etc/passwd\fR. +This is useful for example on NIS master servers, where you do +not want to give all users in the NIS database automatic access +to your NIS server and the NIS map is build from special files. +.TP +.B "\-s, \-\-shell" +Specify your login shell. +.TP +.B "\-l, \-\-list-shells" +Print the list of shells listed in +.I /etc/shells +and exit. +.TP +.B "\-q, \-\-quite" +Don't be verbose. +.TP +.B "\-u, \-\-usage" +Print a usage message and exit. +.TP +.B " \-\-help" +Print a more verbose help text and exit. +.TP +.B "-v, \-\-version" +Print version information and exit. +.SH FILES +/etc/passwd \- user account information +.br +/etc/shells \- list of valid login shells +.SH SEE ALSO +.BR chfn (1), +.BR passwd (5), +.BR shells (5) +.SH AUTHOR +Thorsten Kukuk diff --git a/src/chsh.c b/src/chsh.c new file mode 100644 index 0000000..be0eeb6 --- /dev/null +++ b/src/chsh.c @@ -0,0 +1,584 @@ +/* Copyright (C) 2002, 2003, 2004, 2005 Thorsten Kukuk + Author: Thorsten Kukuk + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License version 2 as + published by the Free Software Foundation. + + 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ + + +#ifdef HAVE_CONFIG_H +#include +#endif + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#ifdef WITH_SELINUX +#include +#include +#endif +#ifdef HAVE_LIBNSCD_H +#include +#endif + +#include "i18n.h" +#include "public.h" +#include "utf8conv.h" +#include "logindefs.h" +#include "read-files.h" +#include "error_codes.h" + +#ifdef USE_LDAP +#include "libldap.h" +#endif + +static void +print_usage (FILE *stream, const char *program) +{ + fprintf (stream, _("Usage: %s [-D binddn] [-P path] [-s shell] [-l] [-q]\n [--help] [--usage] [--version] [user]\n"), + program); +} + +static void +print_help (const char *program) +{ + print_usage (stdout, program); + fprintf (stdout, _("%s - change login shell\n\n"), program); + +#ifdef USE_LDAP + fputs (_(" -D binddn Use dn \"binddn\" to bind to the LDAP directory\n"), + stdout); +#endif + fputs (_(" -P path Search passwd and shadow file in \"path\"\n"), + stdout); + fputs (_(" -l List allowed shells from /etc/shells\n"), + stdout); + fputs (_(" -s shell Use 'shell' as new login shell\n"), stdout); + if (strcmp (program, "chsh") == 0) + fputs (_(" --service srv Use nameservice 'srv'\n"), stdout); + fputs (_(" -q, --quiet Don't be verbose\n"), stdout); + fputs (_(" --help Give this help list\n"), stdout); + fputs (_(" -u, --usage Give a short usage message\n"), stdout); + fputs (_(" -v, --version Print program version\n"), stdout); + + if (strcmp (program, "chsh") == 0) + fputs (_("Valid services are: files, nis, nisplus, ldap\n"), + stdout); +} + +/* If the given shell appears in /etc/shells, return 1. If not, + return 0. If the given shell is NULL, /etc/shells is outputted + to stdout. */ +static int +get_shell_list (const char *shell_name) +{ +#ifndef HAVE_GETUSERSHELL + FILE *fp; + char buf[BUFSIZ]; +#else + char *buf; +#endif + int found; + int len; + + found = 0; + +#ifdef HAVE_GETUSERSHELL + setusershell(); +#else + fp = fopen ("/etc/shells", "r"); + if (! fp) + { + if (! shell_name) + printf (_("No known shells.\n")); + return 1; + } +#endif + +#ifdef HAVE_GETUSERSHELL + while ((buf = getusershell ())) +#else + while (fgets (buf, sizeof (buf), fp) != NULL) +#endif + { + /* ignore comments */ + if (*buf == '#') + continue; + len = strlen (buf); + /* strip the ending newline */ + if (buf[len - 1] == '\n') + buf[len - 1] = 0; + /* check or output the shell */ + if (shell_name) + { + if (! strcmp (shell_name, buf)) + { + found = 1; + break; + } + } + else + printf ("%s\n", buf); + } +#ifdef HAVE_GETUSERSHELL + endusershell(); +#else + fclose (fp); +#endif + return found; +} + +/* return 1 if the named shell begins with 'r' or 'R' + If the first letter of the filename is 'r' or 'R', the shell is + considered to be restricted. */ +static int +restricted_shell (const char *sh) +{ +#if 0 + char *cp = Basename((char *) sh); + return *cp == 'r' || *cp == 'R'; +#else + /* Shells not listed in /etc/shells are considered to be + restricted. Changed this to avoid confusion with "rc" + (the plan9 shell - not restricted despite the name + starting with 'r'). */ + return !get_shell_list (sh); +#endif +} + +/* If the shell is completely invalid, print an error and + return 1. If root changes the shell, print only a warning. + Only exception: Invalid characters are always not allowed. */ +static int +check_shell (const char *program, const char *shell) +{ + uid_t uid = getuid (); + size_t i; + int c; + + if (*shell != '/') + { + fprintf (stderr, _("%s: Shell must be a full path name.\n"), program); + if (uid) + return 1; + } + if (access (shell, F_OK) < 0) + { + fprintf (stderr, _("%s: `%s' does not exist.\n"), program, shell); + if (uid) + return 1; + } + if (access (shell, X_OK) < 0) + { + fprintf (stderr, _("%s: `%s' is not executable.\n"), program, shell); + if (uid) + return 1; + } + /* keep /etc/passwd clean. */ + for (i = 0; i < strlen (shell); i++) + { + c = shell[i]; + if (c == ',' || c == ':' || c == '=' || c == '"' || c == '\n') + { + fprintf (stderr, _("%s: '%c' is not allowed.\n"), program, c); + return 1; + } + if (iscntrl (c)) + { + fprintf (stderr, _("%s: Control characters are not allowed.\n"), + program); + return 1; + } + } + if (! get_shell_list (shell)) + { + if (uid == 0) + printf (_("Warning: \"%s\" is not listed in /etc/shells.\n"), shell); + else + { + fprintf (stderr, _("%s: \"%s\" is not listed in /etc/shells.\n"), + program, shell); + fprintf (stderr, _("%s: Use -l option to see list.\n"), program); + return 1; + } + } + return 0; +} + + +int +main (int argc, char *argv[]) +{ + uid_t uid = getuid (); + char *new_shell = NULL; + int l_flag = 0; + int silent = 0; + user_t *pw_data = NULL; + char *use_service = NULL; + char *caller_name = NULL; + char *locale_name; + const char *program = basename (argv[0]); +#ifdef USE_LDAP + char *binddn = NULL; +#endif + +#ifdef ENABLE_NLS + setlocale(LC_ALL, ""); + bindtextdomain(PACKAGE, LOCALEDIR); + textdomain(PACKAGE); +#endif + + openlog (program, LOG_PID, LOG_AUTHPRIV); + + /* Before going any further, raise the ulimit and ignore + signals. */ + init_environment (); + + if (strcasecmp (program, "ypchsh") == 0) + use_service = "nis"; + else if (strcasecmp (program, "chsh") != 0) + { + fprintf (stderr, _("%s: Don't know what I should do.\n"), program); + return 1; + } + + while (1) + { + int c; + int option_index = 0; + static struct option long_options[] = + { +#ifdef USE_LDAP + {"binddn", required_argument, NULL, 'D' }, +#endif + {"path", required_argument, NULL, 'P' }, + {"shell", required_argument, NULL, 's' }, + {"list-shells", no_argument, NULL, 'l' }, + {"quiet", no_argument, NULL, 'q' }, + {"version", no_argument, NULL, 'v' }, + {"usage", no_argument, NULL, 'u' }, + {"service", required_argument, NULL, '\254' }, + {"help", no_argument, NULL, '\255' }, + {NULL, 0, NULL, '\0'} + }; + + c = getopt_long (argc, argv, "D:P:s:r:lvuq", + long_options, &option_index); + if (c == (-1)) + break; + switch (c) + { + + case 'l': + l_flag = 1; + break; + case 's': + if (! optarg) + { + print_usage (stderr, program); + return 1; + } + new_shell = strdup (optarg); + break; + case '\254': + if (use_service != NULL) + { + print_usage (stderr, program); + return 1; + } + + if (strcasecmp (optarg, "yp") == 0 || + strcasecmp (optarg, "nis") == 0) + use_service = "nis"; + else if (strcasecmp (optarg, "nis+") == 0 || + strcasecmp (optarg, "nisplus") == 0) + use_service = "nisplus"; + else if (strcasecmp (optarg, "files") == 0) + use_service = "files"; +#ifdef USE_LDAP + else if (strcasecmp (optarg, "ldap") == 0) + use_service = "ldap"; +#endif + else + { + fprintf (stderr, _("Service `%s' not supported.\n"), optarg); + print_usage (stderr, program); + return 1; + } + break; + case 'q': + silent = 1; + break; +#ifdef USE_LDAP + case 'D': + binddn = optarg; + break; +#endif + case 'P': + if (uid != 0) + { + fprintf (stderr, + _("Only root is allowed to specify another path\n")); + return E_NOPERM; + } + else + files_etc_dir = strdup (optarg); + break; + case '\255': + print_help (program); + return 0; + case 'v': + print_version (program, "2005"); + return 0; + case 'u': + print_usage (stdout, program); + return 0; + default: + print_error (program); + return 1; + } + } + + argc -= optind; + argv += optind; + + if (argc > 1 || (l_flag && argc > 0)) + { + fprintf (stderr, _("%s: Too many arguments.\n"), program); + print_error (program); + return 1; + } + + if (l_flag && new_shell) + { + fprintf (stderr, _("%s: Too many arguments.\n"), program); + print_error (program); + return 1; + } + + if (l_flag) + { + get_shell_list (NULL); + return 0; + } + else + { + int buflen = 256; + char *buffer = alloca (buflen); + struct passwd resultbuf; + struct passwd *pw; + + /* Determine our own user name for PAM authentication. */ + while (getpwuid_r (uid, &resultbuf, buffer, buflen, &pw) != 0 + && errno == ERANGE) + { + errno = 0; + buflen += 256; + buffer = alloca (buflen); + } + if (!pw) + { + fprintf (stderr, _("%s: Cannot determine your user name.\n"), + program); + return 1; + } + + caller_name = strdupa (pw->pw_name); + + /* We change the passwd information for another user, get that + data, too. */ + if (argc == 1) + { + char *user = locale_to_utf8 (argv[0]); + + while (getpwnam_r (user, &resultbuf, buffer, buflen, &pw) != 0 + && errno == ERANGE) + { + errno = 0; + buflen += 256; + buffer = alloca (buflen); + } + + free (user); + if (!pw) + { + fprintf (stderr, _("%s: Unknown user `%s'.\n"), + program, argv[0]); + return 1; + } + } + + pw_data = do_getpwnam (pw->pw_name, use_service); + if (pw_data == NULL || pw_data->service == S_NONE) + { + if (use_service) + fprintf (stderr, _("%s: User `%s' is not known to service `%s'.\n"), + program, utf8_to_locale (pw->pw_name), use_service); + else + fprintf (stderr, _("%s: Unknown user `%s'.\n"), program, + utf8_to_locale (pw->pw_name)); + return 1; + } + + locale_name = utf8_to_locale (pw_data->pw.pw_name); + } + +#ifdef WITH_SELINUX + if (is_selinux_enabled () > 0) + { + if ((uid == 0) && + (selinux_check_access (pw_data->pw.pw_name, PASSWD__CHSH) != 0)) + { + security_context_t user_context; + if (getprevcon (&user_context) < 0) + user_context = + (security_context_t) strdup (_("Unknown user context")); + fprintf (stderr, + _("%s: %s is not authorized to change the shell of `%s'.\n"), + program, user_context, locale_name); + if (security_getenforce() > 0) + { + syslog (LOG_ALERT, + "%s is not authorized to change the shell of `%s'", + user_context, pw_data->pw.pw_name); + freecon (user_context); + return E_NOPERM; + } + else + { + fprintf (stderr, + _("SELinux is in permissive mode, continuing\n")); + freecon (user_context); + } + } + } +#endif + + + /* Only root is allowed to change shell for local users. */ + if (uid && uid != pw_data->pw.pw_uid && + (pw_data->service == S_LOCAL +#ifdef USE_LDAP + || (pw_data->service == S_LDAP && binddn == NULL) +#endif + )) + { + syslog (LOG_ERR, "%u cannot change shell for \"%s\"", uid, + pw_data->pw.pw_name); + fprintf (stderr, _("You cannot change the shell for %s.\n"), + caller_name); + free_user_t (pw_data); + return 1; + } + + /* Normal user with restricted shell is not allowed to change it. */ + if (uid && restricted_shell (pw_data->pw.pw_shell)) + { + syslog (LOG_ERR, "User `%s' tries to change a restricted shell", + pw_data->pw.pw_name); + fprintf(stderr, _("You cannot change a restricted shell.\n")); + free_user_t (pw_data); + return 1; + } + + if (!silent) + printf (_("Changing login shell for %s.\n"), locale_name); + + if (getlogindefs_bool ("CHFN_AUTH", 1) || pw_data->service != S_LOCAL) + { +#ifdef USE_LDAP + if (binddn && pw_data->service == S_LDAP) + { + /* A user tries to change data stored in a LDAP database and + knows the Manager dn, now we need the password from him. */ + ldap_session_t *session = create_ldap_session (LDAP_PATH_CONF); + char *cp; + + if (session == NULL) + return E_FAILURE; + + cp = getpass (_("Enter LDAP Password:")); + + pw_data->binddn = strdup (binddn); + + if (open_ldap_session (session) != 0) + return E_FAILURE; + + if (ldap_authentication (session, NULL, binddn, cp) != 0) + return E_NOPERM; + + close_ldap_session (session); + + pw_data->oldclearpwd = strdup (cp); + } + else +#endif /* USE_LDAP */ + if (do_authentication (program, caller_name, pw_data) != 0) + { + free_user_t (pw_data); + return 1; + } + if (pw_data->service != S_LOCAL && get_old_clear_password (pw_data) != 0) + return 1; + } + + if (new_shell == NULL) + { + /* Allow user to abort with Ctrl-C here. */ + signal (SIGINT, SIG_DFL); + printf (_("Enter the new value, or press return for the default.\n")); + new_shell = get_value (pw_data->pw.pw_shell, _("Login Shell")); + signal (SIGINT, SIG_IGN); + } + + /* we don't need to change the shell if here is no change */ + if (new_shell == NULL || strcmp (pw_data->pw.pw_shell, new_shell) == 0) + { + if (!silent) + printf (_("Shell not changed.\n")); + return 0; + } + + pw_data->new_shell = new_shell; + + if (check_shell (program, new_shell) != 0) + { + free_user_t (pw_data); + return 1; + } + + if (write_user_data (pw_data, 0) != 0) + { + fprintf (stderr, _("Error while changing login shell.\n")); + free_user_t (pw_data); + return 1; + } + else + { +#ifdef HAVE_NSCD_FLUSH_CACHE + nscd_flush_cache ("passwd"); +#endif + if (!silent) + printf (_("Shell changed.\n")); + } + + free_user_t (pw_data); + + return 0; +} diff --git a/src/expiry.1 b/src/expiry.1 new file mode 100644 index 0000000..93a0761 --- /dev/null +++ b/src/expiry.1 @@ -0,0 +1,41 @@ +.\" -*- nroff -*- +.\" Copyright (C) 2003 Thorsten Kukuk +.\" Author: Thorsten Kukuk +.\" +.\" This program is free software; you can redistribute it and/or modify +.\" it under the terms of the GNU General Public License version 2 as +.\" published by the Free Software Foundation. +.\" +.\" 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +.\" +.TH expiry 1 "March 2003" "pwdutils" +.SH NAME +expiry \- check password expiration and enforce password change +.SH SYNOPSIS +.TP 5 +\fBexpiry\fR [\fB-f\fR] +.SH DESCRIPTION +\fBexpiry\fR checks the current password expiration and +prints a warning if the password is expiring or enforces a change +when required. +.SH OPTIONS +.TP +.B "\-f" +The caller is forced to change the password if it is expired +but inactive. +.SH FILES +passwd \- user account information +.br +shadow \- shadow user account information +.SH SEE ALSO +.BR passwd (1), +.BR passwd (5) +.SH AUTHOR +Thorsten Kukuk diff --git a/src/expiry.c b/src/expiry.c new file mode 100644 index 0000000..74cd19a --- /dev/null +++ b/src/expiry.c @@ -0,0 +1,317 @@ +/* Copyright (C) 2003, 2004, 2005 Thorsten Kukuk + Author: Thorsten Kukuk + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License version 2 as + published by the Free Software Foundation. + + 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ + + +#ifdef HAVE_CONFIG_H +#include +#endif + +#include +#include +#include +#include +#include +#include + +#include "i18n.h" +#include "public.h" +#include "utf8conv.h" +#include "logging.h" +#include "error_codes.h" + +#define SCALE DAY + +static void +print_usage (FILE *stream, const char *program) +{ + fprintf (stream, _("Usage: %s [-f]\n"), + program); +} + +static void +print_help (const char *program) +{ + print_usage (stdout, program); + fprintf (stdout, _("%s - check password expiration and enforce password change\n\n"), program); + + fputs (_(" -f, --force The caller is forced to change the password\n"), + stdout); + fputs (_(" --help Give this help list\n"), stdout); + fputs (_(" -u, --usage Give a short usage message\n"), stdout); + fputs (_(" -v, --version Print program version\n"), stdout); +} + +static int +c2n (char c) +{ + if (c == '.') + return 0; + else if (c == '/') + return 1; + else if (c >= '0' && c <= '9') + return 2 + (c - '0'); + else if (c >= 'A' && c <= 'Z') + return 12 + (c - 'A'); + else if (c >= 'a' && c <= 'z') + return 38 + (c - 'a'); + else return -1; +} + +static long +str2week (char *date) +{ + if (date == NULL || strlen (date) == 0) + return -1; + + if (strlen (date) == 1) + return c2n (date[0]); + else + return c2n (date[0]) + (c2n (date[1]) * 64); +} + +static int +hp_expire (const struct passwd *pw) +{ + long min, max; + char *age; + + age = strchr (pw->pw_passwd, ','); + if (age == NULL) + return 0; + ++age; + + max = c2n (age[0]); + if (max < 0) + { + error_state: + fprintf (stderr, _("Age field for %s is wrong"), + utf8_to_locale (pw->pw_name)); + return -1; + } + ++age; + + if (age == NULL) + goto error_state; + + min = c2n (age[0]); + if (min < 0) + goto error_state; + ++age; + + if (age == NULL) + goto error_state; + + if ((max == 0 && min == 0) || + ((time(0)/(SCALE*7) > str2week (age) + max) && (max >= min))) + { + fprintf (stdout, + _("Your password has expired. Choose a new password.")); + return 1; + } + + return 0; +} + +static int +expire (const struct spwd *sp) +{ + /* Print when the user has to change his password the next time ! */ + long now, remain; + + now = time (NULL) / SCALE; + + if (sp->sp_expire > 0 && now >= sp->sp_expire) + { + fprintf (stdout, + _("Your login has expired. " + "Contact the system administrator.\n")); + return 3; + } + + if (sp->sp_lstchg == 0) + { + fprintf (stdout, + _("Password changing requested. Choose a new password.\n")); + return 1; + } + else if (sp->sp_lstchg > 0 && sp->sp_max >= 0 && + (now > sp->sp_lstchg + sp->sp_max)) + { + if ((sp->sp_inact >= 0 && + now >= sp->sp_lstchg + sp->sp_max + sp->sp_inact) || + (sp->sp_max < sp->sp_min)) + { + fprintf (stdout, _("Your password is inactive. " + "Contact the system administrator.\n")); + return 2; + } + + fprintf (stdout, _("Your password has expired. " + "Choose a new password.\n")); + return 1; + } + + if (sp->sp_lstchg != -1 && sp->sp_max != -1 && sp->sp_warn != -1) + if ((remain = (sp->sp_lstchg + sp->sp_max) - now) <= sp->sp_warn) + { + if (remain > 1) + fprintf (stdout, _("Your password will expire in %ld days.\n"), + remain); + else if (remain == 1) + fprintf (stdout, _("Your password will expire tomorrow.\n")); + else if (remain == 0) + fprintf (stdout, _("Your password will expire within 24 hours.\n")); + } + + return 0; +} + + +int +main (int argc, char *argv[]) +{ + const char *program = "expiry"; + struct passwd resultpwbuf; + struct passwd *pw; + struct spwd resultspbuf; + struct spwd *sp; + uid_t uid = getuid (); + int force = 0, result = -1; + +#ifdef ENABLE_NLS + setlocale(LC_ALL, ""); + bindtextdomain(PACKAGE, LOCALEDIR); + textdomain(PACKAGE); +#endif + + open_sec_log (program); + + while (1) + { + int c; + int option_index = 0; + static struct option long_options[] = { + {"check", no_argument, NULL, 'c' }, + {"force", no_argument, NULL, 'f' }, + {"version", no_argument, NULL, 'v' }, + {"usage", no_argument, NULL, 'u' }, + {"help", no_argument, NULL, '\255' }, + {NULL, 0, NULL, '\0'} + }; + + c = getopt_long (argc, argv, "cfvu", + long_options, &option_index); + if (c == (-1)) + break; + switch (c) + { + case 'c': + /* Dummy for compatibility with expiry from shadow suite. */ + break; + case 'f': + ++force; + break; + case '\255': + print_help (program); + return 0; + case 'v': + print_version (program, "2005"); + return 0; + case 'u': + print_usage (stdout, program); + return 0; + default: + print_error (program); + return E_USAGE; + } + } + + argc -= optind; + argv += optind; + + if (argc > 1) + { + fprintf (stderr, _("%s: Too many arguments.\n"), program); + print_error (program); + return E_USAGE; + } + else + { + int buflen = 256; + char *buffer = malloc (buflen); + + /* Determine our own user name. */ + while (getpwuid_r (uid, &resultpwbuf, buffer, buflen, &pw) != 0 + && errno == ERANGE) + { + errno = 0; + buflen += 256; + buffer = realloc (buffer, buflen); + } + + if (!pw) + { + fprintf (stderr, _("%s: Cannot determine your user name.\n"), + program); + return E_UNKNOWN_USER; + } + + buffer = malloc (buflen); + /* Determine our own user name. */ + while (getspnam_r (pw->pw_name, &resultspbuf, buffer, buflen, &sp) != 0 + && errno == ERANGE) + { + errno = 0; + buflen += 256; + buffer = realloc (buffer, buflen); + } + } + + if (strchr (pw->pw_passwd, ',') != NULL) + result = hp_expire (pw); + else if (sp != NULL) + result = expire (sp); + + if (result == -1) + return E_FAILURE; + + if (force && result == 1) + { + int i; + + /* close all filehandles. */ + for (i = 3; i < getdtablesize(); ++i) + close (i); + + /* one single newline. */ + fputs ("\n", stdout); + + /* drop privilegs. */ + if (setgid (getgid ()) || setuid (uid)) + { + sec_log (program, MSG_DROP_PRIVILEGE_FAILED, errno, uid); + fprintf (stderr, _("%s: Failed to drop privileges: %s\n"), + program, strerror (errno)); + return E_FAILURE; + } + + execl (PASSWD_PROGRAM, PASSWD_PROGRAM, pw->pw_name, (char *)0); + perror ("Can't execute " PASSWD_PROGRAM); + return E_FAILURE; + } + + return 0; +} diff --git a/src/gpasswd.1 b/src/gpasswd.1 new file mode 100644 index 0000000..1245cc5 --- /dev/null +++ b/src/gpasswd.1 @@ -0,0 +1,50 @@ +.\" -*- nroff -*- +.\" Copyright (C) 2003, 2004, 2006 Thorsten Kukuk +.\" Author: Thorsten Kukuk +.\" +.\" This program is free software; you can redistribute it and/or modify +.\" it under the terms of the GNU General Public License version 2 as +.\" published by the Free Software Foundation. +.\" +.\" 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +.\" +.TH gpasswd 1 "July 2006" "pwdutils" +.SH NAME +gpasswd \- change group password +.SH SYNOPSIS +\fBgpasswd\fR [\fB-r\fR|\fB-l\fR|\fB-u\fR] [\fIgroup\fR] +.SH DESCRIPTION +\fBgpasswd\fR changes passwords for group accounts. Only an +administrator may change the password for any group. The used +hash algorithmus is defined by the value of \fIGROUP_CRYPT\fR +or, if not specified, \fICRYPT\fR from \fI/etc/default/passwd\fR. +If not configured, the traditinal \fIdes\fR algorithmus is used. +.SH OPTIONS +.TP +.B "\-r" +Remove group password. +.TP +.B "\-l" +A system administrator can lock the password of the specified group. +.TP +.B "\-u" +A system administrator can unlock the password of the specified group, +if the group is not passwordless afterwards (it will not unlock a group +that has only "!" as a password). +.SH FILES +/etc/group \- group account information +/etc/default/passwd \- default values for password hash +.SH SEE ALSO +.BR group (5), +.BR groupadd (8), +.BR groupdel (8), +.BR groupmod (8) +.SH AUTHOR +Thorsten Kukuk diff --git a/src/gpasswd.c b/src/gpasswd.c new file mode 100644 index 0000000..bbff7d0 --- /dev/null +++ b/src/gpasswd.c @@ -0,0 +1,479 @@ +/* Copyright (C) 2002, 2003, 2004, 2005, 2006, 2011 Thorsten Kukuk + Author: Thorsten Kukuk + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License version 2 as + published by the Free Software Foundation. + + 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ + +#if defined(HAVE_CONFIG_H) +#include "config.h" +#endif + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#if defined(HAVE_XCRYPT_H) +#include +#elif defined(HAVE_CRYPT_H) +#include +#endif +#ifdef HAVE_LIBNSCD_H +#include +#endif + +#include "i18n.h" +#include "group.h" +#include "logging.h" +#include "logindefs.h" +#include "read-files.h" +#include "error_codes.h" +#include "parse_crypt_arg.h" + +#define MAX_PASSWD_TRIES 3 + +char * +getpass_from_stdin (const char *prompt) +{ + static char password[160]; /* 127 is the longest with current crypt */ + char *ptr; + + password[0] = '\0'; + fprintf (stdout, "%s", prompt); + fflush (stdout); + if (fgets (password, sizeof (password), stdin) == NULL) + { + fprintf (stderr, "\n"); + fprintf (stderr, _("%s: error reading from stdin!\n"), + "gpasswd"); + return NULL; + } + fprintf (stdout, "\n"); + + /* Remove trailing \n. */ + ptr = strchr (password, '\n'); + if (ptr) + *ptr = 0; + + return password; +} + +static void +print_usage (FILE *stream, const char *program) +{ + fprintf (stream, _("Usage: %s [-r|-l|-u] group\n"), program); +} + +static void +print_help (const char *program) +{ + print_usage (stdout, program); + fprintf (stdout, _("%s - change group password\n\n"), program); + fputs (_(" -r Remove the password for this group\n"), stdout); + fputs (_(" -l Locks the password entry for \"group\"\n"), + stdout); + fputs (_(" -u Try to unlock the password entry for \"group\"\n"), + stdout); + fputs (_(" --service srv Use nameservice 'srv'\n"), stdout); + fputs (_(" -D binddn Use dn \"binddn\" to bind to the LDAP directory\n"), + stdout); + fputs (_(" -P path Search group file in \"path\"\n"), + stdout); + fputs (_(" --help Give this help list\n"), stdout); + fputs (_(" --usage Give a short usage message\n"), stdout); + fputs (_(" --version Print program version\n"), stdout); + fputs (_(" --stdin Receive input from stdin instead of /dev/tty\n"), stdout); + fputs (_("Valid services for -r are: files, nis, nisplus, ldap\n"), stdout); +} + +int +main (int argc, char **argv) +{ + const char *program = "gpasswd"; + char *group; + const char *crypt_str; + crypt_t use_crypt; + int remove_password = 0; + int lock_password = 0; + int unlock_password = 0; + char *binddn = NULL; + int P_flag = 0; + group_t *gr_data; + char *use_service = NULL; + int stdin_flag = 0; + +#ifdef ENABLE_NLS + setlocale(LC_ALL, ""); + bindtextdomain(PACKAGE, LOCALEDIR); + textdomain(PACKAGE); +#endif + + open_sec_log (program); + + /* Before going any further, raise the ulimit and ignore + signals. */ + init_environment (); + + crypt_str = getlogindefs_str ("GROUP_CRYPT", NULL); + if (crypt_str == NULL) + crypt_str = getlogindefs_str ("CRYPT", "des"); + use_crypt = parse_crypt_arg (crypt_str); + + /* Parse program arguments */ + while (1) + { + int c; + int option_index = 0; + static struct option long_options[] = + { + {"remove", required_argument, NULL, 'r'}, + {"lock", required_argument, NULL, 'l'}, + {"unlock", required_argument, NULL, 'u'}, + {"binddn", required_argument, NULL, 'D'}, + {"path", required_argument, NULL, 'P'}, + {"stdin", no_argument, NULL, '\251'}, + {"service", required_argument, NULL, '\252'}, + {"version", no_argument, NULL, '\255'}, + {"usage", no_argument, NULL, '\254'}, + {"help", no_argument, NULL, '\253'}, + {NULL, 0, NULL, '\0'} + }; + + c = getopt_long (argc, argv, "rluD:P:", long_options, + &option_index); + if (c == EOF) + break; + switch (c) + { + case 'D': + binddn = optarg; + break; + case 'r': + remove_password = 1; + break; + case 'l': + lock_password = 1; + break; + case 'u': + unlock_password = 1; + break; + case '\252': + if (use_service != NULL) + { + print_error (program); + return E_BAD_ARG; + } + if (strcasecmp (optarg, "yp") == 0 || + strcasecmp (optarg, "nis") == 0) + use_service = "nis"; + else if (strcasecmp (optarg, "nis+") == 0 || + strcasecmp (optarg, "nisplus") == 0) + use_service = "nisplus"; + else if (strcasecmp (optarg, "files") == 0) + use_service = "files"; +#ifdef USE_LDAP + else if (strcasecmp (optarg, "ldap") == 0) + use_service = "ldap"; +#endif + else + { + fprintf (stderr, _("Service `%s' not supported.\n"), optarg); + print_usage (stderr, program); + return E_BAD_ARG; + } + break; + case 'P': + P_flag = 1; + files_etc_dir = strdup (optarg); + break; + case '\253': + print_help (program); + return 0; + case '\255': + print_version (program, "2006"); + return 0; + case '\254': + print_usage (stdout, program); + return E_USAGE; + case '\251': + stdin_flag = 1; + break; + default: + print_error (program); + return E_BAD_ARG; + } + } + + argc -= optind; + argv += optind; + + /* We have more than one groupname. */ + if (argc > 1) + { + fprintf (stderr, _("%s: Too many arguments.\n"), program); + print_error (program); + return E_USAGE; + } + + /* We need a group name. */ + if (argc == 0) + { + fprintf (stderr, _("%s: Group argument missing.\n"), program); + print_error (program); + return E_USAGE; + } + else if (remove_password + lock_password + unlock_password > 1) + { + print_error (program); + return E_USAGE; + } + else + { + group = argv[0]; + gr_data = find_group_data (group, 0, use_service); + if (gr_data == NULL || gr_data->service == S_NONE) + { + if (use_service) + fprintf (stderr, + _("%s: Group `%s' is not known to service `%s'.\n"), + program, group, use_service); + else + fprintf (stderr, _("%s: Unknown group `%s'.\n"), program, + group); + + sec_log (program, MSG_UNKNOWN_GROUP, group, getuid ()); + + return E_NOPERM; + } + } + + /* Only root is allowed to change password for local groups. */ + if ((gr_data->service == S_LOCAL && getuid () != 0) || + (gr_data->service == S_LDAP && binddn == NULL) || + (gr_data->service != S_LOCAL && gr_data->service != S_LDAP)) + { + sec_log (program, MSG_PERMISSION_DENIED, + gr_data->gr.gr_name, gr_data->gr.gr_gid, getuid ()); + fprintf (stderr, _("%s: Permission denied.\n"), program); + free_group_t (gr_data); + return E_NOPERM; + } + + if (remove_password) + { + gr_data->newpassword = strdup (""); + } + else if (unlock_password) + { + /* If the password is only "!", don't unlock it. */ + if (gr_data->gr.gr_passwd && + gr_data->gr.gr_passwd[0] == '!' && + strlen (gr_data->gr.gr_passwd) > 1) + gr_data->newpassword = strdup (&gr_data->gr.gr_passwd[1]); + else + { + fprintf (stderr, _("Cannot unlock the password for `%s'!\n"), + gr_data->gr.gr_name); + free_group_t (gr_data); + return E_FAILURE; + } + + } + else if (lock_password) + { + if (gr_data->gr.gr_passwd == NULL) + gr_data->newpassword = strdup ("!"); + else if (gr_data->gr.gr_passwd[0] != '!') + { + gr_data->newpassword = + malloc (strlen (gr_data->gr.gr_passwd) + 2); + if (gr_data->newpassword == NULL) + return E_FAILURE; + strcpy (&gr_data->newpassword[1], gr_data->gr.gr_passwd); + gr_data->newpassword[0] = '!'; + } + else + { + fprintf (stderr, _("Password for `%s' is already locked!\n"), + gr_data->gr.gr_name); + free_group_t (gr_data); + return E_FAILURE; + } + } + else + { + char *p1; + int try; + + sec_log (program, MSG_CHANGING_GROUP_PASSWORD, group, getuid ()); + fprintf (stdout, _("Changing the password for group %s.\n"), group); + + for (try = 0; try < MAX_PASSWD_TRIES; try++) + { + const char *p2; + + if(stdin_flag) + p1 = getpass_from_stdin (_("New Password: ")); + else + p1 = getpass (_("New Password: ")); + + if (p1 == NULL || *p1 == '\0') + { + fputs ("\n", stderr); + abort_change: + sec_log (program, MSG_PASSWORD_CHANGE_ABORTED, + group, getuid ()); + + fprintf (stderr, _("Password change aborted.\n")); + return E_FAILURE; + } + + /* We need a copy of p1. */ + p1 = strdup (p1); + if (p1 == NULL) + { + fputs ("running out of memory!\n", stderr); + return E_FAILURE; + } + + if(stdin_flag) + p2 = getpass_from_stdin(_("Re-enter new password: ")); + else + p2 = getpass (_("Re-enter new password: ")); + + if (p2 == NULL || *p2 == '\0') + { + fputs ("\n", stderr); + free (p1); + goto abort_change; + } + + if (strcmp (p1, p2) != 0) + { + fprintf (stderr, _("Sorry, passwords do not match.\n")); + free (p1); + } + else + break; + } + if (try == MAX_PASSWD_TRIES) + { + fprintf (stderr, _("%s: Try again later.\n"), program); + sec_log (program, MSG_MAX_GROUP_PASSWD_TRIES, group, getuid ()); + free (p1); + goto abort_change; + } + else + { + char *salt; + struct crypt_data output; + memset (&output, 0, sizeof (output)); + + + switch (use_crypt) + { + case DES: + /* If we don't support passwords longer 8 characters, + truncate them */ + if (strlen (p1) > 8) + p1[8] = '\0'; + salt = make_crypt_salt ("", 0); + if (salt != NULL) + gr_data->newpassword = strdup (crypt_r (p1, salt, &output)); + else + { + free (p1); + fprintf (stderr, _("Cannot create salt for standard crypt")); + goto abort_change; + } + free (salt); + break; + case BLOWFISH: +#if defined(HAVE_XCRYPT_GENSALT_R) + /* blowfish has a limit of 72 characters */ + if (use_crypt == BLOWFISH && strlen (p1) > 72) + p1[72] = '\0'; + salt = make_crypt_salt ("$2a$", 0 /* XXX crypt_rounds */); + if (salt != NULL) + gr_data->newpassword = strdup (crypt_r (p1, salt, &output)); + else + { + free (p1); + fprintf (stderr, _("Cannot create salt for blowfish crypt")); + goto abort_change; + } + free (salt); + break; +#else + fprintf (stderr, + _("No support for blowfish compiled in. Using MD5\n")); +#endif + case MD5: + /* MD5 has a limit of 127 characters */ + if (strlen (p1) > 127) + p1[127] = '\0'; + salt = make_crypt_salt ("$1$", 0); + if (salt != NULL) + gr_data->newpassword = strdup (crypt_r (p1, salt, &output)); + else + { + free (p1); + fprintf (stderr, _("Cannot create salt for MD5 crypt")); + goto abort_change; + } + free (salt); + break; + default: + abort(); + } + free (p1); + } + } + + gr_data->todo = DO_MODIFY; + if (write_group_data (gr_data, 0) != 0) + { + fprintf (stderr, _("%s: Error changing password.\n"), + program); + sec_log (program, MSG_ERROR_CHANGE_GROUP_PASSWORD, group, getuid ()); + free_group_t (gr_data); + return E_FAILURE; + } + + if (strcmp(gr_data->newpassword,"") == 0) + { + printf (_("Password removed.\n")); + sec_log (program, MSG_GROUP_PASSWORD_REMOVED, group, + gr_data->gr.gr_gid, getuid ()); + } + else + { + printf (_("Password changed.\n")); + sec_log (program, MSG_GROUP_PASSWORD_CHANGED, + group, gr_data->gr.gr_gid, getuid ()); + } + +#ifdef HAVE_NSCD_FLUSH_CACHE + nscd_flush_cache ("group"); +#endif + + free_group_t (gr_data); + + return E_SUCCESS; +} diff --git a/src/groupadd.8 b/src/groupadd.8 new file mode 100644 index 0000000..a86ea02 --- /dev/null +++ b/src/groupadd.8 @@ -0,0 +1,88 @@ +.\" -*- nroff -*- +.\" Copyright (C) 2003 Thorsten Kukuk +.\" Author: Thorsten Kukuk +.\" +.\" This program is free software; you can redistribute it and/or modify +.\" it under the terms of the GNU General Public License version 2 as +.\" published by the Free Software Foundation. +.\" +.\" 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +.\" +.TH groupadd 8 "December 2003" "pwdutils" +.SH NAME +groupadd \- create a new group entry +.SH SYNOPSIS +.TP 8 +\fBgroupadd\fR [\fB-D \fIbinddn\fR] [\fB-P \fIpath\fR] [\fB-g \fIgid\fR [\fB-o\fR]] [\fB-p \fIpassword\fR] [\fB--preferred-gid \fIgid\fR] +.br +[\fB-r\fR] [\fB--service \fIservice\fR] [\fB--help\fR] [\fB--usage\fR] [\fB-v\fR] \fIgroup\fR +.SH DESCRIPTION +\fBgroupadd\fR creates a new group entry using the values specified +on the command line. Depending on the command line options the new +entry will be added to the system files or LDAP database. + +The group name must begin with an alphabetic character and the rest +of the string should be from the POSIX portable character class +([A-Za-z_][A-Za-z0-9_-.]*). +.SH OPTIONS +.TP +.BI "\-g, \-\-gid" " gid" +Force the new group ID to be the given number. This value must be +positive and unique. The default is to use the first free ID after +the greatest used one. The range from which the group ID is chosen +can be specified in \fI/etc/login.defs\fR. +.TP +.BI "\-\-preferred\-gid" " gid" +Set the new group ID to the specified value if possible. If that value +is already in use the first free ID will be chosen as described +above. +.TP +.B "\-o, \-\-non-unique" +Allow duplicate (non-unique) group IDs. +.TP +.BI "\-p, \-\-password" " password" +Encrypted password as returned by +.BR crypt (3) +for the new account. The default is to disable the account. +.TP +.B "\-r, \-\-system" +Create a system group. A system group is an entry with an GID +between SYSTEM_GID_MIN and SYSTEM_GID_MAX as defined in +\fI/etc/login.defs\fR, if no GID is specified. +.TP +.BI "\-\-service" " service" +Add the group to a special directory. The default is \fIfiles\fR, +but \fIldap\fR is also valid. +.TP +.BI "\-D, \-\-binddn" " binddn" +Use the Distinguished Name binddn to bind to the LDAP directory. +The user will be prompted for a password for simple authentication. +.TP +.BI "\-P, \-\-path" " path" +The \fIgroup\fR file is located below the specified directory path. +\fBgroupadd\fR will use this files, not \fI/etc/group\fR. +.TP +.B "\-\-help" +Print a list of valid options with a short description. +.TP +.B "\-\-usage" +Print a short list of valid options. +.TP +.B "\-v, \-\-version" +Print the version number and exit. +.SH FILES +/etc/group \- group account information +.SH SEE ALSO +.BR login.defs (5), +.BR group (5), +.BR groupdel (8), +.BR groupmod (8) +.SH AUTHOR +Thorsten Kukuk diff --git a/src/groupadd.c b/src/groupadd.c new file mode 100644 index 0000000..5230f93 --- /dev/null +++ b/src/groupadd.c @@ -0,0 +1,613 @@ +/* Copyright (C) 2003, 2004, 2005, 2008 Thorsten Kukuk + Author: Thorsten Kukuk + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License version 2 as + published by the Free Software Foundation. + + 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#ifdef HAVE_LIBNSCD_H +#include +#endif + +#ifdef USE_LDAP +#include "libldap.h" +#endif + +#include "i18n.h" +#include "group.h" +#include "public.h" +#include "logging.h" +#include "utf8conv.h" +#include "logindefs.h" +#include "read-files.h" +#include "error_codes.h" + +static void +print_usage (FILE *stream, const char *program) +{ + fprintf (stream, _("Usage: %s [-D binddn] [-g gid [-o]] [-r] [-P path] [-p password] group\n"), + program); +} + +static void +print_help (const char *program) +{ + print_usage (stdout, program); + fprintf (stdout, _("%s - create a new group\n\n"), program); + + fputs (_(" -D binddn Use dn \"binddn\" to bind to the LDAP directory\n"), stdout); + fputs (_(" -g gid Force the new groupid to be the given number\n"), + stdout); + fputs (_(" -o Allow duplicate (non-unique) UID\n"), stdout); + fputs (_(" -P path Search passwd, shadow and group file in \"path\"\n"), + stdout); + fputs (_(" -p password Encrypted password as returned by crypt(3)\n"), + stdout); + fputs (_(" -r, --system Create a system account\n"), stdout); + fputs (_(" --service srv Add account to nameservice 'srv'\n"), stdout); + fputs (_(" --help Give this help list\n"), stdout); + fputs (_(" --usage Give a short usage message\n"), stdout); + fputs (_(" -v, --version Print program version\n"), stdout); + fputs (_("Valid services for --service are: files, ldap\n"), stdout); +} + +static const char *program = "groupadd"; + +static struct option long_options[] = { +#ifdef USE_LDAP + {"binddn", required_argument, NULL, 'D'}, +#endif + {"force", no_argument, NULL, 'f'}, + {"gid", required_argument, NULL, 'g'}, + {"non-unique", no_argument, NULL, 'o'}, + {"path", required_argument, NULL, 'P'}, + {"password", required_argument, NULL, 'p'}, + {"preferred-gid", required_argument, NULL, '\252'}, + {"service", required_argument, NULL, '\253'}, + {"system", no_argument, NULL, 'r'}, + {"version", no_argument, NULL, 'v'}, + {"usage", no_argument, NULL, '\254'}, + {"help", no_argument, NULL, '\255'}, + {NULL, 0, NULL, '\0'} +}; +static const char *short_options = "D:fg:oP:p:ru:v"; + +static struct group * +files_getgrent (void) +{ + enum nss_status status; + static int buflen = 256; + static char *buffer = NULL; + static struct group resultbuf; + + if (buffer == NULL) + buffer = malloc (buflen); + + while ((status = files_getgrent_r (&resultbuf, buffer, buflen, &errno)) + == NSS_STATUS_TRYAGAIN && errno == ERANGE) + { + errno = 0; + buflen += 256; + buffer = realloc (buffer, buflen); + } + if (status == NSS_STATUS_SUCCESS) + return &resultbuf; + else + return NULL; +} + +static struct group * +files_getgrnam (const char *name) +{ + enum nss_status status; + static int buflen = 256; + static char *buffer = NULL; + static struct group resultbuf; + + if (buffer == NULL) + buffer = malloc (buflen); + + while ((status = + files_getgrnam_r (name, &resultbuf, buffer, buflen, + &errno)) == NSS_STATUS_TRYAGAIN + && errno == ERANGE) + { + errno = 0; + buflen += 256; + buffer = realloc (buffer, buflen); + } + if (status == NSS_STATUS_SUCCESS) + return &resultbuf; + else + return NULL; +} + +static struct group * +files_getgrgid (gid_t gid) +{ + enum nss_status status; + static int buflen = 256; + static char *buffer = NULL; + static struct group resultbuf; + + if (buffer == NULL) + buffer = malloc (buflen); + + while ((status = files_getgrgid_r (gid, &resultbuf, buffer, buflen, &errno)) + == NSS_STATUS_TRYAGAIN && errno == ERANGE) + { + errno = 0; + buflen += 256; + buffer = realloc (buffer, buflen); + } + if (status == NSS_STATUS_SUCCESS) + return &resultbuf; + else + return NULL; +} + + +/* find_free_gid - find the first, free available GID. */ +static gid_t +find_free_gid (int is_system_account, int have_extrapath) +{ + const struct group *grp; + gid_t groupid, gid_min, gid_max; + + if (is_system_account) + { + /* Some special handling for LSB. LSB defines + the GID range as: + 1 - 99: fix assigned system groups + 100 - 499: dynamic assigned system groups + If we use -r, try to get a uid from the dynamic + assigned range. */ + gid_min = getlogindefs_unum ("SYSTEM_GID_MIN", 100); + gid_max = getlogindefs_unum ("SYSTEM_GID_MAX", 499); + } + else + { + gid_min = getlogindefs_unum ("GID_MIN", 500); + gid_max = getlogindefs_unum ("GID_MAX", 60000); + } + + groupid = gid_min; + + /* Search the entire group file, looking for the + largest unused value. If gid_max does already exists, + skip this. */ + if (getgrgid (gid_max) == NULL) + { + setgrent (); + while ((grp = getgrent ())) + { + if (grp->gr_gid >= groupid) + { + if (grp->gr_gid > gid_max) + continue; + groupid = grp->gr_gid + 1; + } + } + if (have_extrapath && groupid != gid_max + 1) + { + /* If the -P flag is given, not only search in the + "official" database, but also in the extra one. */ + while ((grp = files_getgrent ())) + { + if (grp->gr_gid >= groupid) + { + if (grp->gr_gid > gid_max) + continue; + groupid = grp->gr_gid + 1; + } + } + } + } + else + groupid = gid_max + 1; /* gid_max exists, so this will be + the result of the above loop. */ + + /* If the GID we found is equal to GID_MAX+1, we will step + through the whole GID_MIN - GID_MAX range and search for + the first free GID. */ + if (groupid == gid_max + 1) + { + for (groupid = gid_min; groupid < gid_max; groupid++) + if (getgrgid (groupid) == NULL) + { + if (have_extrapath) + { + /* The GID is not used in the normal database, now + look in the extra one, too. */ + if (files_getgrgid (groupid) == NULL) + break; + } + else + break; + } + + if (groupid == gid_max) + { + fprintf (stderr, _("%s: Can't get unique gid in range %u - %u.\n"), + program, gid_min, gid_max); + sec_log (program, MSG_NO_FREE_GID, gid_min, gid_max); + exit (E_FAILURE); + } + } + return groupid; +} + +int +main (int argc, char **argv) +{ + char *use_service = NULL; +#ifdef USE_LDAP + char *binddn = NULL; +#endif + char *new_group = NULL; + char *new_password = NULL; + int prefer_gid = 0; + int know_gid = 0; + gid_t new_gid = 0; + int system_account = 0; + int non_unique = 0; + int have_extrapath = 0; + int force_add = 0; + +#ifdef ENABLE_NLS + setlocale (LC_ALL, ""); + bindtextdomain (PACKAGE, LOCALEDIR); + textdomain (PACKAGE); +#endif + + /* Before going any further, raise the ulimit and ignore + signals. */ + + init_environment (); + + while (1) + { + int c; + int option_index = 0; + + c = getopt_long (argc, argv, short_options, + long_options, &option_index); + if (c == (-1)) + break; + switch (c) + { + case 'D': +#ifdef USE_LDAP + binddn = optarg; +#endif + break; + case 'f': + fprintf (stderr, + _("%s: You are using an undocumented option (-f)!\n"), + program); + force_add = 1; + break; + case 'g': + if (strtoid (optarg, &new_gid) == -1) /* invalid number */ + { + fprintf (stderr, + _("%s: Invalid numeric argument `%s' for Group ID.\n"), + program, optarg); + return E_BAD_ARG; + } + know_gid = 1; + break; + case '\252': + if (strtoid (optarg, &new_gid) == -1) /* invalid number */ + { + fprintf (stderr, + _("%s: Invalid numeric argument `%s' for Group ID.\n"), + program, optarg); + return E_BAD_ARG; + } + prefer_gid = 1; + break; + case 'o': + non_unique = 1; + break; + case 'P': + files_etc_dir = strdup (optarg); + have_extrapath = 1; + /* If -P option is used, set use_service to "files" if not + already set through an option. If we don't limitate to + service files, we can get trouble finding the right + source. */ + if (!use_service) + use_service = "files"; + break; + case 'p': /* set encrypted password */ + if (strcspn (optarg, ":\n") != strlen (optarg)) + { + fprintf (stderr, _("%s: Invalid characters in password `%s'.\n"), + program, optarg); + return E_BAD_ARG; + } + new_password = optarg; + break; + case 'r': + system_account = 1; + break; + case '\253': + if (use_service != NULL) + { + print_usage (stderr, program); + return E_BAD_ARG; + } + + if (strcasecmp (optarg, "files") == 0) + use_service = "files"; +#ifdef USE_LDAP + else if (strcasecmp (optarg, "ldap") == 0) + use_service = "ldap"; +#endif + else + { + fprintf (stderr, _("Service `%s' not supported.\n"), optarg); + print_usage (stderr, program); + return E_BAD_ARG; + } + break; + case '\255': + print_help (program); + return 0; + case 'v': + print_version (program, "2008"); + return 0; + case '\254': + print_usage (stdout, program); + return 0; + default: + print_error (program); + return E_USAGE; + } + } + + if(know_gid && prefer_gid) + { + fprintf (stderr, _("%s: You cannot use --gid and --preferred-gid at the same time.\n"), + program); + return E_BAD_ARG; + } + + if(!know_gid && prefer_gid) + { + know_gid = 1; + } + + argc -= optind; + argv += optind; + + if (argc > 1) + { + fprintf (stderr, _("%s: Too many arguments.\n"), program); + print_error (program); + return E_USAGE; + } + else if (argc == 0) + { + fprintf (stderr, _("%s: Too few arguments.\n"), program); + print_error (program); + return E_USAGE; + } + else if (force_add && non_unique) + { + fprintf (stderr, _("%s: You cannot use -f with -o.\n"), program); + print_usage (stderr, program); + return E_USAGE; + } + else + { + int buflen = 256; + char *buffer = alloca (buflen); + struct passwd resultbuf; + struct passwd *pw; + + open_sec_log (program); + + /* Determine our own user name for PAM authentication. */ + while (getpwuid_r (getuid (), &resultbuf, buffer, buflen, &pw) != 0 + && errno == ERANGE) + { + errno = 0; + buflen += 256; + buffer = alloca (buflen); + } + + if (!pw) + { + sec_log (program, MSG_NO_ACCOUNT_FOUND, getuid ()); + fprintf (stderr, _("%s: Cannot determine your user name.\n"), + program); + return E_UNKNOWN_USER; + } + + if (do_authentication ("shadow" /* XXX program */, + pw->pw_name, NULL) != 0) + { + sec_log (program, MSG_PERMISSION_DENIED, pw->pw_name, + pw->pw_uid, getuid() ); + return E_NOPERM; + } + } + + /* After this, we can start creating the new group. */ + if (know_gid && !non_unique) + { + if (getgrgid (new_gid) != NULL || + (have_extrapath && files_getgrgid (new_gid) != NULL)) + { + if (force_add) + { + /* If -f was given, reset -g option. */ + fprintf (stderr, + _("%s: GID %u is not unique, using another one.\n"), + program, new_gid); + know_gid = 0; + } + else if (prefer_gid) + { + know_gid = 0; + } + else + { + fprintf (stderr, _("%s: GID %u is not unique.\n"), + program, new_gid); + sec_log (program, MSG_GID_NOT_UNIQUE, new_gid, getuid ()); + return E_GID_IN_USE; + } + } + } + + new_group = locale_to_utf8 (argv[0]); + if (check_name (new_group) != 0) + { + fprintf (stderr, _("%s: Invalid group name `%s'.\n"), + program, utf8_to_locale (new_group)); + sec_log (program, MSG_GROUP_NAME_INVALID, new_group, getuid()) + return E_BAD_ARG; + } + + /* Lock group file, so that a concurrent useradd process will not + add the user a second time or a second user with the same uid. */ + if ((use_service == NULL || strcmp (use_service, "files") == 0) && + lock_database () != 0) + { + fputs (_("Cannot lock group file: already locked.\n"), stderr); + sec_log (program, MSG_GROUP_FILE_ALREADY_LOCKED); + return E_PWDBUSY; + } + else if (getgrnam (new_group) != NULL || + (have_extrapath && files_getgrnam (new_group) != NULL)) + { /* Group does already exists. */ + fprintf (stderr, _("%s: Group `%s' already exists.\n"), + program, utf8_to_locale (new_group)); + sec_log (program, MSG_GROUP_ALREADY_EXISTS, new_group, getuid ()); + return E_NAME_IN_USE; + } + else + { + int i; + group_t gr_data; + int retval = E_SUCCESS; + + memset (&gr_data, 0, sizeof (gr_data)); + + if (use_service) + { + if (strcmp (use_service, "files") == 0) + gr_data.service = S_LOCAL; + else if (strcmp (use_service, "ldap") == 0) + gr_data.service = S_LDAP; + } + else + gr_data.service = S_LOCAL; + + gr_data.todo = DO_CREATE; + + gr_data.gr.gr_name = new_group; + if (new_password) + gr_data.gr.gr_passwd = new_password; + else + gr_data.gr.gr_passwd = "!"; + + gr_data.gr.gr_gid = know_gid ? new_gid : find_free_gid (system_account, + have_extrapath); + +#ifdef USE_LDAP + if (gr_data.service == S_LDAP) + { + if (binddn == NULL) + { + binddn = get_caller_dn (); + if (binddn == NULL) + { + fprintf (stderr, _("%s: Cannot add group to LDAP database without DN.\n"), + program); + } + else gr_data.binddn = strdup (binddn); + } + else + gr_data.binddn = strdup (binddn); + + if (gr_data.oldclearpwd == NULL) + { + char *cp = get_ldap_password (gr_data.binddn); + + if (cp) + gr_data.oldclearpwd = strdup (cp); + else + { + fprintf (stderr, + _("%s: Group not added to LDAP database.\n"), + program); + return E_FAILURE; + } + } + } +#endif + + if (write_group_data (&gr_data, 1) != 0) + { + sec_log (program, MSG_ERROR_ADDING_NEW_GROUP, gr_data.gr.gr_name, + (unsigned int) gr_data.gr.gr_gid, getuid()); + return E_FAILURE; + } + else + { + sec_log (program, MSG_NEW_GROUP_ADDED, gr_data.gr.gr_name, + (unsigned int) gr_data.gr.gr_gid, getuid()); + } + +#ifdef HAVE_NSCD_FLUSH_CACHE + /* flush NSCD cache. */ + nscd_flush_cache ("group"); +#endif + + if (use_service == NULL || strcmp (use_service, "files") == 0) + ulckpwdf (); + + i = call_script ("GROUPADD_CMD", gr_data.gr.gr_name, + gr_data.gr.gr_gid, getuid (), NULL, program); + if (i != 0) + { + fprintf (stderr, _("%s: GROUPADD_CMD fails with exit code %d.\n"), + program, i); + retval = E_FAILURE; + } + + return retval; + } + + return E_SUCCESS; +} diff --git a/src/groupdel.8 b/src/groupdel.8 new file mode 100644 index 0000000..4ec6c2c --- /dev/null +++ b/src/groupdel.8 @@ -0,0 +1,63 @@ +.\" -*- nroff -*- +.\" Copyright (C) 2003 Thorsten Kukuk +.\" Author: Thorsten Kukuk +.\" +.\" This program is free software; you can redistribute it and/or modify +.\" it under the terms of the GNU General Public License version 2 as +.\" published by the Free Software Foundation. +.\" +.\" 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +.\" +.TH groupdel 8 "October 2003" "pwdutils" +.SH NAME +groupdel \- delete a group entry +.SH SYNOPSIS +.TP 8 +\fBgroupdel\fR [\fB-D \fIbinddn\fR] [\fB-P \fIpath\fR] [\fB--service \fIservice\fR] +.br +[\fB--help\fR] [\fB-u\fR] [\fB-v\fR] \fIgroup\fR +.SH DESCRIPTION +\fBgroupdel\fR removes a group entry from the local system files or +a LDAP database. A primary group of any existing user is not removeable. +All filesystems must be checked manually to insure that no +files remain with the named group. +.SH OPTIONS +.TP +.BI "\-\-service" " service" +Add the account to a special directory. The default is \fIfiles\fR, +but \fIldap\fR is also valid. +.TP +.BI "\-D, \-\-binddn" " binddn" +Use the Distinguished Name binddn to bind to the LDAP directory. +The user will be prompted for a password for simple authentication. +.TP +.BI "\-P, \-\-path" " path" +The \fIpasswd\fR and \fIshadow\fR files are located below +the specified directory path. \fBchpasswd\fR will use this files, +not \fI/etc/passwd\fR and \fI/etc/shadow\fR. +.TP +.B "\-\-help" +Print a list of valid options with a short description. +.TP +.B "\-u, \-\-usage" +Print a short list of valid options. +.TP +.B "\-v, \-\-version" +Print the version number and exit. +.SH FILES +group \- group information +.SH SEE ALSO +.BR passwd (1), +.BR login.defs (5), +.BR group (5), +.BR groupadd (8), +.BR groupmod (8) +.SH AUTHOR +Thorsten Kukuk diff --git a/src/groupdel.c b/src/groupdel.c new file mode 100644 index 0000000..ab3bff7 --- /dev/null +++ b/src/groupdel.c @@ -0,0 +1,406 @@ +/* Copyright (C) 2003, 2004, 2005 Thorsten Kukuk + Author: Thorsten Kukuk + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License version 2 as + published by the Free Software Foundation. + + 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#ifdef HAVE_LIBNSCD_H +#include +#endif + +#ifdef USE_LDAP +#include "libldap.h" +#endif + +#include "i18n.h" +#include "group.h" +#include "public.h" +#include "logging.h" +#include "utf8conv.h" +#include "logindefs.h" +#include "read-files.h" +#include "error_codes.h" + +static void +print_usage (FILE *stream, const char *program) +{ + fprintf (stream, _("Usage: %s [-D binddn] [-P path] group\n"), program); +} + +static void +print_help (const char *program) +{ + print_usage (stdout, program); + fprintf (stdout, _("%s - delete a group\n\n"), program); + +#ifdef USE_LDAP + fputs (_(" -D binddn Use dn \"binddn\" to bind to the LDAP directory\n"), + stdout); +#endif + fputs (_(" -P path Search passwd, shadow and group file in \"path\"\n"), + stdout); + fputs (_(" --service srv Add account to nameservice 'srv'\n"), stdout); + fputs (_(" --help Give this help list\n"), stdout); + fputs (_(" -u, --usage Give a short usage message\n"), stdout); + fputs (_(" -v, --version Print program version\n"), stdout); + fputs (_("Valid services for --service are: files, ldap\n"), stdout); +} + +static const char *program = "groupdel"; + +static struct option long_options[] = { +#ifdef USE_LDAP + {"binddn", required_argument, NULL, 'D' }, +#endif + {"force", no_argument, NULL, 'f'}, + {"remove-home", no_argument, NULL, 'r'}, + {"path", required_argument, NULL, 'P'}, + {"version", no_argument, NULL, 'v'}, + {"service", required_argument, NULL, '\253'}, + {"usage", no_argument, NULL, 'u'}, + {"help", no_argument, NULL, '\255'}, + {NULL, 0, NULL, '\0'} +}; +static const char *short_options = "D:frP:uv"; + +static struct passwd * +files_getpwent (void) +{ + enum nss_status status; + static int buflen = 256; + static char *buffer = NULL; + static struct passwd resultbuf; + + if (buffer == NULL) + buffer = malloc (buflen); + + while ((status = files_getpwent_r (&resultbuf, buffer, buflen, &errno)) + == NSS_STATUS_TRYAGAIN && errno == ERANGE) + { + errno = 0; + buflen += 256; + buffer = realloc (buffer, buflen); + } + if (status == NSS_STATUS_SUCCESS) + return &resultbuf; + else + return NULL; +} + +static int +is_primary_group (gid_t gid, int have_extrapath) +{ + struct passwd *pw; + int retval = 0; + + setpwent (); + + while ((pw = getpwent ())) + { + if (pw->pw_gid == gid) + { + fprintf (stderr, + _("%s: GID `%u' is primary group of `%s'.\n"), + program, (unsigned int) gid, + utf8_to_locale (pw->pw_name)); + sec_log (program, MSG_GID_IS_PRIMARY_GROUP, (unsigned int) gid, + pw->pw_name, getuid ()); + retval = 1; + } + } + + endpwent (); + + if (have_extrapath) + while ((pw = files_getpwent ())) + { + if (pw->pw_gid == gid) + { + fprintf (stderr, + _("%s: GID `%u' is primary group of `%s'.\n"), + program, (unsigned int) gid, + utf8_to_locale (pw->pw_name)); + sec_log (program, MSG_GID_IS_PRIMARY_GROUP, (unsigned int) gid, + pw->pw_name, getuid ()); + retval = 1; + } + } + + return retval; +} + +int +main (int argc, char **argv) +{ + char *use_service = NULL; +#ifdef USE_LDAP + char *binddn = NULL; +#endif + char *remove_group; + int have_extrapath = 0; + group_t *gr_data; + int retval = E_SUCCESS; + +#ifdef ENABLE_NLS + setlocale (LC_ALL, ""); + bindtextdomain (PACKAGE, LOCALEDIR); + textdomain (PACKAGE); +#endif + + /* Before going any further, raise the ulimit and ignore + signals. */ + + init_environment (); + + open_sec_log (program); + + while (1) + { + int c; + int option_index = 0; + + c = getopt_long (argc, argv, short_options, + long_options, &option_index); + if (c == (-1)) + break; + switch (c) + { +#ifdef USE_LDAP + case 'D': + binddn = optarg; + break; +#endif + case 'P': + files_etc_dir = strdup (optarg); + have_extrapath = 1; + /* If -P option is used, set service to "files" if not already + set through an option. If we don't limitate to service files, + we can get trouble finding the right source. */ + if (!use_service) + use_service = "files"; + break; + case '\253': + if (use_service != NULL) + { + print_usage (stderr, program); + return E_BAD_ARG; + } + + if (strcasecmp (optarg, "files") == 0) + use_service = "files"; +#ifdef USE_LDAP + else if (strcasecmp (optarg, "ldap") == 0) + use_service = "ldap"; +#endif + else + { + fprintf (stderr, _("Service `%s' not supported.\n"), optarg); + print_usage (stderr, program); + return E_BAD_ARG; + } + break; + case '\255': + print_help (program); + return 0; + case 'u': + print_usage (stdout, program); + return 0; + case 'v': + print_version (program, "2005"); + return 0; + default: + print_error (program); + return E_USAGE; + } + } + + argc -= optind; + argv += optind; + + if (argc > 1) + { + fprintf (stderr, _("%s: Too many arguments.\n"), program); + print_error (program); + return E_USAGE; + } + else if (argc == 0) + { + fprintf (stderr, _("%s: Too few arguments.\n"), program); + print_error (program); + return E_USAGE; + } + else + { + int buflen = 256; + char *buffer = alloca (buflen); + struct passwd resultbuf; + struct passwd *pw; + + /* Determine our own user name for PAM authentication. */ + while (getpwuid_r (getuid (), &resultbuf, buffer, buflen, &pw) != 0 + && errno == ERANGE) + { + errno = 0; + buflen += 256; + buffer = alloca (buflen); + } + + if (!pw) + { + sec_log (program, MSG_NO_ACCOUNT_FOUND, getuid ()); + fprintf (stderr, _("%s: Cannot determine your user name.\n"), + program); + return E_NOTFOUND; + } + + if (do_authentication ("shadow", pw->pw_name, NULL) != 0) + { + sec_log (program, MSG_PERMISSION_DENIED, pw->pw_name, + pw->pw_uid, getuid()); + return E_NOPERM; + } + } + + remove_group = locale_to_utf8 (argv[0]); + + gr_data = find_group_data (remove_group, 0, use_service); + if (gr_data == NULL || gr_data->service == S_NONE) + { + if (use_service) + fprintf (stderr, _("%s: Group `%s' not found in service `%s'.\n"), + program, utf8_to_locale (remove_group), use_service); + else + fprintf (stderr, _("%s: Unknown group `%s'.\n"), program, + utf8_to_locale (remove_group)); + + sec_log (program, MSG_UNKNOWN_GROUP, remove_group, getuid ()); + + return E_NOTFOUND; + } + + if (is_primary_group (gr_data->gr.gr_gid, have_extrapath)) + { + fprintf (stderr, _("%s: Cannot remove user's primary group.\n"), + program); + sec_log (program, MSG_CANNOT_REMOVE_PRIMARY_GROUP, + gr_data->gr.gr_name, getuid()); + return E_GROUP_BUSY; + } + +#ifdef USE_LDAP + if (gr_data->service == S_LDAP) + { + if (binddn == NULL) + { + binddn = get_caller_dn (); + if (binddn == NULL) + { + fprintf (stderr, _("%s: Cannot delete group from LDAP database without DN.\n"), + program); + } + else gr_data->binddn = strdup (binddn); + } + else + gr_data->binddn = strdup (binddn); + + if (gr_data->oldclearpwd == NULL) + { + char *cp = get_ldap_password (gr_data->binddn); + + if (cp) + gr_data->oldclearpwd = strdup (cp); + else + { + fprintf (stderr, + _("%s: Group not deleted from LDAP database.\n"), + program); + return E_FAILURE; + } + } + } +#endif + +#if 0 /* XXX */ + i = call_script ("GROUPDEL_PRECMD", pw_data->pw.pw_name, pw_data->pw.pw_uid, + pw_data->pw.pw_gid, pw_data->pw.pw_dir); + if (i != 0) + { + fprintf (stderr, _("%s: GROUPDEL_PRECMD fails with exit code %d.\n"), + program, i); + return E_FAILURE; + } +#endif + + /* Lock group file, so that a concurrent processes will not + use this group. */ + if (gr_data->service == S_LOCAL && lock_database () != 0) + { + fputs (_("Cannot lock group file: already locked.\n"), stderr); + sec_log (program, MSG_GROUP_FILE_ALREADY_LOCKED); + return E_PWDBUSY; + } + + gr_data->todo = DO_DELETE; + if (write_group_data (gr_data, 1) != 0) + { + fprintf (stderr, _("%s: Error deleting group `%s'.\n"), + program, utf8_to_locale (gr_data->gr.gr_name)); + sec_log (program, MSG_ERROR_REMOVING_GROUP, gr_data->gr.gr_name, + gr_data->gr.gr_gid, getuid ()); + free_group_t (gr_data); + return E_FAILURE; + } + else + sec_log (program, MSG_GROUP_DELETED, gr_data->gr.gr_name, + gr_data->gr.gr_gid, getuid ()); + +#ifdef HAVE_NSCD_FLUSH_CACHE + /* flush NSCD cache to remove group really from the system. */ + nscd_flush_cache ("group"); +#endif + + if (gr_data->service == S_LOCAL) + ulckpwdf (); + +#if 0 /* XXX */ + i = call_script ("GROUPDEL_POSTCMD", pw_data->pw.pw_name, pw_data->pw.pw_uid, + pw_data->pw.pw_gid, pw_data->pw.pw_dir); + if (i != 0) + { + fprintf (stderr, _("%s: GROUPDEL_POSTCMD fails with exit code %d.\n"), + program, i); + return E_FAILURE; + } +#endif + + free_group_t (gr_data); + + return retval; +} diff --git a/src/groupmod.8 b/src/groupmod.8 new file mode 100644 index 0000000..d613a7d --- /dev/null +++ b/src/groupmod.8 @@ -0,0 +1,80 @@ +.\" -*- nroff -*- +.\" Copyright (C) 2003, 2004, 2005 Thorsten Kukuk +.\" Author: Thorsten Kukuk +.\" +.\" This program is free software; you can redistribute it and/or modify +.\" it under the terms of the GNU General Public License version 2 as +.\" published by the Free Software Foundation. +.\" +.\" 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +.\" +.TH groupmod 8 "April 2004" "pwdutils" +.SH NAME +groupmod \- modify a group entry +.SH SYNOPSIS +.TP 8 +\fBgroupmod\fR [\fB-D \fIbinddn\fR] [\fB-P \fIpath\fR] [\fB-g \fIgid\fR [\fB-o\fR]] [\fB-p \fIpassword\fR] +.br +[\fB-A \fIuser\fR] [\fB-R \fIuser\fR] [\fB--service \fIservice\fR] [\fB--help\fR] [\fB-v\fR] +.br +[\fB--usage\fR] \fIgroup\fR +.SH DESCRIPTION +\fBgroupmod\fR modifies a group entry using the values specified +on the command line. +.SH OPTIONS +.TP +.BI "\-g, \-\-gid" " gid" +Force the new group ID to be the given number. This value must be +positive and unique. The group of any file owned by the old group +must be changed manually. +.TP +.B "\-o, \-\-non-unique" +Allow duplicate (non-unique) group IDs. +.TP +.BI "\-p, \-\-password" " password" +Set the encrypted password as returned by +.BR crypt (3) +as the new group password. +.TP +.BI "\-A, \-\-add-user" " user" +Add the user account to the specified group. +.TP +.BI "\-R, \-\-remove-user" " user" +Remove the user account from the specified group. +.TP +.BI "\-D, \-\-binddn" " binddn" +Use the Distinguished Name binddn to bind to the LDAP directory. +The user will be prompted for a password for simple authentication. +.TP +.BI "\-P, \-\-path" " path" +The \fIgroup\fR file is located below the specified directory path. +\fBgroupmod\fR will use this file, not \fI/etc/group\fR. +.TP +.BI "\-\-service" " service" +Modify the group from a special directory. The default is \fIfiles\fR, +but \fIldap\fR is also valid. +.TP +.B "\-\-help" +Print a list of valid options with a short description. +.TP +.B "\-\-usage" +Print a short list of valid options. +.TP +.B "\-v, \-\-version" +Print the version number and exit. +.SH FILES +/etc/group \- group account information +.SH SEE ALSO +.BR login.defs (5), +.BR group (5), +.BR groupadd (8), +.BR groupmod (8) +.SH AUTHOR +Thorsten Kukuk diff --git a/src/groupmod.c b/src/groupmod.c new file mode 100644 index 0000000..ca48651 --- /dev/null +++ b/src/groupmod.c @@ -0,0 +1,528 @@ +/* Copyright (C) 2003, 2004, 2005 Thorsten Kukuk + Author: Thorsten Kukuk + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License version 2 as + published by the Free Software Foundation. + + 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#ifdef HAVE_LIBNSCD_H +#include +#endif + +#ifdef USE_LDAP +#include "libldap.h" +#endif + +#include "i18n.h" +#include "group.h" +#include "public.h" +#include "logging.h" +#include "utf8conv.h" +#include "logindefs.h" +#include "read-files.h" +#include "error_codes.h" + +static void +print_usage (FILE * stream, const char *program) +{ + fprintf (stream, _("Usage: %s [-g gid [-o]] [-n new_name] group\n"), program); +} + +static void +print_help (const char *program) +{ + print_usage (stdout, program); + fprintf (stdout, _("%s - modify a group entry\n\n"), program); + + fputs (_(" -D binddn Use dn \"binddn\" to bind to the LDAP directory\n"), + stdout); + fputs (_(" -g gid Change the groupid to the given number\n"), + stdout); + fputs (_(" -k skeldir Specify an alternative skel directory\n"), + stdout); + fputs (_(" -n name Change group name.\n"), stdout); + fputs (_(" -o Allow duplicate (non-unique) UID\n"), stdout); + fputs (_(" -P path Search passwd, shadow and group file in \"path\"\n"), + stdout); + fputs (_(" -p password Encrypted password as returned by crypt(3)\n"), + stdout); + fputs (_(" -A user Add the user to the group entry\n"), stdout); + fputs (_(" -R user Remove the user from the group entry\n"), stdout); + fputs (_(" --service srv Use nameservice 'srv'\n"), stdout); + fputs (_(" --help Give this help list\n"), stdout); + fputs (_(" --usage Give a short usage message\n"), stdout); + fputs (_(" -v, --version Print program version\n"), stdout); + fputs (_("Valid services are: files, ldap\n"), stdout); +} + +static const char *program = "groupmod"; + +static struct option long_options[] = { +#ifdef USE_LDAP + {"binddn", required_argument, NULL, 'D'}, +#endif + {"gid", required_argument, NULL, 'g'}, + {"name", required_argument, NULL, 'n'}, + {"non-unique", no_argument, NULL, 'o'}, + {"path", required_argument, NULL, 'P'}, + {"password", required_argument, NULL, 'p'}, + {"add-user", required_argument, NULL, 'A'}, + {"remove-user", required_argument, NULL, 'R'}, + {"version", no_argument, NULL, 'v'}, + {"service", required_argument, NULL, '\253'}, + {"usage", no_argument, NULL, '\254'}, + {"help", no_argument, NULL, '\255'}, + {NULL, 0, NULL, '\0'} +}; +static const char *short_options = "A:D:g:n:oP:p:R:v"; + +static struct group * +files_getgrnam (const char *name) +{ + enum nss_status status; + static int buflen = 256; + static char *buffer = NULL; + static struct group resultbuf; + + if (buffer == NULL) + buffer = malloc (buflen); + + while ((status = + files_getgrnam_r (name, &resultbuf, buffer, buflen, + &errno)) == NSS_STATUS_TRYAGAIN + && errno == ERANGE) + { + errno = 0; + buflen += 256; + buffer = realloc (buffer, buflen); + } + if (status == NSS_STATUS_SUCCESS) + return &resultbuf; + else + return NULL; +} + +static struct group * +files_getgrgid (gid_t gid) +{ + enum nss_status status; + static int buflen = 256; + static char *buffer = NULL; + static struct group resultbuf; + + if (buffer == NULL) + buffer = malloc (buflen); + + while ((status = files_getgrgid_r (gid, &resultbuf, buffer, buflen, &errno)) + == NSS_STATUS_TRYAGAIN && errno == ERANGE) + { + errno = 0; + buflen += 256; + buffer = realloc (buffer, buflen); + } + if (status == NSS_STATUS_SUCCESS) + return &resultbuf; + else + return NULL; +} + +/* XXX move to libpwdutils. */ +static char ** +add_gr_mem (const char *name, char **gr_mem) +{ + char **groups; + unsigned int i; + int already_added = 0; + + i = 0; + while (gr_mem[i]) + { + if (strcmp (gr_mem[i], name) == 0) + already_added = 1; + ++i; + } + ++i; /* for trailing NULL pointer */ + + if (!already_added) + ++i; + + groups = malloc (i * sizeof (char *)); + i = 0; + while (gr_mem[i]) + { + groups[i] = strdup (gr_mem[i]); + ++i; + } + + if (!already_added) + { + groups[i] = strdup (name); + ++i; + } + + groups[i] = NULL; + + return groups; +} + +int +main (int argc, char **argv) +{ + char *use_service = NULL; + group_t *gr_data; +#ifdef USE_LDAP + char *binddn = NULL; +#endif + char *modify_group; + char *new_name = NULL; + char *new_password = NULL; + gid_t new_gid = 0; + char *know_gid = NULL; + char *remove_user = NULL; + char *add_user = NULL; + int non_unique = 0; + int have_extrapath = 0; + int retval = E_SUCCESS; + +#ifdef ENABLE_NLS + setlocale (LC_ALL, ""); + bindtextdomain (PACKAGE, LOCALEDIR); + textdomain (PACKAGE); +#endif + + open_sec_log (program); + + /* Before going any further, raise the ulimit and ignore + signals. */ + init_environment (); + + while (1) + { + int c; + int option_index = 0; + + c = getopt_long (argc, argv, short_options, + long_options, &option_index); + if (c == (-1)) + break; + switch (c) + { + case 'D': +#ifdef USE_LDAP + binddn = optarg; +#endif + break; + case 'g': + if (strtoid (optarg, &new_gid) == -1) /* invalid number */ + { + fprintf (stderr, + _("%s: invalid numeric argument `%s' for Group ID.\n"), + program, optarg); + return E_BAD_ARG; + } + know_gid = optarg; + break; + case 'n': + new_name = locale_to_utf8 (optarg); + break; + case 'o': + non_unique = 1; + break; + case 'P': + files_etc_dir = strdup (optarg); + have_extrapath = 1; + /* If -P option is used, set use_service to "files" if not + already set through an option. If we don't limitate to + service files, we can get trouble finding the right + source. */ + if (!use_service) + use_service = "files"; + break; + case 'p': /* set encrypted password */ + if (strcspn (optarg, ":\n") != strlen (optarg)) + { + fprintf (stderr, + _("%s: invalid characters in password `%s'.\n"), + program, optarg); + return E_BAD_ARG; + } + new_password = optarg; + break; + case 'R': + if (remove_user != NULL) + { + print_usage (stderr, program); + return E_BAD_ARG; + } + remove_user = locale_to_utf8 (optarg); + break; + case '\253': + if (use_service != NULL) + { + print_usage (stderr, program); + return E_BAD_ARG; + } + + if (strcasecmp (optarg, "files") == 0) + use_service = "files"; +#ifdef USE_LDAP + else if (strcasecmp (optarg, "ldap") == 0) + use_service = "ldap"; +#endif + else + { + fprintf (stderr, _("Service `%s' not supported.\n"), optarg); + print_usage (stderr, program); + return E_BAD_ARG; + } + break; + case 'A': + if (add_user != NULL) + { + print_usage (stderr, program); + return E_BAD_ARG; + } + add_user = locale_to_utf8 (optarg); + break; + case '\255': + print_help (program); + return 0; + case 'v': + print_version (program, "2005"); + return 0; + case '\254': + print_usage (stdout, program); + return 0; + default: + print_error (program); + return E_USAGE; + } + } + + argc -= optind; + argv += optind; + + if (argc > 1) + { + fprintf (stderr, _("%s: Too many arguments.\n"), program); + print_error (program); + return E_USAGE; + } + else if (argc == 0) + { + fprintf (stderr, _("%s: Too few arguments.\n"), program); + print_error (program); + return E_USAGE; + } + else + { + int buflen = 256; + char *buffer = alloca (buflen); + struct passwd resultbuf; + struct passwd *pw; + + /* Determine our own user name for PAM authentication. */ + while (getpwuid_r (getuid (), &resultbuf, buffer, buflen, &pw) != 0 + && errno == ERANGE) + { + errno = 0; + buflen += 256; + buffer = alloca (buflen); + } + + if (!pw) + { + sec_log (program, MSG_NO_ACCOUNT_FOUND, getuid ()); + fprintf (stderr, _("%s: Cannot determine your user name.\n"), + program); + return E_UNKNOWN_USER; + } + + if (do_authentication ("shadow", pw->pw_name, NULL) != 0) + { + sec_log (program, MSG_PERMISSION_DENIED, pw->pw_name, + pw->pw_uid, getuid()); + return E_NOPERM; + } + } + + modify_group = locale_to_utf8 (argv[0]); + /* Check, if the account we should modify exist. */ + gr_data = find_group_data (modify_group, 0, use_service); + if (gr_data == NULL || gr_data->service == S_NONE) + { /* Group does not exist. */ + if (use_service) + fprintf (stderr, _("%s: Group `%s' not found in service `%s'.\n"), + program, utf8_to_locale (modify_group), use_service); + else + fprintf (stderr, _("%s: Unknown group `%s'.\n"), program, + utf8_to_locale (modify_group)); + + sec_log (program, MSG_UNKNOWN_GROUP, modify_group, getuid ()); + + return E_NOTFOUND; + } + + /* After this, we can start modifying the existing account. */ + if (know_gid != NULL && !non_unique) + { + if (getgrgid (new_gid) != NULL || + (have_extrapath && files_getgrgid (new_gid) != NULL)) + { + fprintf (stderr, _("%s: GID %u is not unique.\n"), + program, new_gid); + sec_log (program, MSG_GID_NOT_UNIQUE, new_gid, getuid ()); + return E_GID_IN_USE; + } + } + + /* If group should be renamed, check that the new name is valid + and does not already exist. */ + if (new_name) + { + if (check_name (new_name) != 0) + { + fprintf (stderr, _("%s: Invalid group name `%s'.\n"), + program, utf8_to_locale (new_name)); + sec_log (program, MSG_GROUP_NAME_INVALID, new_name, getuid()) + return E_BAD_ARG; + } + else + { + if (getgrnam (new_name) != NULL || + (have_extrapath && files_getgrnam (new_name) != NULL)) + { + fprintf (stderr, _("%s: Group `%s' already exists.\n"), + program, utf8_to_locale (new_name)); + sec_log (program, MSG_GROUP_ALREADY_EXISTS, new_name, getuid ()); + return E_NAME_IN_USE; + } + } + } + + /* Lock passwd file, so that a concurrent useradd process will not + add the user a second time or a second user with the same uid. */ + if ((use_service == NULL || strcmp (use_service, "files") == 0) && + lock_database () != 0) + { + fputs (_("Cannot lock password file: already locked.\n"), stderr); + sec_log (program, MSG_PASSWD_FILE_ALREADY_LOCKED); + return E_PWDBUSY; + } + else + { + gr_data->todo = DO_MODIFY; + if (new_name) + gr_data->new_name = strdup (new_name); + if (new_password) + gr_data->newpassword = strdup (new_password); + if (know_gid) + { + gr_data->have_new_gid = 1; + gr_data->new_gid = new_gid; + } + + if (remove_user) + gr_data->new_gr_mem = remove_gr_mem (remove_user, gr_data->gr.gr_mem); + + if (add_user) + gr_data->new_gr_mem = add_gr_mem (add_user, gr_data->gr.gr_mem); + +#ifdef USE_LDAP + if (gr_data->service == S_LDAP) + { + if (binddn == NULL) + { + binddn = get_caller_dn (); + if (binddn == NULL) + { + fprintf (stderr, + _ + ("%s: Cannot modify group in LDAP database without DN.\n"), + program); + } + else + gr_data->binddn = strdup (binddn); + } + else + gr_data->binddn = strdup (binddn); + + if (gr_data->oldclearpwd == NULL) + { + char *cp = get_ldap_password (gr_data->binddn); + + if (cp) + gr_data->oldclearpwd = strdup (cp); + else + { + fprintf (stderr, + _("%s: Group not modified in LDAP database.\n"), + program); + return E_FAILURE; + } + } + } +#endif + + if (write_group_data (gr_data, 1) != 0) + { + sec_log (program, MSG_ERROR_MODIFYING_GROUP, + gr_data->gr.gr_name, gr_data->gr.gr_gid, getuid()) + return E_FAILURE; + } + else + { + if (remove_user) + sec_log (program, MSG_USER_REMOVED_FROM_GROUP, + remove_user, gr_data->gr.gr_name, gr_data->gr.gr_gid, getuid()); + if (add_user) + sec_log (program, MSG_USER_ADDED_TO_GROUP, add_user, gr_data->gr.gr_name, + gr_data->gr.gr_gid, getuid()); + if (new_name) + sec_log (program, MSG_GROUP_NAME_CHANGED, gr_data->new_name, + gr_data->gr.gr_name, gr_data->gr.gr_gid, getuid()); + if (new_password) + sec_log (program, MSG_GROUP_PASSWORD_CHANGED, gr_data->gr.gr_name, + gr_data->gr.gr_gid, getuid()); + if (know_gid) + sec_log (program, MSG_GROUP_ID_CHANGED, gr_data->gr.gr_name, gr_data->new_gid, + gr_data->gr.gr_gid, getuid()); + } + +#ifdef HAVE_NSCD_FLUSH_CACHE + /* flush NSCD cache, else later calls could get obsolete data. */ + nscd_flush_cache ("group"); +#endif + } + + if (use_service == NULL || strcmp (use_service, "files") == 0) + ulckpwdf (); + + return retval; +} diff --git a/src/grpck.8 b/src/grpck.8 new file mode 100644 index 0000000..62e4bb2 --- /dev/null +++ b/src/grpck.8 @@ -0,0 +1,53 @@ +.\" -*- nroff -*- +.\" Copyright (C) 2004 Thorsten Kukuk +.\" Author: Thorsten Kukuk +.\" +.\" This program is free software; you can redistribute it and/or modify +.\" it under the terms of the GNU General Public License version 2 as +.\" published by the Free Software Foundation. +.\" +.\" 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +.\" +.TH grpck 8 "March 2004" "pwdutils" +.SH NAME +grpck \- check integrity of group file +.SH SYNOPSIS +.B grpck +[\fI-P path\fR] [\fI-q|-r\fR] +.SH DESCRIPTION +grpck verifies the the integrity of \fI/etc/group\fR or another +specified group file. +.SH OPTIONS +.TP +\fB\-P\fR path +Search group file in "path". +.TP +\fB\-q\fR, \fB\-\-quiet\fR +Don't print warnings, only errors. +.HP +\fB\-r\fR, \fB\-\-read\-only\fR Run in read-only mode, don't make changes. +.TP +\fB\-s\fR, \fB\-\-sort\fR +Sort the group file, no checks are done. +.TP +\fB\-\-help\fR +Give this help list. +.TP +\fB\-u\fR, \fB\-\-usage\fR +Give a short usage message. +.TP +\fB\-v\fR, \fB\-\-version\fR +Print program version. +.SH FILES +/etc/group \- group account information +.SH SEE ALSO +.BR group (5) +.SH AUTHOR +Thorsten Kukuk diff --git a/src/grpck.c b/src/grpck.c new file mode 100644 index 0000000..2ecfb6c --- /dev/null +++ b/src/grpck.c @@ -0,0 +1,828 @@ +/* Copyright (C) 2004, 2005, 2010, 2011 Thorsten Kukuk + Author: Thorsten Kukuk + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License version 2 as + published by the Free Software Foundation. + + 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ + + +#ifdef HAVE_CONFIG_H +#include +#endif + +#include +#include +#include +#include +#include +#include +#include +#include + +#include "i18n.h" +#include "yesno.h" +#include "public.h" +#include "read-files.h" + +#define E_SUCCESS 0 +#define E_USAGE 1 +#define E_BAD_ENTRY 2 +#define E_NO_FILE 3 +#define E_PWDBUSY 4 +#define E_FAILURE 5 + +#define SCALE DAY + +char *files_etc_dir = "/etc"; +int readonly = 0; + +static void +print_usage (FILE *stream, const char *program) +{ + fprintf (stream, _("Usage: %s [-P path] [-q|-r]\n"), + program); +} + +static void +print_help (const char *program) +{ + print_usage (stdout, program); + fprintf (stdout, _("%s - check integrity of group file\n\n"), program); + + fputs (_(" -P path Search passwd, shadow and group file in \"path\"\n"), + stdout); + fputs (_(" -q, --quiet Don't print warnings, only errors\n"), stdout); + fputs (_(" -r, --read-only Run in read-only mode, don't make changes\n"), + stdout); + fputs (_(" -s, --sort Sort the group file, no checks are done\n"), + stdout); + fputs (_(" --help Give this help list\n"), stdout); + fputs (_(" -u, --usage Give a short usage message\n"), stdout); + fputs (_(" -v, --version Print program version\n"), stdout); +} + +static int +answer_yes (void) +{ + if (readonly) + { + printf (_("No\n")); + return 0; + } + else + return yesno (); +} + +#define BLACKLIST_INITIAL_SIZE 512 +#define BLACKLIST_INCREMENT 256 +struct blacklist_t +{ + char *data; + int current; + int size; +}; + +/* returns TRUE if ent->blacklist contains name, else FALSE */ +static bool_t +in_blacklist (const char *name, int namelen, struct blacklist_t *ent) +{ + char buf[namelen + 3]; + char *cp; + + if (ent->data == NULL) + return FALSE; + + buf[0] = '|'; + cp = stpcpy (&buf[1], name); + *cp++ = '|'; + *cp = '\0'; + return strstr (ent->data, buf) != NULL; +} + +/* Support routines for remembering login names. The names are stored + in a single string with `|' as separator. */ +static void +blacklist_store_name (const char *name, struct blacklist_t *ent) +{ + int namelen = strlen (name); + char *tmp; + + /* first call, setup cache */ + if (ent->size == 0) + { + ent->size = MAX (BLACKLIST_INITIAL_SIZE, 2 * namelen); + ent->data = malloc (ent->size); + if (ent->data == NULL) + return; + ent->data[0] = '|'; + ent->data[1] = '\0'; + ent->current = 1; + } + else + { + if (in_blacklist (name, namelen, ent)) + return; /* no duplicates */ + + if (ent->current + namelen + 1 >= ent->size) + { + ent->size += MAX (BLACKLIST_INCREMENT, 2 * namelen); + tmp = realloc (ent->data, ent->size); + if (tmp == NULL) + { + free (ent->data); + ent->size = 0; + return; + } + ent->data = tmp; + } + } + + tmp = stpcpy (ent->data + ent->current, name); + *tmp++ = '|'; + *tmp = '\0'; + ent->current += namelen + 1; + + return; +} + +/* XXX move into the library. */ +static struct passwd * +files_getpwnam (const char *name) +{ + enum nss_status status; + static int buflen = 256; + static char *buffer; + static struct passwd resultbuf; + + if (buffer == NULL) + { + buffer = malloc (buflen); + + if (buffer == NULL) + { + fputs ("running out of memory!\n", stderr); + exit (E_FAILURE); + } + } + + while ((status = + files_getpwnam_r (name, &resultbuf, buffer, buflen, + &errno)) == NSS_STATUS_TRYAGAIN + && errno == ERANGE) + { + errno = 0; + buflen *= 2; + buffer = realloc (buffer, buflen); + } + if (status == NSS_STATUS_SUCCESS) + return &resultbuf; + else + return NULL; +} + +static int +loop_over_group_file (int quiet) +{ + struct stat group_stat; + FILE *input, *output; + int output_fd; + char *buf = NULL; + size_t buflen = 0; + struct group res; + int result = 0; + struct blacklist_t blacklist = {NULL, 0, 0}; + int modified = 0; + long i; + char *inputname = alloca (strlen (files_etc_dir) + 8); + char *outputname = alloca (strlen (files_etc_dir) + 20); + int bufferlen = 512; + char *buffer = malloc (bufferlen); + + if (buffer == NULL) + { + fputs ("running out of memory!\n", stderr); + exit (E_FAILURE); + } + + strcpy (inputname, files_etc_dir); + strcat (inputname, "/group"); + strcpy (outputname, files_etc_dir); + strcat (outputname, "/group.tmpXXXXXX"); + + if (!quiet) + printf (_("Checking `%s'\n"), inputname); + + input = fopen (inputname, "r"); + if (input == NULL) + { + fprintf (stderr, _("Can't open `%s': %m\n"), inputname); + return E_NO_FILE; + } + + if (fstat (fileno (input), &group_stat) < 0) + { + fprintf (stderr, _("Can't stat `%s': %m\n"), inputname); + fclose (input); + return E_NO_FILE; + } + +#ifdef WITH_SELINUX + security_context_t prev_context; + if (set_default_context (inputname, &prev_context) < 0) + { + fclose (input); + return E_NO_FILE; + } +#endif + /* Open a temp group file */ + output_fd = mkstemp (outputname); +#ifdef WITH_SELINUX + if (restore_default_context (prev_context) < 0) + { + if (output_fd >= 0) + close (output_fd); + fclose (input); + return E_FAILURE; + } +#endif + if (output_fd == -1) + { + fprintf (stderr, _("Can't create `%s': %m\n"), + inputname); + fclose (input); + return E_NO_FILE; + } + if (fchmod (output_fd, group_stat.st_mode) < 0) + { + fprintf (stderr, + _("Cannot change permissions for `%s': %s\n"), + outputname, strerror (errno)); + fclose (input); + close (output_fd); + unlink (outputname); + return E_NO_FILE; + } + if (fchown (output_fd, group_stat.st_uid, group_stat.st_gid) < 0) + { + fprintf (stderr, + _("Cannot change owner/group for `%s': %s\n"), + outputname, strerror (errno)); + fclose (input); + close (output_fd); + unlink (outputname); + return E_NO_FILE; + } + if (copy_xattr (inputname, outputname) != 0) + { + fclose (input); + close (output_fd); + unlink (outputname); + return E_NO_FILE; + } + output = fdopen (output_fd, "w+"); + if (output == NULL) + { + fprintf (stderr, _("Can't open `%s': %m\n"), outputname); + fclose (input); + close (output_fd); + unlink (outputname); + return E_NO_FILE; + } + + while (!feof (input)) + { + char *cp; +#if defined(HAVE_GETLINE) + ssize_t n = getline (&buf, &buflen, input); +#elif defined (HAVE_GETDELIM) + ssize_t n = getdelim (&buf, &buflen, '\n', input); +#else + ssize_t n; + + if (buf == NULL) + { + buflen = 8096; + buf = malloc (buflen); + } + buf[0] = '\0'; + fgets (buf, buflen - 1, input); + if (buf != NULL) + n = strlen (buf); + else + n = 0; +#endif /* HAVE_GETLINE / HAVE_GETDELIM */ + + if (buf) + cp = strdup (buf); + else + cp = strdup (""); + + if (strlen (cp) > 0 && cp[strlen(cp)-1] == '\n') + cp[strlen(cp)-1] = '\0'; + + if (n < 1) + { + if (feof (input)) + continue; + result = E_BAD_ENTRY; + printf (_("Invalid group entry.\n")); + printf (_("Delete empty line? ")); + if (answer_yes ()) + { + free (cp); + modified = 1; + continue; + } + else + goto write_gr; + } + + if (strcmp (cp, "+") == 0 || strcmp (cp, "-") == 0) + goto write_gr; + + /* Comments are not allowed in /etc/group. */ + if (strchr (cp, '#') != NULL) + { + result = E_BAD_ENTRY; + printf (_("Invalid group entry with comment.\n")); + printf (_("Delete line `%s'? "), cp); + if (answer_yes ()) + { + free (cp); + modified = 1; + continue; + } + else + goto write_gr; + } + + /* Parse string in strict mode and report error. */ + { + int status; + + while ((status = parse_grent (buf, &res, buffer, + bufferlen, &errno, 1)) == -1 && + errno == ERANGE) + { + errno = 0; + bufferlen *= 2; + buffer = realloc (buffer, bufferlen); + } + + if (status != 1) + { + result = E_BAD_ENTRY; + printf (_("Invalid group entry.\n")); + printf (_("Delete line `%s'? "), cp); + if (answer_yes ()) + { + modified = 1; + free (cp); + continue; + } + else + goto write_gr; + } + } + + /* Check for invalid characters in username. */ + if (*cp != '+' && *cp != '-' && check_name (res.gr_name) < 0) + { + result = E_BAD_ENTRY; + printf (_("Invalid group name `%s'.\n"), res.gr_name); + printf (_("Delete line `%s'? "), cp); + if (answer_yes ()) + { + modified = 1; + free (cp); + continue; + } + else + goto write_gr; + } + + /* Check, if we saw this user name already. */ + if (in_blacklist (res.gr_name, strlen (res.gr_name), &blacklist)) + { + result = E_BAD_ENTRY; + printf (_("Duplicate group entry\n")); + printf (_("Delete line `%s'? "), cp); + if (answer_yes ()) + { + modified = 1; + free (cp); + continue; + } + else + goto write_gr; + } + /* Mark the username as seen, but after checking for duplicate! */ + blacklist_store_name (res.gr_name, &blacklist); + + /* Check, if members exist and that this is not the primary + group of the member. */ + for (i = 0; res.gr_mem[i]; i++) + { + struct passwd *pw; + + pw = getpwnam (res.gr_mem[i]); + if (pw == NULL) + pw = files_getpwnam (res.gr_mem[i]); + + /* Check if member exist. */ + if (pw == NULL) + { + result = E_BAD_ENTRY; + printf (_("Group `%s': unknown user `%s'\n"), + res.gr_name, res.gr_mem[i]); + } + else if (pw->pw_gid == res.gr_gid) + { + result = E_BAD_ENTRY; + printf (_("Group `%s': Duplicate user entry `%s', already primary group.\n"), + res.gr_name, res.gr_mem[i]); + } + } + + write_gr: + fprintf (output, "%s\n", cp); + free (cp); + } + + + fclose (input); + fclose (output); + if (modified) + { + char *oldname = alloca (strlen (files_etc_dir) + 20); + strcpy (oldname, files_etc_dir); + strcat (oldname, "/group.old"); + unlink (oldname); + if (link (inputname, oldname) < 0) + fprintf (stderr, + _("Warning: cannot create backup file `%s': %m\n"), + oldname); + rename (outputname, inputname); + } + else + unlink (outputname); + + return result; +} + +/* XXX move in library. */ +static struct group * +files_getgrent (void) +{ + enum nss_status status; + int buflen = 512; + char *buffer = NULL; + struct group *resultbuf = malloc (sizeof (struct group)); + + if (buffer == NULL) + buffer = malloc (buflen); + + while ((status = files_getgrent_r (resultbuf, buffer, buflen, &errno)) + == NSS_STATUS_TRYAGAIN && errno == ERANGE) + { + errno = 0; + buflen *= 2; + buffer = realloc (buffer, buflen); + } + if (status == NSS_STATUS_SUCCESS) + return resultbuf; + else + return NULL; +} + +struct group_list { + struct group *grp; + struct group_list *next; +}; + +static int +sort_group_file (void) +{ + struct group *grp; + struct group_list *ptr = NULL; + int retval = 0; + + while ((grp = files_getgrent ())) + { + if (grp->gr_name[0] == '+' || grp->gr_name[0] == '-') + break; + + if (ptr == NULL) + { + ptr = malloc (sizeof (struct group_list)); + if (ptr == NULL) + { + fputs ("running out of memory!\n", stderr); + exit (E_FAILURE); + } + + ptr->grp = grp; + ptr->next = NULL; + } + else + { + struct group_list *next = ptr; + + while (next->next && next->grp->gr_gid < grp->gr_gid) + next = next->next; + + if (next->next == NULL) + { + next->next = malloc (sizeof (struct group_list)); + + if (next->next == NULL) + { + fputs ("running out of memory!\n", stderr); + exit (E_FAILURE); + } + next->next->next = NULL; + + if (grp->gr_gid > next->grp->gr_gid) + next->next->grp = grp; + else + { + next->next->grp = next->grp; + next->grp = grp; + } + } + else + { + struct group_list *tmp; + tmp = malloc (sizeof (struct group_list)); + + if (tmp == NULL) + { + fputs ("running out of memory!\n", stderr); + exit (E_FAILURE); + } + tmp->next = next->next; + next->next = tmp; + tmp->grp = next->grp; + next->grp = grp; + } + } + } + + const char *file_tmp = "/group.tmpXXXXXX"; + char *group_tmp = alloca (strlen (files_etc_dir) + strlen (file_tmp) + 1); + char *group_orig = alloca (strlen (files_etc_dir) + 8); + char *group_old = alloca (strlen (files_etc_dir) + 12); + struct stat group_stat; + FILE *oldgf, *newgf; + int newgf_fd; + char *cp; + + + cp = stpcpy (group_tmp, files_etc_dir); + strcpy (cp, file_tmp); + cp = stpcpy (group_orig, files_etc_dir); + strcpy (cp, "/group"); + cp = stpcpy (group_old, group_orig); + strcpy (cp, ".old"); + + if ((oldgf = fopen (group_orig, "r")) == NULL) + { + fprintf (stderr, _("Can't open `%s': %m\n"), group_orig); + retval = -1; + goto error_group; + } + if (fstat (fileno (oldgf), &group_stat) < 0) + { + fprintf (stderr, _("Can't stat `%s': %m\n"), group_orig); + fclose (oldgf); + retval = -1; + goto error_group; + } + +#ifdef WITH_SELINUX + security_context_t prev_context; + if (set_default_context (group_orig, &prev_context) < 0) + { + fclose (oldgf); + retval = -1; + goto error_group; + } +#endif + /* Open a temp group file */ + newgf_fd = mkstemp (group_tmp); +#ifdef WITH_SELINUX + if (restore_default_context (prev_context) < 0) + { + if (newgf_fd >= 0) + close (newgf_fd); + fclose (oldgf); + retval = -1; + goto error_group; + } +#endif + if (newgf_fd == -1) + { + fprintf (stderr, _("Can't create `%s': %m\n"), + group_orig); + fclose (oldgf); + retval = -1; + goto error_group; + } + if (fchmod (newgf_fd, group_stat.st_mode) < 0) + { + fprintf (stderr, + _("Cannot change permissions for `%s': %s\n"), + group_tmp, strerror (errno)); + fclose (oldgf); + close (newgf_fd); + unlink (group_tmp); + retval = -1; + goto error_group; + } + if (fchown (newgf_fd, group_stat.st_uid, group_stat.st_gid) < 0) + { + fprintf (stderr, + _("Cannot change owner/group for `%s': %s\n"), + group_tmp, strerror (errno)); + fclose (oldgf); + close (newgf_fd); + unlink (group_tmp); + retval = -1; + goto error_group; + } + if (copy_xattr (group_orig, group_tmp) != 0) + { + fclose (oldgf); + close (newgf_fd); + unlink (group_tmp); + retval = -1; + goto error_group; + } + + newgf = fdopen (newgf_fd, "w+"); + if (newgf == NULL) + { + fprintf (stderr, _("Can't open `%s': %m\n"), group_tmp); + fclose (oldgf); + close (newgf_fd); + unlink (group_tmp); + retval = -1; + goto error_group; + } + + while (ptr != NULL) + { + /* write the group entry to tmp file */ + if (putgrent (ptr->grp, newgf) < 0) + goto write_error_group; + ptr = ptr->next; + } + + /* Check if we have entries starting with +/- and copy + the rest of the group file without sorting it. */ + if (grp != NULL) + { + /* write the group entry to tmp file */ + if (putgrent (grp, newgf) < 0) + goto write_error_group; + while ((grp = files_getgrent ())) + /* write the group entry to tmp file */ + if (putgrent (grp, newgf) < 0) + { + write_error_group: + fprintf (stderr, + _("Error while writing `%s': %m\n"), + group_tmp); + fclose (oldgf); + fclose (newgf); + retval = -1; + goto error_group; + } + } + + if (fclose (oldgf) != 0) + { + fprintf (stderr, + _("Error while closing `%s': %m\n"), group_orig); + fclose (newgf); + retval = -1; + goto error_group; + } + if (fclose (newgf) != 0) + { + fprintf (stderr, + _("Error while closing `%s': %m\n"), group_tmp); + retval = -1; + goto error_group; + } + unlink (group_old); + if (link (group_orig, group_old) < 0) + fprintf (stderr, + _("Warning: cannot create backup file `%s': %m\n"), + group_old); + rename (group_tmp, group_orig); + error_group: + unlink (group_tmp); + + return retval; +} + +int +main (int argc, char *argv[]) +{ + const char *program = "grpck"; + int quiet = 0; + int sort = 0; + +#ifdef ENABLE_NLS + setlocale(LC_ALL, ""); + bindtextdomain(PACKAGE, LOCALEDIR); + textdomain(PACKAGE); +#endif + + while (1) + { + int c; + int option_index = 0; + static struct option long_options[] = { + {"path", required_argument, NULL, 'P'}, + {"quiet", no_argument, NULL, 'q' }, + {"readonly", no_argument, NULL, 'r' }, + {"read-only", no_argument, NULL, 'r' }, + {"sort", no_argument, NULL, 's' }, + {"version", no_argument, NULL, 'v' }, + {"usage", no_argument, NULL, 'u' }, + {"help", no_argument, NULL, '\255' }, + {NULL, 0, NULL, '\0'} + }; + + c = getopt_long (argc, argv, "P:qrsvu", + long_options, &option_index); + if (c == (-1)) + break; + switch (c) + { + case 'P': + files_etc_dir = strdup (optarg); + break; + case 'q': + quiet = 1; + break; + case 'r': + readonly = 1; + break; + case 's': + sort = 1; + break; + case '\255': + print_help (program); + return 0; + case 'v': + print_version (program, "2005"); + return 0; + case 'u': + print_usage (stdout, program); + return 0; + default: + print_error (program); + return E_USAGE; + } + } + + argc -= optind; + argv += optind; + + if (argc > 0) + { + fprintf (stderr, _("%s: Too many arguments.\n"), program); + print_error (program); + return E_USAGE; + } + else if (readonly && sort) + { + fprintf (stderr, _("%s: -s and -r are incompatibile.\n"), + program); + return E_USAGE; + } + + if (lock_database () != 0) + { + fprintf (stderr, + _("Cannot lock group file: already locked.\n")); + return E_PWDBUSY; + } + + if (sort) + return sort_group_file (); + else + return loop_over_group_file (quiet); +} diff --git a/src/grpconv.8 b/src/grpconv.8 new file mode 100644 index 0000000..46e57c4 --- /dev/null +++ b/src/grpconv.8 @@ -0,0 +1,32 @@ +.\" -*- nroff -*- +.\" Copyright (C) 2004 Thorsten Kukuk +.\" Author: Thorsten Kukuk +.\" +.\" This program is free software; you can redistribute it and/or modify +.\" it under the terms of the GNU General Public License version 2 as +.\" published by the Free Software Foundation. +.\" +.\" 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +.\" +.TH grpconv 8 "January 2004" "pwdutils" +.SH NAME +grpconv \- convert to shadow group +.SH SYNOPSIS +.TP 5 +\fBgrpconv\fR +.SH DESCRIPTION +Since \fI/etc/gshadow\fR is not supported by this system, +\fBgrpconv\fR does nothing except printing an error message. +.SH FILES +/etc/group \- group account information +.SH SEE ALSO +.BR group (5) +.SH AUTHOR +Thorsten Kukuk diff --git a/src/grpconv.c b/src/grpconv.c new file mode 100644 index 0000000..7745b83 --- /dev/null +++ b/src/grpconv.c @@ -0,0 +1,109 @@ +/* Copyright (C) 2004, 2005 Thorsten Kukuk + Author: Thorsten Kukuk + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License version 2 as + published by the Free Software Foundation. + + 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ + + +#ifdef HAVE_CONFIG_H +#include +#endif + +#include +#include +#include + +#include "i18n.h" +#include "public.h" +#include "error_codes.h" + +static void +print_usage (FILE *stream, const char *program) +{ + fprintf (stream, _("Usage: %s\n"), program); +} + +static void +print_help (const char *program) +{ + print_usage (stdout, program); + fprintf (stdout, _("%s - convert to shadow group\n\n"), + program); + + fputs (_(" --help Give this help list\n"), stdout); + fputs (_(" -u, --usage Give a short usage message\n"), stdout); + fputs (_(" -v, --version Print program version\n"), stdout); +} + +int +main (int argc, char *argv[]) +{ + char *program; + char *cp; + +#ifdef ENABLE_NLS + setlocale(LC_ALL, ""); + bindtextdomain(PACKAGE, LOCALEDIR); + textdomain(PACKAGE); +#endif + + /* determine name of binary, which specifies edit mode. */ + program = ((cp = strrchr (*argv, '/')) ? cp + 1 : *argv); + + while (1) + { + int c; + int option_index = 0; + static struct option long_options[] = { + {"version", no_argument, NULL, 'v' }, + {"usage", no_argument, NULL, 'u' }, + {"help", no_argument, NULL, '\255' }, + {NULL, 0, NULL, '\0'} + }; + + c = getopt_long (argc, argv, "vu", + long_options, &option_index); + if (c == (-1)) + break; + switch (c) + { + case '\255': + print_help (program); + return 0; + case 'v': + print_version (program, "2005"); + return 0; + case 'u': + print_usage (stdout, program); + return 0; + default: + print_error (program); + return E_USAGE; + } + } + + argc -= optind; + argv += optind; + + if (argc > 0) + { + fprintf (stderr, _("%s: Too many arguments.\n"), program); + print_error (program); + return E_USAGE; + } + + fprintf (stderr, _("%s: /etc/gshadow is not supported by this system.\n"), + program); + + return E_FAILURE; +} diff --git a/src/grpunconv.8 b/src/grpunconv.8 new file mode 100644 index 0000000..eaaf683 --- /dev/null +++ b/src/grpunconv.8 @@ -0,0 +1,44 @@ +.\" -*- nroff -*- +.\" Copyright (C) 2004 Thorsten Kukuk +.\" Author: Thorsten Kukuk +.\" +.\" This program is free software; you can redistribute it and/or modify +.\" it under the terms of the GNU General Public License version 2 as +.\" published by the Free Software Foundation. +.\" +.\" 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +.\" +.TH grpunconv 8 "January 2004" "pwdutils" +.SH NAME +grpunconv \- convert from shadow group +.SH SYNOPSIS +.TP 5 +\fBgrpunconv\fR [\fB-P \fIpath\fR] +.SH DESCRIPTION +\fBgrpunconv\fR moves the passwords from \fI/etc/gshadow\fR to +\fI/etc/group\fR. The \fIgshadow\fR file will be removed afterwards. +All other informations stored in \fI/etc/gshadow\fR will go lost. +.SH OPTIONS +.TP +.BI "\-P, \-\-path" " path" +The \fIgroup\fR and \fIgshadow\fR files are located below +the specified directory path. \fBgrpunconv\fR will use this files, +not \fI/etc/group\fR and \fI/etc/gshadow\fR. +.SH FILES +group \- group account information +.br +gshadow \- shadow group account information +.SH SEE ALSO +.BR gpasswd (1), +.BR group (5), +.BR grck (8), +.BR grconv (8) +.SH AUTHOR +Thorsten Kukuk diff --git a/src/grpunconv.c b/src/grpunconv.c new file mode 100644 index 0000000..72a8540 --- /dev/null +++ b/src/grpunconv.c @@ -0,0 +1,311 @@ +/* Copyright (C) 2004, 2005 Thorsten Kukuk + Author: Thorsten Kukuk + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License version 2 as + published by the Free Software Foundation. + + 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ + + +#ifdef HAVE_CONFIG_H +#include +#endif + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#ifdef HAVE_LIBNSCD_H +#include +#endif + +#include "i18n.h" +#include "group.h" +#include "public.h" +#include "logindefs.h" +#include "read-files.h" +#include "error_codes.h" + + +struct sgrp { + char *sg_namp; + char *sg_pwdp; +}; + +static void +print_usage (FILE *stream, const char *program) +{ + fprintf (stream, _("Usage: %s\n"), program); +} + +static void +print_help (const char *program) +{ + print_usage (stdout, program); + fprintf (stdout, _("%s - convert from shadow groups\n\n"), + program); + + fputs (_(" -P path Search group and gshadow file in \"path\"\n"), + stdout); + fputs (_(" --help Give this help list\n"), stdout); + fputs (_(" -u, --usage Give a short usage message\n"), stdout); + fputs (_(" -v, --version Print program version\n"), stdout); +} + +static FILE *sg_stream; + +static int +setsgent (void) +{ + char *filename = alloca (strlen (files_etc_dir) + 10); + strcpy (filename, files_etc_dir); + strcat (filename, "/gshadow"); + + sg_stream = fopen (filename, "r"); + + if (sg_stream == NULL) + return -1; + + return 0; +} + +static struct sgrp * +getsgent (void) +{ + static struct sgrp sg; + static char *buf = NULL; + static size_t buflen = 0; + + while (!feof (sg_stream)) + { + char *tmp, *cp; +#if defined(HAVE_GETLINE) + ssize_t n = getline (&buf, &buflen, sg_stream); +#elif defined (HAVE_GETDELIM) + ssize_t n = getdelim (&buf, &buflen, '\n', sg_stream); +#else + ssize_t n; + + if (buf == NULL) + { + buflen = 8096; + buf = malloc (buflen); + } + buf[0] = '\0'; + fgets (buf, buflen - 1, sg_stream); + if (buf != NULL) + n = strlen (buf); + else + n = 0; +#endif /* HAVE_GETLINE / HAVE_GETDELIM */ + + cp = buf; + + if (n < 1) + break; + + tmp = strchr (cp, ':'); + if (tmp) + *tmp++ = '\0'; + else + continue; + + sg.sg_namp = cp; + sg.sg_pwdp = tmp; + + tmp = strchr (tmp, ':'); + if (tmp) + *tmp = '\0'; + + return &sg; + } + return NULL; +} + +int +main (int argc, char *argv[]) +{ + struct sgrp *sg; + char *program; + char *cp; + char *tmpgroup = NULL; + char *gshadow_path; + +#ifdef ENABLE_NLS + setlocale(LC_ALL, ""); + bindtextdomain(PACKAGE, LOCALEDIR); + textdomain(PACKAGE); +#endif + + /* determine name of binary, which specifies edit mode. */ + program = ((cp = strrchr (*argv, '/')) ? cp + 1 : *argv); + + while (1) + { + int c; + int option_index = 0; + static struct option long_options[] = { + {"path", required_argument, NULL, 'P'}, + {"version", no_argument, NULL, 'v' }, + {"usage", no_argument, NULL, 'u' }, + {"help", no_argument, NULL, '\255' }, + {NULL, 0, NULL, '\0'} + }; + + c = getopt_long (argc, argv, "vuP:", + long_options, &option_index); + if (c == (-1)) + break; + switch (c) + { + case 'P': + files_etc_dir = strdup (optarg); + break; + case '\255': + print_help (program); + return 0; + case 'v': + print_version (program, "2005"); + return 0; + case 'u': + print_usage (stdout, program); + return 0; + default: + print_error (program); + return E_USAGE; + } + } + + argc -= optind; + argv += optind; + + if (argc > 0) + { + fprintf (stderr, _("%s: Too many arguments.\n"), program); + print_error (program); + return E_USAGE; + } + else + { + /* Check, if /etc/gshadow file exist. If not, exit. */ + char *path; + struct stat st; + + if (asprintf (&gshadow_path, "%s/gshadow", files_etc_dir) < 0) + { + fputs ("running out of memory!\n", stderr); + return E_FAILURE; + } + + if (lstat (gshadow_path, &st) < 0) + { + /* ENOENT means, the file does not exist and we have + to create it. Else report an error and abort. */ + if (errno == ENOENT) + { + fprintf (stderr, _("%s: No gshadow file found.\n"), + program); + return E_FAILURE; + } + else + { + fprintf (stderr, _("Can't stat `%s': %m\n"), gshadow_path); + return E_FAILURE; + } + } + + /* Now create a copy of the original group file. */ + if (asprintf (&path, "%s/group", files_etc_dir) < 0) + { + fputs ("running out of memory!\n", stderr); + return E_FAILURE; + } + if (asprintf (&tmpgroup, "%s/group.grpunconv", files_etc_dir) < 0) + { + fputs ("running out of memory!\n", stderr); + return E_FAILURE; + } + if (link (path, tmpgroup) < 0) + { + fprintf (stderr, _("Cannot create backup file `%s': %m\n"), + tmpgroup); + return E_FAILURE; + } + free (path); + } + + + /* Step through /etc/gshadow and move the password into the group + file. */ + setsgent (); + while ((sg = getsgent ()) != NULL) + { + group_t *gr_data = find_group_data (sg->sg_namp, 0, NULL); + /* Only change password in group file, if we have a + corresponding group entry and this is 'x'. */ + if (gr_data != NULL && gr_data->service != S_NONE && + strcmp (gr_data->gr.gr_passwd, "x") == 0) + { + gr_data->newpassword = strdup (sg->sg_pwdp); + if (write_group_data (gr_data, 0) != 0) + { + fprintf (stderr, + _("Error while moving password for `%s'.\n"), + gr_data->gr.gr_name); + free (gr_data); + return E_FAILURE; + } + } + free_group_t (gr_data); + } + fclose (sg_stream); +#ifdef HAVE_NSCD_FLUSH_CACHE + nscd_flush_cache ("group"); +#endif + + /* Rename original gshadow file to gshadow.old. */ + { + char *oldgshadow; + if (asprintf (&oldgshadow, "%s/gshadow.old", files_etc_dir) < 0) + { + fputs ("running out of memory!\n", stderr); + return E_FAILURE; + } + unlink (oldgshadow); + rename (gshadow_path, oldgshadow); + free (oldgshadow); + free (gshadow_path); + } + + /* Rename our own copy to group.old. As result, /etc/group.old + will have the contents of /etc/group when starting this program. */ + if (tmpgroup) + { + char *oldgroup; + + if (asprintf (&oldgroup, "%s/group.old", files_etc_dir) < 0) + { + fputs ("running out of memory!\n", stderr); + return E_FAILURE; + } + unlink (oldgroup); + rename (tmpgroup, oldgroup); + free (oldgroup); + free (tmpgroup); + } + + return E_SUCCESS; +} diff --git a/src/newgrp.1 b/src/newgrp.1 new file mode 100644 index 0000000..ec6ebab --- /dev/null +++ b/src/newgrp.1 @@ -0,0 +1,69 @@ +.\" -*- nroff -*- +.\" Copyright (C) 2004 Thorsten Kukuk +.\" Author: Thorsten Kukuk +.\" +.\" This program is free software; you can redistribute it and/or modify +.\" it under the terms of the GNU General Public License version 2 as +.\" published by the Free Software Foundation. +.\" +.\" 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +.\" +.TH newgrp 1 "April 2004" "pwdutils" +.SH NAME +newgrp \- change effective group ID +sg \- execute command with different group ID +.SH SYNOPSIS +.B newgrp +[\fB-l\fR] [\fIgroup\fR] +.br +.B sg +\fIgroup\fR \fB-c \fIcommand\fR +.SH DESCRIPTION +The \fBnewgrp\fR command changes the user's real and effetive group ID +by replacing the current shell with a new shell. A new shell is launched +even if an error occours. +.PP +A password is requested if the group has a password and the user is not +listed in the group file as being a member of that group. The password +can be changed with the +.BR gpasswd (1) +command. +.PP +If the new effective group ID is not in the supplementary group list, +\fBnewgrp\fR will add the new group ID to the supplementary list, too. +.PP +With no operands and options, \fBnewgrp\fR changes the user's group IDs +(real and effective) back to the group specified in password and group +file. +.PP +The \fBsg\fR command works like the \fBnewgrp\fR command, except that +it executes the given command with \fB/bin/sh\fR and upon exit the +group ID of the current shell is not changed. +.SH OPTIONS +.TP +\fB\-l\fR, \fB\-\-login\fR +reinitialize the environment as if the user logged in. +.TP +\fB\-\-help\fR +Print a help list. +.TP +\fB\-u\fR, \fB\-\-usage\fR +Print a short usage message. +.TP +\fB\-v\fR, \fB\-\-version\fR +Print program version. +.SH "SEE ALSO" +.BR gpasswd (1), +.BR group (5), +.BR passwd (1), +.BR passwd (5), +.BR su (1) +.SH AUTHOR +Thorsten Kukuk diff --git a/src/newgrp.c b/src/newgrp.c new file mode 100644 index 0000000..56949c3 --- /dev/null +++ b/src/newgrp.c @@ -0,0 +1,444 @@ +/* Copyright (C) 2004, 2005, 2006 Thorsten Kukuk + Author: Thorsten Kukuk + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License version 2 as + published by the Free Software Foundation. + + 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ + + +#ifdef HAVE_CONFIG_H +#include +#endif + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#if defined(HAVE_XCRYPT_H) +#include +#elif defined(HAVE_CRYPT_H) +#include +#endif + +#include "i18n.h" +#include "public.h" +#include "logindefs.h" +#include "error_codes.h" +#include "utf8conv.h" + +#ifndef MIN +#define MIN(a,b) ((a)<(b)?(a):(b)) +#endif + +static void +print_usage (FILE *stream, const char *program) +{ + fprintf (stream, _("Usage: %s [-l|-c command] [group]\n"), + program); +} + +static void +print_help (const char *program) +{ + print_usage (stdout, program); + fprintf (stdout, _("%s - change the effective group id\n\n"), + program); + + fputs (_(" -l, --login reinitialize environment as if logged in\n"), + stdout); + fputs (_(" -c command Execute `command' with new group\n"), stdout); + fputs (_(" --help Give this help list\n"), stdout); + fputs (_(" -u, --usage Give a short usage message\n"), stdout); + fputs (_(" -v, --version Print program version\n"), stdout); +} + +int +main (int argc, char *argv[]) +{ + struct passwd *pw; + char *program; + char *cp, *shell; + char *c_flag = NULL; + int l_flag = 0; + int ngroups_max = MIN (sysconf (_SC_NGROUPS_MAX), INT_MAX); + +#ifdef ENABLE_NLS + setlocale(LC_ALL, ""); + bindtextdomain(PACKAGE, LOCALEDIR); + textdomain(PACKAGE); +#endif + + /* determine name of binary, which specifies edit mode. */ + program = ((cp = strrchr (*argv, '/')) ? cp + 1 : *argv); + + while (1) + { + int c; + int option_index = 0; + static struct option long_options[] = { + {"login", no_argument, NULL, 'l' }, + {"command", required_argument, NULL, 'c'}, + {"version", no_argument, NULL, 'v' }, + {"usage", no_argument, NULL, 'u' }, + {"help", no_argument, NULL, '\255' }, + {NULL, 0, NULL, '\0'} + }; + + c = getopt_long (argc, argv, "lvuc:", + long_options, &option_index); + if (c == (-1)) + break; + switch (c) + { + case '-': + case 'l': + l_flag = 1; + break; + case 'c': + c_flag = optarg; + break; + case '\255': + print_help (program); + return 0; + case 'v': + print_version (program, "2006"); + return 0; + case 'u': + print_usage (stdout, program); + return 0; + default: + print_error (program); + return E_USAGE; + } + } + + argc -= optind; + argv += optind; + + /* Special hack for compatibility with "newgrp - group" and + "sg group command". */ + if (argc == 2) + { + /* User called "newgrp - group" instead of "newgrp -l group". */ + if (argv[0][0] == '-' && argv[0][1] == '\0') + { + l_flag = 1; + argc--; + argv++; + } + /* User called "sg group command" instead of "sg group -c command". */ + else if (strcmp (program, "sg") == 0) + { + c_flag = argv[1]; + argc--; + } + } + + if (argc > 1) + { + fprintf (stderr, _("%s: Too many arguments.\n"), program); + print_error (program); + return E_USAGE; + } + else if (c_flag && l_flag) + { + fprintf (stderr, _("%s: -l and -c are exclusive\n"), program); + print_error (program); + return E_USAGE; + } + else if (c_flag && argc != 1) + { + fprintf (stderr, _("%s: -c requires a group argument\n"), program); + print_error (program); + return E_USAGE; + } + + if ((pw = getpwuid (getuid())) == NULL) + { + fprintf (stderr, _("%s: Unknown user.\n"), program); + exit (E_FAILURE); + } + + shell = (pw->pw_shell[0] ? pw->pw_shell : _PATH_BSHELL); + + if (argc == 1) /* Change primary group to new one. */ + { + struct group *grp; + gid_t gid; + gid_t egid; + int is_member = 0; + int ngroups, ngroups_allocated, i; + gid_t *grouplist; + char *utf8_arg = locale_to_utf8 (argv[0]); + + /* Try it as a group name, then a group id. */ + if ((grp = getgrnam (utf8_arg)) == NULL && + (strtoid (utf8_arg, &gid) == -1 || + (grp = getgrgid (gid)) == NULL)) + { + fprintf (stderr, _("%s: bad group `%s'.\n"), program, argv[0]); + return E_USAGE; + } + + if (getuid () != 0) /* root is allowed to do everything. */ + { + if (grp->gr_gid == pw->pw_gid) /* primary group. */ + is_member = 1; + else + { + /* check with getgroup() if were member already */ + gid_t *groupIDs; + int count; + + if ((count = getgroups(0,0)) == -1) + count = ngroups_max; + if ((groupIDs = (gid_t*) malloc(count * sizeof(gid_t))) == NULL) + { + fputs ("running out of memory!\n", stderr); + return E_FAILURE; + } + if ((count = getgroups(count, groupIDs)) < 0) + { + fprintf (stderr, _("%s: calling getgroups failed: %s\n"), + program, strerror (errno)); + return E_FAILURE; + } + for (i = 0; i < count; i++ ) + { + if (grp->gr_gid == groupIDs[i]) + { + is_member = 1; + break; + } + } + free(groupIDs); + } + + /* check in databases if not already found */ + if (!is_member) + { + struct group *g; + char **gp; + gid_t search_gid; + + /* grp will be no longer valid after setgrent() call. */ + search_gid = grp->gr_gid; + grp = NULL; + + /* Normally it is enough to check only, if the user is in + grp->gr_mem. But some people split the groups into multiple + one with the same group ID, but different members. So we have + to step through all group entries and search for the correct + one. */ + setgrent (); + while (!is_member && (g = getgrent ()) != NULL) + { + if (g->gr_gid != search_gid) + continue; + + for (gp = g->gr_mem; *gp != NULL; gp++) + { + if (strcmp (pw->pw_name, *gp) == 0) + { + grp = g; /* let point grp to the new group entry. */ + is_member = 1; + break; + } + } + } + /* endgrent (); */ /* Don't invalidate grp pointer. */ + if (grp == NULL) + { /* restore grp pointer, user is no member. */ + if ((grp = getgrgid (search_gid)) == NULL) + { + fprintf (stderr, + _("%s: failure to get group entry for %d.\n"), + program, search_gid); + return E_FAILURE; + } + } + } + + if (!is_member && grp->gr_passwd && grp->gr_passwd[0] != '\0') + { + if (strcmp (grp->gr_passwd, + crypt (getpass(_("Password: ")), + grp->gr_passwd)) != 0) + { + fprintf (stderr, _("%s: password incorrect.\n"), + program); + return E_NOPERM; + } + } + } + + egid = getegid(); + + /* Find out, how many sumplementary groups exists and allocate + enough memory for one additional group. */ + ngroups = getgroups (0, 0); + if (ngroups == -1) + ngroups = ngroups_max; + if ((ngroups+1) <= 0) + /* Overflow, don't allocate more. */ + ngroups_allocated = ngroups; + else + ngroups_allocated = ngroups + 1; + + grouplist = malloc (ngroups_allocated * sizeof (gid_t *)); + if (grouplist == NULL) + { + fputs ("running out of memory!\n", stderr); + return E_FAILURE; + } + + if ((ngroups = getgroups (ngroups, grouplist)) < 0) + { + fprintf (stderr, _("%s: calling getgroups failed: %s\n"), + program, strerror (errno)); + return E_FAILURE; + } + +#if 0 /* Use this, if effictive group is normally notin supp. list. */ + /* If the new group is already part of the supplementary + group list, remove it. */ + int found = 0; + for (i = 0; i < ngroups; i++) + { + if (found == 1) /* move next gid in previous empty slot. */ + grouplist[i - 1] = grouplist[i]; + else if (grp->gr_gid == grouplist[i]) + found = 1; + } + if (found) + ngroups--; + + /* Add old effective gid to supp. list if it does not exist. */ + for (i = 0; i < ngroups; i++) + if (egid == grouplist[i]) + break; + + if (i == ngroups) + grouplist[ngroups++] = egid; + +#else + /* Add new gid to supp. list if it does not exist yet. */ + for (i = 0; i < ngroups; i++) + if (grp->gr_gid == grouplist[i]) + break; + + if (i == ngroups) + { + if (ngroups < ngroups_allocated && ngroups < ngroups_max) + grouplist[ngroups++] = grp->gr_gid; + else + fprintf (stderr, _("%s: too many groups, not added.\n"), + program); + } +#endif + + if (setgroups (ngroups, (grouplist)) < 0) + { + fprintf (stderr, _("%s: calling setgroups failed: %s\n"), + program, strerror (errno)); + return E_FAILURE; + } + + if (setgid (grp->gr_gid) < 0) + { + fprintf (stderr, _("%s: calling setgid failed: %s\n"), + program, strerror (errno)); + return E_FAILURE; + } + } + else /* Reset groups to default one. */ + { + if (initgroups (pw->pw_name, pw->pw_gid) != 0) + { + fprintf (stderr, _("%s: calling initgroups failed: %s\n"), + program, strerror (errno)); + return E_FAILURE; + } + if (setgid (pw->pw_gid) != 0) + { + fprintf (stderr, _("%s: calling setgid failed: %s\n"), + program, strerror (errno)); + return E_FAILURE; + } + } + + /* Drop root privilegs. */ + if (setuid (getuid ()) != 0) + { + fprintf (stderr, _("%s: calling setuid failed: %s\n"), + program, strerror (errno)); + return E_FAILURE; + } + + if (l_flag) + { + /* extern char **environ; */ + char *args[2], **cleanenv, *term; + + if (chdir (pw->pw_dir) != 0) + { + fprintf (stderr, _("Cannot change to directory %s: %s\n"), + pw->pw_dir, strerror (errno)); + if (!getlogindefs_bool ("DEFAULT_HOME", 1)) + return E_FAILURE; + if (chdir ("/") < 0) + return E_FAILURE; + } + + term = getenv("TERM"); + + if ((cleanenv = calloc (20, sizeof (char *))) == NULL) + { + fputs ("running out of memory!\n", stderr); + return E_FAILURE; + } + *cleanenv = NULL; + environ = cleanenv; + setenv("USER", pw->pw_name, 1); + setenv("SHELL", shell, 1); + setenv("HOME", pw->pw_dir, 1); + if (term != NULL) + setenv("TERM", term, 1); + + if (asprintf (&args[0], "-%s", basename (shell)) < 0) + { + fputs ("running out of memory!\n", stderr); + return E_FAILURE; + } + args[1] = NULL; + + execvp (shell, args); + } + else if (c_flag) + execl ("/bin/sh", "sh", "-c", c_flag, (char *) 0); + else + execl (shell, basename (shell), NULL); + + /* execv or execl failed. */ + fprintf (stderr, _("%s: execl failed: %s\n"), + program, strerror (errno)); + + /* should never be reached! */ + return E_FAILURE; +} diff --git a/src/pam_rpasswd.8 b/src/pam_rpasswd.8 new file mode 100644 index 0000000..19292c4 --- /dev/null +++ b/src/pam_rpasswd.8 @@ -0,0 +1,99 @@ +.\" -*- nroff -*- +.\" Copyright (C) 2004, 2010 Thorsten Kukuk +.\" Author: Thorsten Kukuk +.\" +.\" This program is free software; you can redistribute it and/or modify +.\" it under the terms of the GNU General Public License version 2 as +.\" published by the Free Software Foundation. +.\" +.\" 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +.\" +.TH pam_rpasswd 8 "February 2004" "pwdutils" +.SH NAME +pam_rpasswd - PAM module to change remote password +.SH DESCRIPTION +The +.B pam_rpasswd +PAM module is for changing the password of user accounts +on a remote server over a secure SSL connection. It only +provides functionality for one PAM management group: +\fIpassword changing\fR. +.PP +The options needs to be added in the PAM configuration files. +.SH OPTIONS +.TP +.BI "config_file=" "" +Specify another configuration file than \fI/etc/rpasswd.conf\fR. +.TP +.B "debug" +Print additinal debug messages to +.BR syslogd (8). +.TP +.BI "use_slp=" "0|1" +If compiled with SLP support, \fBpam_rpasswd\fR will use/not use +SLP to find a server. The default is to not use SLP. +.TP +.BI "reqcert=" "never|allow|try|hard" +.RS +Specifies what checks to perform on server certificates in +a SSL session. The default for this option is +.IR hard . +.TP +.B never +\fIpam_rpasswd\fR will not request or check any server certificate. +.TP +.B allow +The server certificate is requested. If no certificate is provided, +the session proceeds normally. If a bad certificate is provided, a +warning will be shown but the session proceeds normally. +.TP +.B try +The server certificate is requested. If no certificate is provided, +the session proceeds normally. If a bad certificate is provided, +the session is immediately terminated. +.TP +.B hard +The server certificate is requested. If no or a bad certificate is +provided, the session is immediately terminated. This is the default. +.RE +.TP +.BI "host=" "" +Specify the name of the server, where +.BR rpasswdd (8) +is running. +.TP +.BI "port=" "" +Specify the portnumber on which the server process +.BR rpasswdd (8) +is listening. +.TP +.B "verbose" +Be verbose, print SSL connection data. +.TP +.B "quiet" +Be quiet, don't print connection trys or SSL connection data. This option +takes precedence over +.BR verbose . +.SH FILES +/etc/rpasswd.conf \- configuration file +.SH BUGS +This manual page is far from complete, most options are missing. +Please read the README and look at the source package. +.SH "SEE ALSO" +.BR login (1), +.BR passwd (1), +.BR pam.conf (8), +.BR pam.d (8), +.BR pam_pwcheck (8), +.BR pam (8), +.BR rpasswd (1), +.BR rpasswdd (8), +.BR rpc.yppasswdd (8), +.BR yppasswd (1) diff --git a/src/pam_rpasswd.c b/src/pam_rpasswd.c new file mode 100644 index 0000000..27627bb --- /dev/null +++ b/src/pam_rpasswd.c @@ -0,0 +1,638 @@ +/* + * Copyright (c) 2004, 2005, 2009, 2010 Thorsten Kukuk + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, and the entire permission notice in its entirety, + * including the disclaimer of warranties. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote + * products derived from this software without specific prior + * written permission. + * + * ALTERNATIVELY, this product may be distributed under the terms of + * the GNU Public License, in which case the provisions of the GPL are + * required INSTEAD OF the above restrictions. (This clause is + * necessary due to a potential bad interaction between the GPL and + * the restrictions contained in a BSD-style copyright.) + * + * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED + * OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#if defined(HAVE_CONFIG_H) +#include "config.h" +#endif + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#ifdef USE_GNUTLS +#include +#else +#include +#include +#include +#include +#include +#endif + +#define PAM_SM_PASSWORD +#include +#include + +#include "error_codes.h" +#include "rpasswd-client.h" + +/* We don't use translated texts. */ +#define _(s) s + +struct options_t { + int debug; + int use_slp; + int verbose; + int quiet; + int reqcert; + char *config_file; + char *host; + char *port; + char *descr; +}; +typedef struct options_t options_t; + +/* syslogging function for errors and other information */ +static void +__pam_log (int err, const char *format,...) +{ + va_list args; + char *str; + + va_start (args, format); + if (vasprintf (&str, format, args) < 0) + return; + syslog (err, "pam_rpasswd: %s", str); + va_end (args); +} + +/* write message to user */ +static int +__write_message (pam_handle_t *pamh, int msg_style, + const char *fmt,...) +{ + struct pam_message msg[1], *pmsg[1]; + struct pam_response *resp=NULL; + struct pam_conv *conv; + void *conv_void; + char buffer[512]; + va_list ap; + int retval; + int buflen; + + va_start (ap, fmt); + vsnprintf (buffer, sizeof (buffer), fmt, ap); + va_end (ap); + + buflen = strlen (buffer); + if (buffer[buflen - 1] == '\n') + buffer[buflen - 1] = '\0'; + + pmsg[0] = &msg[0]; + msg[0].msg_style = msg_style; + msg[0].msg = buffer; + + retval = pam_get_item (pamh, PAM_CONV, (const void **) &conv_void); + conv = (struct pam_conv *) conv_void; + if (retval == PAM_SUCCESS) + { + retval = conv->conv (1, (const struct pam_message **)pmsg, + &resp, conv->appdata_ptr); + if (retval != PAM_SUCCESS) + return retval; + } + else + return retval; + + msg[0].msg = NULL; + if (resp) + _pam_drop_reply(resp, 1); + + return retval; +} + +#define HANDLE pam_handle_t *pamh, +#define IAM_PAM_MODULE +#define PRINTF __write_message +#define ERR_HANDLE pamh, PAM_ERROR_MSG +#define STD_HANDLE pamh, PAM_TEXT_INFO + +#include "rpasswd-client.c" + +#define CONV_ECHO_ON 1 /* types of echo state */ +#define CONV_ECHO_OFF 0 + +static int +read_string (pam_handle_t *pamh, int echo, const char *prompt, + char **retstr) +{ + struct pam_message msg[1], *pmsg[1]; + struct pam_response *resp; + struct pam_conv *conv; + void *conv_void; + int retval; + + /* set up conversation call */ + + pmsg[0] = &msg[0]; + if (echo == CONV_ECHO_ON) + msg[0].msg_style = PAM_PROMPT_ECHO_ON; + else + msg[0].msg_style = PAM_PROMPT_ECHO_OFF; + msg[0].msg = prompt; + resp = NULL; + + retval = pam_get_item (pamh, PAM_CONV, (const void **) &conv_void); + conv = (struct pam_conv *) conv_void; + if (retval == PAM_SUCCESS) + { + retval = conv->conv (1, (const struct pam_message **)pmsg, + &resp, conv->appdata_ptr); + if (retval != PAM_SUCCESS) + return retval; + } + else + return retval; + + if (resp) + { + *retstr = strdup (resp->resp ? resp->resp : ""); + if (resp) + _pam_drop_reply (resp, 1); + } + else + return PAM_CONV_ERR; + + return PAM_SUCCESS; +} + +#ifdef USE_GNUTLS +static int +handle_responses (pam_handle_t *pamh, gnutls_session ssl) +{ + response_header resp; + char retval = PAM_SUCCESS; + char *buf = NULL; + + do + { + int ret; + + /* header */ + if ((ret = gnutls_record_recv (ssl, &resp, sizeof (resp))) <= 0) + { + if (ret == 0) + __write_message (pamh, PAM_ERROR_MSG, + _("error while reading request: %s"), + _("Peer has closed the TLS connection")); + else + __write_message (pamh, PAM_ERROR_MSG, + _("error while reading request: %s"), + gnutls_strerror (ret)); + return PAM_SYSTEM_ERR; + } + + /* first entry */ + if (resp.data_len > 0) + { + buf = malloc (resp.data_len); + if (buf == NULL) + { + __write_message (pamh, PAM_ERROR_MSG, + _("error while allocating memory: %m")); + return PAM_SYSTEM_ERR; + } + + if ((ret = gnutls_record_recv (ssl, buf, resp.data_len)) <= 0) + { + __write_message (pamh, PAM_ERROR_MSG, + _("error while reading request data: %s"), + gnutls_strerror (ret)); + free (buf); + return PAM_SYSTEM_ERR; + } + } + + switch (resp.type) + { + case TEXT_INFO: + if (buf) + __write_message (pamh, PAM_TEXT_INFO, + "%s\n", buf); + break; + case ERROR_MSG: + if (buf) + __write_message (pamh, PAM_ERROR_MSG, + "%s\n", buf); + break; + case PROMPT_ECHO_OFF: + { + char *string = NULL; + int nc = read_string (pamh, CONV_ECHO_OFF, buf, &string); + if (nc < 0) + retval = send_string (pamh, ssl, PAM_CONV_ERR, string); + else + retval = send_string (pamh, ssl, PAM_SUCCESS, string); + } + break; + case PROMPT_ECHO_ON: + { + char *string = NULL; + int nc = read_string (pamh, CONV_ECHO_ON, buf, &string); + if (nc < 0) + retval = send_string (pamh, ssl, PAM_CONV_ERR, string); + else + retval = send_string (pamh, ssl, PAM_SUCCESS, string); + } + break; + case FINISH: + if (buf) + retval = buf[0]; + else + retval = PAM_SYSTEM_ERR; + break; + default: + break; + } + + if ((resp.type == PROMPT_ECHO_ON || resp.type == PROMPT_ECHO_OFF) && + retval != 0) + { + char err_buf[256]; + + PRINTF (ERR_HANDLE, _("Cannot send input back to server: %s\n"), + strerror_r (errno, err_buf, sizeof (err_buf))); + free (buf); + return PAM_SYSTEM_ERR; + } + if (buf) + { + free (buf); + buf = NULL; + } + } + while (resp.type != FINISH); + + return retval; +} +#else + +static int +handle_responses (pam_handle_t *pamh, SSL *ssl) +{ + response_header resp; + char retval = PAM_SUCCESS; + char *buf = NULL; + + do + { + errno = 0; + if (TEMP_FAILURE_RETRY (SSL_read (ssl, &resp, sizeof (resp))) + != sizeof (resp)) + { + char err_buf[256]; + + if (errno == 0) + __write_message (pamh, PAM_ERROR_MSG, + _("error while reading request: %s"), + _("wrong data received")); + else + __write_message (pamh, PAM_ERROR_MSG, + _("error while reading request: %s"), + strerror_r (errno, err_buf, sizeof (err_buf))); + return PAM_SYSTEM_ERR; + } + + if (resp.data_len > 0) + { + if (buf == NULL) + { + __write_message (pamh, PAM_ERROR_MSG, + _("error while allocating memory: %m")); + return PAM_SYSTEM_ERR; + } + + if (TEMP_FAILURE_RETRY (SSL_read (ssl, buf, resp.data_len)) + != resp.data_len) + { + __write_message (pamh, PAM_ERROR_MSG, + _("error while reading request data: %m")); + free (buf); + return PAM_SYSTEM_ERR; + } + } + + switch (resp.type) + { + case TEXT_INFO: + if (buf) + __write_message (pamh, PAM_TEXT_INFO, + "%s\n", buf); + break; + case ERROR_MSG: + if (buf) + __write_message (pamh, PAM_ERROR_MSG, + "%s\n", buf); + break; + case PROMPT_ECHO_OFF: + { + char *string = NULL; + int nc = read_string (pamh, CONV_ECHO_OFF, buf, &string); + if (nc < 0) + retval = send_string (ssl, PAM_CONV_ERR, string); + else + retval = send_string (ssl, PAM_SUCCESS, string); + } + break; + case PROMPT_ECHO_ON: + { + char *string = NULL; + int nc = read_string (pamh, CONV_ECHO_ON, buf, &string); + if (nc < 0) + retval = send_string (ssl, PAM_CONV_ERR, string); + else + retval = send_string (ssl, PAM_SUCCESS, string); + } + break; + case FINISH: + if (buf) + retval = buf[0]; + else + retval = PAM_SYSTEM_ERR; + break; + default: + break; + } + + if ((resp.type == PROMPT_ECHO_ON || resp.type == PROMPT_ECHO_OFF) && + retval != 0) + { + PRINTF (ERR_HANDLE, _("Cannot send input back to server: %m\n")); + free (buf); + return PAM_SYSTEM_ERR; + } + + if (buf) + { + free (buf); + buf = NULL; + } + } + while (resp.type != FINISH); + + return retval; +} +#endif + +static void +parse_option (const char *argv, options_t *options) +{ + if (argv == NULL || argv[0] == '\0') + return; + + if (strcasecmp (argv, "debug") == 0) + options->debug = 1; + else if (strcasecmp (argv, "use_slp=1") == 0) + options->use_slp = 1; + else if (strcasecmp (argv, "use_slp=0") == 0) + options->use_slp = 0; + else if (strcasecmp (argv, "verbose") == 0) + options->verbose = 1; + else if (strcasecmp (argv, "quiet") == 0) + options->quiet = 1; + else if (strncasecmp (argv, "reqcert=", 8) == 0) + options->reqcert = parse_reqcert (&argv[8]); + else if (strncasecmp (argv, "config_file=", 12) == 0) + options->config_file = strdup (&argv[12]); + else if (strncasecmp (argv, "host=", 5) == 0) + options->host = strdup (&argv[5]); + else if (strncasecmp (argv, "port=", 5) == 0) + options->port = strdup (&argv[5]); + else + __pam_log (LOG_ERR, "Unknown option: `%s'", argv); +} + + +static options_t * +get_options (int argc, const char **argv) +{ + options_t *options = calloc (1, sizeof (options_t)); + + if (options == NULL) + return NULL; + + options->reqcert = 3; + options->config_file = _PATH_RPASSWDCONF; + + /* Parse parameters for module */ + for ( ; argc-- > 0; argv++) + parse_option (*argv, options); + + if (options->quiet) + options->verbose = 0; + + return options; +} + +PAM_EXTERN int +pam_sm_chauthtok (pam_handle_t *pamh, int flags, + int argc, const char **argv) +{ + options_t *options; + void *user_void; + char *user; + int retval; + int sock; +#ifdef USE_GNUTLS + gnutls_session session; + gnutls_certificate_credentials xcred; +#else + SSL_CTX *ctx; + SSL *ssl; +#endif +#ifdef USE_SLP + int used_slp = 0; +#endif + + options = get_options (argc, argv); + if (options == NULL) + { + __pam_log (LOG_ERR, "cannot get options"); + return PAM_BUF_ERR; + } + + if (options->debug) + __pam_log (LOG_DEBUG, "pam_sm_chauthtok() called"); + + + retval = pam_get_item (pamh, PAM_USER, (const void **) &user_void); + if (retval != PAM_SUCCESS) + { + free (options); + return retval; + } + user = (char *) user_void; + + if (user == NULL || strlen (user) == 0) + { + if (options->debug) + __pam_log (LOG_DEBUG, "user (%s) unknown", user ? user : "NULL"); + /* The app is supposed to get us the username! */ + free (options); + return PAM_USER_UNKNOWN; + } + + if (flags & PAM_PRELIM_CHECK) + { + free (options); + return PAM_SUCCESS; + } + + if (options->host) + { + if (options->port) + load_config (options->config_file, NULL, NULL, &options->reqcert); + else + load_config (options->config_file, NULL, &options->port, + &options->reqcert); + } + else if (options->port) + load_config (options->config_file, &options->host, NULL, + &options->reqcert); + else + load_config (options->config_file, &options->host, + &options->port, &options->reqcert); + + +#ifdef USE_SLP + if (options->host == NULL && options->port == NULL && + options->use_slp == 1) + { + query_slp (pamh, &options->host, &options->port, &options->descr); + used_slp = 1; + } +#endif + + if (options->host == NULL) + { + PRINTF (ERR_HANDLE, "No server specified\n"); + free (options); + return PAM_SYSTEM_ERR; + } + + if (options->port == NULL) + options->port = "rpasswd"; + +#ifdef USE_SLP + if (used_slp) + { + if (options->port != NULL && strcmp (options->port, "rpasswd") != 0) + { + if (options->descr) + PRINTF (STD_HANDLE, _("SLP: Found Server on %s, port %s (%s)\n"), + options->host, options->port, options->descr); + else + PRINTF (STD_HANDLE, _("SLP: Found Server on %s, port %s\n"), + options->host, options->port); + } + else + { + if (options->descr) + PRINTF (STD_HANDLE, _("SLP: Found Server on %s (%s)\n"), + options->host, options->descr); + else + PRINTF (STD_HANDLE, _("SLP: Found Server on %s\n"), + options->host); + } + } +#endif + + /* Now we have all the initial information we need from the app to + set things up (we assume that getting the username succeeded...) */ + sock = connect_to_server (pamh, options->host, options->port, + PF_UNSPEC, options->quiet); + if (sock < 0) + { + free (options); + return PAM_TRY_AGAIN; + } + + /* Do SSL */ +#ifdef USE_GNUTLS + gnutls_global_init (); + /* Initialize TLS session. */ + gnutls_init (&session, GNUTLS_CLIENT); + retval = start_ssl (pamh, sock, options->reqcert, options->verbose, + session, &xcred); +#else + retval = start_ssl (pamh, sock, options->reqcert, options->verbose, + &ctx, &ssl); +#endif + + if (retval != 0) + { + free (options); + return PAM_SYSTEM_ERR; + } + +#ifdef USE_GNUTLS + if ((retval = start_request (pamh, session, user, 0)) == 0) + retval = handle_responses (pamh, session); + else + retval = PAM_SYSTEM_ERR; +#else + if ((retval = start_request (ssl, user, 0)) == 0) + retval = handle_responses (pamh, ssl); + else + retval = PAM_SYSTEM_ERR; +#endif + +#ifdef USE_GNUTLS + gnutls_bye (session, GNUTLS_SHUT_RDWR); + close (sock); + gnutls_deinit (session); + gnutls_certificate_free_credentials (xcred); + gnutls_global_deinit (); +#else + close (sock); + SSL_free (ssl); + SSL_CTX_free (ctx); +#endif + + free (options); + + return retval; +} diff --git a/src/pam_rpasswd.map b/src/pam_rpasswd.map new file mode 100644 index 0000000..019eaf3 --- /dev/null +++ b/src/pam_rpasswd.map @@ -0,0 +1,6 @@ +{ + global: + pam_sm_chauthtok; + local: + *; +}; diff --git a/src/passwd.1 b/src/passwd.1 new file mode 100644 index 0000000..1ca0975 --- /dev/null +++ b/src/passwd.1 @@ -0,0 +1,194 @@ +.\" -*- nroff -*- +.\" Copyright (C) 2003, 2005, 2006 Thorsten Kukuk +.\" Author: Thorsten Kukuk +.\" +.\" This program is free software; you can redistribute it and/or modify +.\" it under the terms of the GNU General Public License version 2 as +.\" published by the Free Software Foundation. +.\" +.\" 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +.\" +.TH passwd 1 "November 2005" "pwdutils" +.SH NAME +passwd \- change user password +.SH SYNOPSIS +\fBpasswd\fR [\fB-f\fR|\fB-g\fR|\fB-s\fR|\fB-k\fR[\fB-q\fR]] [\fIname\fR] +.br +\fBpasswd\fR [\fB-D \fIbinddn\fR][\fB-n \fImin\fR][\fB-x \fImax\fR][\fB-w \fIwarn\fR][\fB-i \fIinact\fR] \fIaccount\fR +.br +\fBpasswd\fR [\fB-D \fIbinddn\fR] {\fB-l\fR|\fB-u\fR|\fB-d\fR|\fB-S\fR[\fB-a\fR]|\fB-e\fR} \fIname\fR +.br +\fBpasswd\fR --bioapi [\fIaccount\fR] +.br +\fBpasswd\fR --stdin [\fIaccount\fR] +.SH DESCRIPTION +\fBpasswd\fR changes passwords for user and group accounts. +While an administrator may change the password for any account or +group, a normal user is only allowed to change the password for +their own account. +\fBpasswd\fR also changes account information, such as the full name +of the user, their login shell, password expiry dates and intervals +or disable an account. +.PP +\fBpasswd\fR is written to work through the \fBPAM\fR API. +Essentially, it initializes itself as a "passwd" service +and utilizes configured \fI"password"\fR +modules to authenticate and then update a user's password. +.TP +A sample \fI/etc/pam.d/passwd\fR file might look like this: + +#%PAM-1.0 +.br +auth required pam_unix2.so nullok +.br +account required pam_unix2.so +.br +password required pam_pwcheck.so nullok +.br +password required pam_unix2.so nullok \\ +.br + use_first_pass use_authtok +.br +session required pam_unix2.so +.LP +.SS Password Changes +If an old password is present, the user is first promted for it +and the password is compared agaisnt the stored one. This can be +changed, depending which PAM modules are used. +An administrator is permitted to bypass this step so that forgotten +passwords may be changed. +.PP +After the user is authenticated, password aging information +are checked to see if the user is permitted to change their password +at this time. Else \fBpasswd\fR refuses to change the password. +.PP +The user is then prompted for a replacement password. +Care must be taken to not include special control characters +or characters, which are not available on all keyboards. +.PP +If the password is accepted, +\fBpasswd\fR will prompt again and compare the second entry +against the first. +Both entries are require to match in order for the password +to be changed. +.SH OPTIONS +.TP +.B "\-f" +Change the finger (gecos) information. This +are the users fullname, office room number, office phone +number and home phone number. This information is stored +in the \fI/etc/passwd\fR file and typically printed by +.BI finger (1) +and similiar programs. +.TP +.B "\-g" +With this option, the password for the named group will be changed. +.TP +.B "\-s" +This option is used to change the user login shell. A normal +user may only change the login shell for their own account, the +super user may change the login shell for any account. +.TP +.B "\-k" +Keep non-expired authentication tokens. The password will only +be changed if it is expired. +.TP +.B "\-q" +Try to be quiet. This option can only be used with +.BR "\-k" . +.LP +.SS Password expiry information +.TP +.BI "\-n" " min" +With this option the minimum number of days between password +changes is changed. A value of zero for this field indicates that +the user may change her password at any time. Else the user will not be +permitted to change the password until \fImin\fR days have elapsed. +.TP +.BI "\-x" " max" +With this option the maximum number of days during which a +password is valid is changed. When \fImaxdays\fR plus \fIlastday\fR +is less than the current day, the user will be required to change +his password before being able to use the account. +.TP +.BI "\-w" " warn" +With this option the number of days of warning before a password +change is required can be changed. This option is the number of +days prior to the password expiring that a user will be warned +the password is about to expire. +.TP +.BI "\-i" " inact" +This option is used to set the number of days of inactivity after +a password has expired before the account is locked. A user whose +account is locked must contact the system administrator before +being able to use the account again. +A value of -1 disables this feature. +.LP +.SS Account maintenance +.TP +.B "\-l" +A system administrator can lock the account of the specified user. +.TP +.B "\-u" +A system administrator can unlock the specified account, if the +account is not passwordless afterwards (it will not unlock an +account that has only "!" as a password). +.TP +.B "\-d" +The password of the given account can be deleted by the system +administrator. If the BioAPI interface is used the BioAPI data +for that account is removed. +.TP +.B "\-S" +Report password status on the named account. The first part +indicates if the user account is locked (LK), has no password (NP), +or has an existing or locked password (PS). The second part gives the +date of the last password change. The next parts are the minimum age, +maximum age, warning period, and inactivity period for the password. +.TP +.B "\-a" +Report the password status for all accounts. Can only be used in +conjunction with +.BR "\-S" . +.TP +.B "\-e" +The user will be forced to change the password at next login. +.TP +.BI "\-P" " path" +Search passwd and shadow file in \fBpath\fR. This option cannot be +used with changing passwords. +.TP +.B "\-\-bioapi" +This option is used to indicate that \fBpasswd\fR should use the +BioAPI for managing the authentication token of an account. It is +only supported with a small subset of other options. This option is +not always available. +.TP +.B "\-\-stdin" +This option is used to indicate that \fBpasswd\fR should read the new +password from standard input, which can be a pipe (only by a system +administrator). +.SS Name service switch options +.TP +.BI "\-D" " binddn" +Use the Distinguished Name \fIbinddn\fR to bind to the +LDAP directory. +.SH FILES +passwd \- user account information +.br +shadow \- shadow user account information +.SH SEE ALSO +.BR passwd (1), +.BR group (5), +.BR passwd (5), +.BR shadow (5), +.BR pam (5) +.SH AUTHOR +Thorsten Kukuk diff --git a/src/passwd.c b/src/passwd.c new file mode 100644 index 0000000..c51389c --- /dev/null +++ b/src/passwd.c @@ -0,0 +1,1049 @@ +/* Copyright (C) 2003, 2004, 2005, 2006, 2012 Thorsten Kukuk + Author: Thorsten Kukuk + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License version 2 as + published by the Free Software Foundation. + + 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ + +#if defined(HAVE_CONFIG_H) +#include "config.h" +#endif + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#ifdef WITH_SELINUX +#include +#include +#endif +#ifdef HAVE_LIBNSCD_H +#include +#endif +#ifdef HAVE_BIOAPI_H +#include +#ifdef HAVE_BIOAPI_UTIL_H +#include +#endif +#endif + +#include "i18n.h" +#include "public.h" +#include "logging.h" +#include "logindefs.h" +#include "read-files.h" +#include "error_codes.h" + +#ifndef GPASSWD_PROGRAM +#define GPASSWD_PROGRAM "gpasswd" +#endif + +#ifndef CHFN_PROGRAM +#define CHFN_PROGRAM "chfn" +#endif + +#ifndef CHSH_PROGRAM +#define CHSH_PROGRAM "chsh" +#endif + +/* How often should we try to lock the passwd database ? */ +#define MAX_LOCK_RETRIES 3 + +static struct pam_conv conv = { + misc_conv, + NULL +}; + +static long +conv2long (const char *param) +{ + long val; + char *cp; + + val = strtol (param, &cp, 10); + if (*cp) + return -2; + return val; +} + +static const char * +pw_status (const char *pass) +{ + if (*pass == '\0') + return "NP"; + if (*pass == '*' || *pass == '!' || strcmp (pass, "x") == 0) + return "LK"; + return "PS"; +} + +static char * +date_to_str (time_t t) +{ + static char buf[80]; + struct tm *tm; + + tm = gmtime (&t); + strftime (buf, sizeof buf, "%m/%d/%Y", tm); + return buf; +} + +static void +display_pw (const struct passwd *pw) +{ + struct spwd *sp; + +#define DAY (24L*3600L) +#define SCALE DAY + + sp = getspnam (pw->pw_name); + if (sp) + { + printf ("%s %s %s %ld %ld %ld %ld\n", + sp->sp_namp, + pw_status (sp->sp_pwdp), + date_to_str (sp->sp_lstchg * SCALE), + (sp->sp_min * SCALE) / DAY, + (sp->sp_max * SCALE) / DAY, + (sp->sp_warn * SCALE) / DAY, + (sp->sp_inact * SCALE) / DAY); + } + else + printf ("%s %s\n", pw->pw_name, pw_status (pw->pw_passwd)); +} + +/* A conversation function which uses an internally-stored value for + * the responses. */ +static int +stdin_conv (int num_msg, const struct pam_message **msgm, + struct pam_response **response, void *appdata_ptr) +{ + struct pam_response *reply; + int count; + + /* Sanity test. */ + if (num_msg <= 0) + return PAM_CONV_ERR; + + /* Allocate memory for the responses. */ + reply = calloc (num_msg, sizeof (struct pam_response)); + if (reply == NULL) + return PAM_CONV_ERR; + + /* Each prompt elicits the same response. */ + for (count = 0; count < num_msg; ++count) + { + reply[count].resp_retcode = 0; + reply[count].resp = strdup (appdata_ptr); + } + + /* Set the pointers in the response structure and return. */ + *response = reply; + return PAM_SUCCESS; +} + +#ifdef HAVE_BIOAPI_H + +static const char *birDbPath = "/etc/bioapi/pam"; + +static char * +get_uuid_string () +{ + return strdup ("{5550454b-2054-464d-2f45-535320425350}"); +} + +static int +bioapi_delete (const char *user) +{ + char *uuidString = get_uuid_string (); + char *filename; + int ret; + + if (asprintf (&filename, "%s/%s/%s.bir", birDbPath, + uuidString, user) < 0) + { + fputs ("running out of memory!\n", stderr); + free (uuidString); + return E_FAILURE; + } + free (uuidString); + + unlink (filename); + free (filename); + + return E_SUCCESS; +} + +static int +bioapi_chauthtok (const char *user) +{ + static const struct bioapi_version version = { 1, 10 }; + BioAPI_RETURN bret; + char *uuidString = get_uuid_string (); + BioAPI_UUID tempUuid; + const BioAPI_UUID *uuid; + BioAPI_HANDLE bspHandle; + BioAPI_BIR_HANDLE bir; + + bret = BioAPI_Init (&version, 0, NULL, 0, NULL); + if (bret != BioAPI_OK) + { + fprintf (stderr, + _("Unable to initialize BioAPI framework, BioAPI error #:%x.\n"), + bret); + free (uuidString); + return E_FAILURE; + } + + bret = BioAPI_GetStructuredUUID (uuidString, &tempUuid); + if (bret != BioAPI_OK) + { + fprintf (stderr, + _("Unable to parse UUID (BioAPI error #:%x) : %s\n"), + bret, uuidString); + BioAPI_Terminate (); + free (uuidString); + return E_FAILURE; + } + + uuid = (const BioAPI_UUID *) malloc (sizeof(BioAPI_UUID)); + if (uuid == 0) + { + fputs ("running out of memory!\n", stderr); + BioAPI_Terminate (); + free (uuidString); + return E_FAILURE; + } + + memcpy (uuid, tempUuid, sizeof(BioAPI_UUID)); + bret = BioAPI_ModuleLoad (uuid, 0, NULL, NULL); + if (bret != BioAPI_OK) + { + fprintf (stderr, + _("Unable to load BioAPI BSP with UUID of %s, BioAPI error #%x.\n"), + uuidString, bret); + BioAPI_Terminate (); + return E_FAILURE; + } + + bret = BioAPI_ModuleAttach (uuid, &version, &BioAPIMemoryFuncs, + 0, 0, 0, 0, NULL, 0, NULL, &bspHandle); + if (bret != BioAPI_OK) + { + fprintf (stderr, + _("Unable to attach default device to BioAPI BSP with UUID of %s, BioAPI error #%x.\n"), + uuidString, bret); + BioAPI_ModuleUnload (uuid, NULL, NULL); + free (uuid); + BioAPI_Terminate (); + return E_FAILURE; + } + + bret = BioAPI_Enroll (bspHandle, + BioAPI_PURPOSE_ENROLL_FOR_VERIFICATION_ONLY, + NULL, &bir, NULL, -1, NULL); + if (bret == BioAPI_OK) + { + FILE *outputFile; + char *filename = malloc (strlen(birDbPath) + 1 + + strlen (uuidString) + 1 + + strlen (user) + 4 + 1); + struct stat status; + BioAPI_BIR_PTR birData; + + strcpy (filename, birDbPath); + stat (filename, &status); + /* Does the birDb directory exist? If not, create it. */ + if (errno == ENOENT && mkdir (filename, S_IRWXU | S_IRWXG) == -1) + { + fprintf (stderr, + _("Unable to create BIR database directory, \"%s\"\n"), + filename); + free (filename); + return E_FAILURE; + } + strcat (filename, "/"); + strcat (filename, uuidString); + stat (filename, &status); + /* Does the BSP specific directory exist? If not, create it. */ + if (errno == ENOENT && + mkdir (filename, S_IRWXU | S_IRWXG) == -1) + { + fprintf (stderr, + _("Unable to create BSP-specific subdirectory in BIR database directory, \"%s\"\n"), + filename); + free (filename); + return E_FAILURE; + } + + strcat (filename, "/"); + strcat (filename, user); + strcat (filename, ".bir"); + + birData = NULL; + if ((bret = BioAPI_GetBIRFromHandle (bspHandle, bir, &birData)) + != BioAPI_OK) + { + fprintf (stderr, + _("Unable to write biometric identification record, \"%s\": BioAPI error #%x\n"), + filename, bret); + free (filename); + return E_FAILURE; + } + + outputFile = fopen (filename, "w+"); + free (filename); + + if (outputFile == NULL) + { + fprintf (stderr, + _("Unable to open BIR for writing, \"%s\"\n"), + filename); + return E_FAILURE; + } + fwrite (&(birData->Header), sizeof (BioAPI_BIR_HEADER), + 1, outputFile); + fwrite (birData->BiometricData, + birData->Header.Length - sizeof(BioAPI_BIR_HEADER), + 1, outputFile); + + if (birData->Signature) + { + fwrite (&(birData->Signature->Length), 4, 1, outputFile); + fwrite (birData->Signature->Data, + (size_t)birData->Signature->Length, 1, + outputFile); + } + + fclose (outputFile); + free (birData->BiometricData); + + if (birData->Signature) + { + free (birData->Signature->Data); + free (birData->Signature); + } + free (birData); + } + else + { + fprintf (stderr, + _("Unable to enroll user %s using BSP with UUID of %s, BioAPI error #%x.\n"), + user, uuidString, bret); + } + BioAPI_ModuleDetach (bspHandle); + BioAPI_ModuleUnload (uuid, NULL, NULL); + free (uuid); + BioAPI_Terminate (); + if (bret != BioAPI_OK) + return E_FAILURE; + + return E_SUCCESS; +} +#endif + + +static void +print_usage (FILE *stream, const char *program) +{ + fprintf (stream, _("Usage: %s [-f|-g|-s|-k[-q]] [account]\n"), program); + fprintf (stream, _(" %s [-D binddn] [-n min] [-x max] [-w warn] [-i inact] account\n"), program); + fprintf (stream, _(" %s {-l|-u|-d|-S[-a]|-e} account\n"), program); +#ifdef HAVE_BIOAPI_H + fprintf (stream, _(" %s --bioapi [account]\n"), program); +#endif + fprintf (stream, _(" %s --stdin [account]\n"), program); +} + +static void +print_help (const char *program) +{ + print_usage (stdout, program); + fprintf (stdout, _("%s - change password information\n\n"), program); + + fputs (_(" -f Change the finger (GECOS) information\n"), + stdout); + fputs (_(" -s Change the login shell\n"), stdout); + fputs (_(" -g Change the group password\n"), stdout); + fputs (_(" -k Change the password only if expired\n"), stdout); + fputs (_(" -q Try to be quiet\n"), stdout); + fputs (_(" -S Show the password attributes\n"), stdout); + fputs (_(" -a Only with -S, show for all accounts\n"), stdout); + fputs (_(" -d Delete the password for the named account\n"), stdout); + fputs (_(" -l Locks the password entry for \"account\"\n"), stdout); + fputs (_(" -u Try to unlock the password entry for \"account\"\n"), stdout); + fputs (_(" -e Force the user to change password at next login\n"), stdout); + fputs (_(" -n min Set minimum field for \"account\"\n"), stdout); + fputs (_(" -x max Set maximum field for \"account\"\n"), stdout); + fputs (_(" -w warn Set warn field for \"account\"\n"), stdout); +#ifdef HAVE_BIOAPI_H + fputs (_(" --bioapi Authentication token is handled via BioAPI\n"), stdout); +#endif + fputs (_(" --service srv Use nameservice 'srv'\n"), stdout); + fputs (_(" -D binddn Use dn \"binddn\" to bind to the LDAP directory\n"), + stdout); + fputs (_(" -P path Search passwd and shadow file in \"path\"\n"), + stdout); + fputs (_(" --stdin Read new password from stdin (root only)\n"), stdout); + fputs (_(" --help Give this help list\n"), stdout); + fputs (_(" --usage Give a short usage message\n"), stdout); + fputs (_(" --version Print program version\n"), stdout); + fputs (_("Valid services are: files, nis, nisplus, ldap\n"), stdout); +} + +static int +passwd_main (const char *program, int argc, char **argv) +{ + int buflen = 256; + char *buffer = alloca (buflen); + struct passwd resultbuf; + struct passwd *pw = NULL; + int admin_only = 0; + int silent = 0; + uid_t uid = getuid (); + user_t *pw_data = NULL; + char *caller_name = NULL; + char *use_service = NULL; + char *binddn = NULL; + int k_flag = 0, a_flag = 0, d_flag = 0, e_flag = 0, + i_flag = 0, l_flag = 0, n_flag = 0, u_flag = 0, x_flag = 0, +#ifdef HAVE_BIOAPI_H + bioapi_flag = 0, +#endif + S_flag = 0, w_flag = 0, P_flag = 0, stdin_flag = 0; + + long inact = 0, age_min = 0, age_max = 0, warn = 0; + + /* Parse program arguments */ + while (1) + { + int c; + int option_index = 0; + static struct option long_options[] = + { + {"binddn", required_argument, NULL, 'D'}, + {"path", required_argument, NULL, 'P'}, + {"version", no_argument, NULL, '\255'}, + {"usage", no_argument, NULL, '\254'}, + {"help", no_argument, NULL, '\253'}, + {"stdin", no_argument, NULL, '\252'}, + {"service", required_argument, NULL, '\251'}, +#ifdef HAVE_BIOAPI_H + {"bioapi", no_argument, NULL, '\250'}, +#endif + {NULL, 0, NULL, '\0'} + }; + + c = getopt_long (argc, argv, "adD:lquSekn:x:i:w:P:", long_options, + &option_index); + if (c == EOF) + break; + switch (c) + { + case 'a': + a_flag = 1; + break; + case 'd': + d_flag = 1; + admin_only = 1; + break; + case 'D': + binddn = optarg; + break; + case 'e': + e_flag = 1; + admin_only = 1; + break; + case 'i': + i_flag = 1; + inact = conv2long (optarg); + if (inact <= -2) + { + print_error (program); + return E_BAD_ARG; + } + admin_only = 1; + break; + case 'k': + k_flag = 1; /* ok for users */ + break; + case 'l': + l_flag = 1; + admin_only = 1; + break; + case 'n': + n_flag = 1; + age_min = conv2long (optarg); + if (age_min <= -2) + { + print_error (program); + return E_BAD_ARG; + } + admin_only = 1; + break; + case 'q': + silent = 1; /* ok for users */ + break; + case '\251': + if (use_service != NULL) + { + print_error (program); + return E_BAD_ARG; + } + if (strcasecmp (optarg, "yp") == 0 || + strcasecmp (optarg, "nis") == 0) + use_service = "nis"; + else if (strcasecmp (optarg, "nis+") == 0 || + strcasecmp (optarg, "nisplus") == 0) + use_service = "nisplus"; + else if (strcasecmp (optarg, "files") == 0) + use_service = "files"; + else if (strcasecmp (optarg, "ldap") == 0) + use_service = "ldap"; + else + { + fprintf (stderr, _("Service `%s' not supported.\n"), optarg); + print_usage (stderr, program); + return E_BAD_ARG; + } + break; + case 'x': + x_flag = 1; + age_max = conv2long (optarg); + if (age_max <= -2) + { + print_error (program); + return E_BAD_ARG; + } + admin_only = 1; + break; + case 'S': + S_flag = 1; /* ok for users */ + break; + case 'u': + u_flag = 1; + admin_only = 1; + break; + case 'w': + w_flag = 1; + warn = conv2long (optarg); + if (warn <= -2) + { + print_error (program); + return E_BAD_ARG; + } + admin_only = 1; + break; + case 'P': + P_flag = 1; + files_etc_dir = strdup (optarg); + break; +#ifdef HAVE_BIOAPI_H + case '\250': + bioapi_flag = 1; + break; +#endif + case '\252': + stdin_flag = 1; + break; + case '\253': + print_help (program); + return 0; + case '\255': + print_version (program, "2006"); + return 0; + case '\254': + print_usage (stdout, program); + return E_USAGE; + default: + print_error (program); + return E_BAD_ARG; + } + } + + argc -= optind; + argv += optind; + + /* We have more than one username or we have -S -a with a + username */ + if (argc > 1|| (a_flag && S_flag && argc != 0)) + { + fprintf (stderr, _("%s: Too many arguments.\n"), program); + print_error (program); + return E_USAGE; + } + + /* For admin only commands we need a user name */ + if (argc == 0 && admin_only) + { + fprintf (stderr, _("%s: User argument missing\n"), program); + print_error (program); + return E_USAGE; + } + + /* Print a list of all users with status informations. + The -a flag requires -S, no other flags, no username, and + you must be root. */ + if (a_flag) + { + if (admin_only || !S_flag || (argc != 0)) + { + print_error (program); + return E_USAGE; + } + if (uid != 0) + { + fprintf (stderr, _("%s: Permission denied.\n"), program); + sec_log (program, MSG_PASSWORD_STATUS_FOR_ALL_DENIED, uid); + return E_NOPERM; + } + sec_log (program, MSG_DISPLAY_PASSWORD_STATUS_FOR_ALL, uid); + setpwent (); + while ((pw = getpwent ())) + display_pw (pw); + endpwent (); + return E_SUCCESS; + } + + if (stdin_flag && uid != 0) + { + fprintf (stderr, _("%s: Permission denied.\n"), program); + sec_log (program, MSG_STDIN_FOR_NONROOT_DENIED, uid); + return E_NOPERM; + } + + if (S_flag && (admin_only || k_flag)) + { + print_error (program); + return E_USAGE; + } + else if (d_flag + u_flag + l_flag > 1) + { + print_error (program); + return E_USAGE; + } + else + { + /* Determine our own user name for PAM authentication. */ + while (getpwuid_r (uid, &resultbuf, buffer, buflen, &pw) != 0 + && errno == ERANGE) + { + errno = 0; + buflen += 256; + buffer = alloca (buflen); + } + if (!pw) + { + sec_log (program, MSG_NO_ACCOUNT_FOUND, uid); + fprintf (stderr, _("%s: Cannot determine your user name.\n"), + program); + return E_NOPERM; + } + caller_name = strdupa (pw->pw_name); + + /* We change the passwd information for another user, get that + data, too. */ + if (argc == 1) + { + while (getpwnam_r (argv[0], &resultbuf, buffer, buflen, &pw) != 0 + && errno == ERANGE) + { + errno = 0; + buflen += 256; + buffer = alloca (buflen); + } + if (!pw) + { + fprintf (stderr, _("%s: Unknown user `%s'.\n"), + program, argv[0]); + return E_NOPERM; + } + } + + pw_data = do_getpwnam (pw->pw_name, use_service); + if (pw_data == NULL || pw_data->service == S_NONE) + { + sec_log (program, MSG_UNKNOWN_USER, pw->pw_name, uid); + /* Only print error, if we need the pw_data informations + later. Else ignore it and let PAM do it. */ + if (use_service) + { + fprintf (stderr, + _("%s: User `%s' is not known to service `%s'\n"), + program, pw->pw_name, use_service); + return E_FAILURE; + } + else if (admin_only) + { + fprintf (stderr, _("%s: Unknown user `%s'.\n"), program, + pw->pw_name); + return E_FAILURE; + } + } + } + +#ifdef WITH_SELINUX + if (is_selinux_enabled () > 0) + { + if ((uid == 0) && + (selinux_check_access (pw->pw_name, PASSWD__PASSWD) != 0)) + { + security_context_t user_context; + if (getprevcon (&user_context) < 0) + user_context = + (security_context_t) strdup (_("Unknown user context")); + + fprintf (stderr, + _("%s: %s is not authorized to change the password of %s\n"), + program, user_context, pw->pw_name); + if (security_getenforce() > 0) + { + syslog (LOG_ALERT, + "%s is not authorized to change the password of %s", + user_context, pw->pw_name); + freecon (user_context); + exit (E_NOPERM); + } + else + { + fprintf (stderr, + _("SELinux is in permissive mode, continuing\n")); + freecon (user_context); + } + } + } +#endif + + /* Check if normal users are allowed to change the data. For NIS+ and + LDAP, we let the service decide if the user is allowed. */ + if (uid != 0 && pw_data && + pw_data->service != S_NISPLUS && pw_data->service != S_LDAP) + { + if (admin_only) + { + sec_log (program, MSG_PASSWORD_CHANGE_DENIED, + pw_data->pw.pw_name, pw_data->pw.pw_uid, uid); + fprintf(stderr, _("%s: Permission denied\n"), program); + if (pw_data) + free_user_t (pw_data); + return E_NOPERM; + } + if (pw->pw_uid != uid) + { + sec_log (program, MSG_PASSWORD_CHANGE_DENIED, + pw_data->pw.pw_name, pw_data->pw.pw_uid, uid); + fprintf (stderr, _("You cannot change the shadow data for `%s'.\n"), + pw->pw_name); + syslog (LOG_WARNING, "%d cannot change shadow data for `%s'", + uid, pw->pw_name); + if (pw_data) + free_user_t (pw_data); + return E_NOPERM; + } + } + + if (S_flag) + { + sec_log (program, MSG_DISPLAY_PASSWORD_STATUS, + pw->pw_name, pw->pw_uid, uid); + display_pw (pw); + if (pw_data) + free_user_t (pw_data); + return E_SUCCESS; + } + + /* We only change the password, let PAM do it. */ + if (!admin_only) + { + pam_handle_t *pamh = NULL; + int flags = 0, ret; + + if (P_flag) + { + fprintf (stderr, _("%s: -P flag not supported in this mode!\n"), + program); + return E_USAGE; + } + + + if (stdin_flag) + { + char *ptr; + char password[160]; /* 127 is the longest with current crypt */ + int i; + + i = read (STDIN_FILENO, password, sizeof (password) - 1); + if (i < 0) + { + fprintf (stderr, _("%s: error reading from stdin!\n"), + program); + return E_FAILURE; + } + + password[i] = '\0'; + /* Remove trailing \n. */ + ptr = strchr (password, '\n'); + if (ptr) + *ptr = 0; + conv.conv = stdin_conv; + conv.appdata_ptr = strdup (password); + } + + if (!silent) + printf (_("Changing password for %s.\n"), pw->pw_name); + +#ifdef HAVE_BIOAPI_H + if (bioapi_flag) + { + int bret = bioapi_chauthtok (pw->pw_name); + if (bret != E_SUCCESS) + { + syslog (LOG_ERR, "User %s: BioAPI %d", + caller_name, bret); + sec_log (program, MSG_PASSWORD_CHANGE_FAILED, + ret, pw->pw_name, pw->pw_uid, uid); + sleep (getlogindefs_num ("FAIL_DELAY", 1)); + if (pw_data) + free_user_t (pw_data); + return E_PAM_ERROR; + } + } + else +#endif + { + if (silent) + flags |= PAM_SILENT; + if (k_flag) + flags |= PAM_CHANGE_EXPIRED_AUTHTOK; + + ret = pam_start ("passwd", pw->pw_name, &conv, &pamh); + if (ret != PAM_SUCCESS) + { + fprintf (stderr, _("%s: PAM Failure, aborting: %s\n"), + program, pam_strerror (pamh, ret)); + syslog (LOG_ERR, "Couldn't initialize PAM: %s", + pam_strerror (pamh, ret)); + if (pw_data) + free_user_t (pw_data); + return E_PAM_ERROR; + } + + ret = pam_chauthtok (pamh, flags); + if (ret != PAM_SUCCESS) + { + syslog (LOG_ERR, "User %s: %s", caller_name, + pam_strerror (pamh, ret)); + sec_log (program, MSG_PASSWORD_CHANGE_FAILED, + ret, pw->pw_name, pw->pw_uid, uid); + sleep (getlogindefs_num ("FAIL_DELAY", 1)); + fprintf (stderr, "%s: %s\n", program, + pam_strerror (pamh, ret)); + if (pw_data) + free_user_t (pw_data); + return E_PAM_ERROR; + } + + pam_end (pamh, PAM_SUCCESS); + } + sec_log (program, MSG_PASSWORD_CHANGED, + pw->pw_name, pw->pw_uid, uid); + if (pw_data) + free_user_t (pw_data); + return E_SUCCESS; + } + + /* if we come at this place, pw_data should not be NULL. */ + assert (pw_data); + + if (binddn) + { + char prompt[130+strlen (binddn)], *cp; + + pw_data->binddn = strdup (binddn); + snprintf (prompt, sizeof (prompt), _("Enter LDAP Password:")); + cp = getpass (prompt); + pw_data->oldclearpwd = strdup (cp); + } + + if (d_flag) + { +#ifdef HAVE_BIOAPI_H + if (bioapi_flag) + bioapi_delete (pw->pw_name); + else +#endif + pw_data->newpassword = strdup (""); + } + else if (u_flag) + { + const char *pwdp; + + if (pw_data->use_shadow) + pwdp = pw_data->sp.sp_pwdp; + else + pwdp = pw_data->pw.pw_passwd; + + /* If the password is only "!", don't unlock it. */ + if (pwdp && pwdp[0] == '!' && strlen (pwdp) > 1) + pw_data->newpassword = strdup (&pwdp[1]); + else + { + fprintf (stderr, _("Cannot unlock the password for `%s'!\n"), + pw_data->pw.pw_name); + free_user_t (pw_data); + return E_FAILURE; + } + } + else if (l_flag) + { + const char *pwdp; + + if (pw_data->use_shadow) + pwdp = pw_data->sp.sp_pwdp; + else + pwdp = pw_data->pw.pw_passwd; + + if (pwdp == NULL) + pw_data->newpassword = strdup ("!"); + else if (pwdp[0] != '!') + { + pw_data->newpassword = malloc (strlen (pwdp) + 2); + if (pw_data->newpassword == NULL) + return E_FAILURE; + strcpy (&pw_data->newpassword[1], pwdp); + pw_data->newpassword[0] = '!'; + } + else + { + fprintf (stderr, _("Password for `%s' is already locked!\n"), + pw_data->pw.pw_name); + free_user_t (pw_data); + return E_FAILURE; + } + } + + if (x_flag) + pw_data->spn.sp_max = (age_max * DAY) / SCALE; + if (n_flag) + pw_data->spn.sp_min = (age_min * DAY) / SCALE; + if (w_flag) + pw_data->spn.sp_warn = (warn * DAY) / SCALE; + if (i_flag) + pw_data->spn.sp_inact = (inact * DAY) / SCALE; + if (e_flag) + pw_data->spn.sp_lstchg = 0; + if (x_flag || n_flag || w_flag || i_flag || e_flag || e_flag) + pw_data->sp_changed = TRUE; + + if (write_user_data (pw_data, 0) != 0) + { + if (pw_data->sp_changed) + fprintf (stderr, + _("Error while changing password expiry information.\n")); + else + fprintf (stderr, _("Error while changing password.\n")); + free_user_t (pw_data); + return E_FAILURE; + } + else + { +#ifdef HAVE_NSCD_FLUSH_CACHE + nscd_flush_cache ("passwd"); +#endif + if (!silent) + { + if (pw_data->sp_changed) + printf (_("Password expiry information changed.\n")); + else if (d_flag) + printf (_("Password deleted.\n")); + else + printf (_("Password changed.\n")); + } + } + + sec_log (program, MSG_PASSWORD_CHANGED, + pw_data->pw.pw_name, pw_data->pw.pw_uid, uid); + + free_user_t (pw_data); + + return E_SUCCESS; +} + +int +main (int argc, char **argv) +{ + int retval; + char *prog; + +#ifdef ENABLE_NLS + setlocale (LC_ALL, ""); + bindtextdomain (PACKAGE, LOCALEDIR); + textdomain (PACKAGE); +#endif + + prog = basename (argv[0]); + + open_sec_log (prog); + + /* Before going any further, raise the ulimit and ignore + signals. */ + + init_environment (); + + /* easy way to get ride of the first argument. */ + if (argc > 1 && argv[1][0] == '-' && strchr ("gfs", argv[1][1])) + { + char buf[200]; + + if (setuid (getuid ()) != 0) + { + sec_log (prog, MSG_DROP_PRIVILEGE_FAILED, errno, getuid()); + fprintf (stderr, _("%s: Failed to drop privileges: %s\n"), + prog, strerror (errno)); + return E_FAILURE; + } + switch (argv[1][1]) + { + case 'g': + argv[1] = GPASSWD_PROGRAM; /* XXX warning: const */ + break; + case 'f': + argv[1] = CHFN_PROGRAM; /* XXX warning: const */ + break; + case 's': + argv[1] = CHSH_PROGRAM; /* XXX warning: const */ + break; + default: + /* If this happens we have a real problem. */ + abort (); + } + snprintf (buf, sizeof buf, _("passwd: Cannot execute %s"), argv[1]); + execvp(argv[1], &argv[1]); + perror(buf); + syslog (LOG_ERR, "Cannot execute %s", argv[1]); + closelog (); + return E_FAILURE; + } + + retval = passwd_main (prog, argc, argv); + closelog (); + return retval; +} diff --git a/src/pwck.8 b/src/pwck.8 new file mode 100644 index 0000000..1cf23b0 --- /dev/null +++ b/src/pwck.8 @@ -0,0 +1,29 @@ +.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.33. +.TH PWCK "1" "February 2004" "pwck (pwdutils) 2.5.92" "User Commands" +.SH NAME +pwck \- manual page for pwck (pwdutils) 2.5.92 +.SH SYNOPSIS +.B pwck +[\fI-P path\fR] [\fI-q|-r|-s\fR] +.SH DESCRIPTION +pwck - check integrity of password files +.TP +\fB\-P\fR path +Search passwd, shadow and group file in "path" +.TP +\fB\-q\fR, \fB\-\-quiet\fR +Don't print warnings, only errors +.HP +\fB\-r\fR, \fB\-\-read\-only\fR Run in read-only mode, don't make changes +.TP +\fB\-s\fR, \fB\-\-sort\fR +Sort the password file, not checks done +.TP +\fB\-\-help\fR +Give this help list +.TP +\fB\-u\fR, \fB\-\-usage\fR +Give a short usage message +.TP +\fB\-v\fR, \fB\-\-version\fR +Print program version diff --git a/src/pwck.c b/src/pwck.c new file mode 100644 index 0000000..bdf35f7 --- /dev/null +++ b/src/pwck.c @@ -0,0 +1,1106 @@ +/* Copyright (C) 2004, 2005, 2010, 2011 Thorsten Kukuk + Author: Thorsten Kukuk + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License version 2 as + published by the Free Software Foundation. + + 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ + + +#ifdef HAVE_CONFIG_H +#include +#endif + +#include +#include +#include +#include +#include +#include +#include +#include + +#include "i18n.h" +#include "yesno.h" +#include "public.h" +#include "read-files.h" + +#define E_SUCCESS 0 +#define E_USAGE 1 +#define E_BAD_ENTRY 2 +#define E_NO_FILE 3 +#define E_PWDBUSY 4 +#define E_FAILURE 5 + +#define SCALE DAY + +char *files_etc_dir = "/etc"; +int readonly = 0; + +static void +print_usage (FILE *stream, const char *program) +{ + fprintf (stream, _("Usage: %s [-P path] [-q|-r|-s]\n"), + program); +} + +static void +print_help (const char *program) +{ + print_usage (stdout, program); + fprintf (stdout, _("%s - check integrity of password files\n\n"), program); + + fputs (_(" -P path Search passwd, shadow and group file in \"path\"\n"), + stdout); + fputs (_(" -q, --quiet Don't print warnings, only errors\n"), stdout); + fputs (_(" -r, --read-only Run in read-only mode, don't make changes\n"), + stdout); + fputs (_(" -s, --sort Sort the password file, no checks are done\n"), + stdout); + fputs (_(" --help Give this help list\n"), stdout); + fputs (_(" -u, --usage Give a short usage message\n"), stdout); + fputs (_(" -v, --version Print program version\n"), stdout); +} + +static int +answer_yes (void) +{ + if (readonly) + { + printf (_("No\n")); + return 0; + } + else + return yesno (); +} + +#define BLACKLIST_INITIAL_SIZE 512 +#define BLACKLIST_INCREMENT 256 +struct blacklist_t +{ + char *data; + int current; + int size; +}; + +/* returns TRUE if ent->blacklist contains name, else FALSE */ +static bool_t +in_blacklist (const char *name, int namelen, struct blacklist_t *ent) +{ + char buf[namelen + 3]; + char *cp; + + if (ent->data == NULL) + return FALSE; + + buf[0] = '|'; + cp = stpcpy (&buf[1], name); + *cp++ = '|'; + *cp = '\0'; + return strstr (ent->data, buf) != NULL; +} + +/* Support routines for remembering login names. The names are stored + in a single string with `|' as separator. */ +static void +blacklist_store_name (const char *name, struct blacklist_t *ent) +{ + int namelen = strlen (name); + char *tmp; + + /* first call, setup cache */ + if (ent->size == 0) + { + ent->size = MAX (BLACKLIST_INITIAL_SIZE, 2 * namelen); + ent->data = malloc (ent->size); + if (ent->data == NULL) + return; + ent->data[0] = '|'; + ent->data[1] = '\0'; + ent->current = 1; + } + else + { + if (in_blacklist (name, namelen, ent)) + return; /* no duplicates */ + + if (ent->current + namelen + 1 >= ent->size) + { + ent->size += MAX (BLACKLIST_INCREMENT, 2 * namelen); + tmp = realloc (ent->data, ent->size); + if (tmp == NULL) + { + free (ent->data); + ent->size = 0; + return; + } + ent->data = tmp; + } + } + + tmp = stpcpy (ent->data + ent->current, name); + *tmp++ = '|'; + *tmp = '\0'; + ent->current += namelen + 1; + + return; +} + +/* XXX move into the library. */ +static struct group * +files_getgrgid (gid_t gid) +{ + enum nss_status status; + static int buflen = 256; + static char *buffer = NULL; + static struct group resultbuf; + + if (buffer == NULL) + buffer = malloc (buflen); + + while ((status = files_getgrgid_r (gid, &resultbuf, buffer, buflen, &errno)) + == NSS_STATUS_TRYAGAIN && errno == ERANGE) + { + errno = 0; + buflen += 256; + buffer = realloc (buffer, buflen); + } + if (status == NSS_STATUS_SUCCESS) + return &resultbuf; + else + return NULL; +} + +static struct passwd * +files_getpwnam (const char *name) +{ + enum nss_status status; + static int buflen = 256; + static char *buffer = NULL; + static struct passwd resultbuf; + + if (buffer == NULL) + buffer = malloc (buflen); + + while ((status = + files_getpwnam_r (name, &resultbuf, buffer, buflen, + &errno)) == NSS_STATUS_TRYAGAIN + && errno == ERANGE) + { + errno = 0; + buflen += 256; + buffer = realloc (buffer, buflen); + } + if (status == NSS_STATUS_SUCCESS) + return &resultbuf; + else + return NULL; +} + +static int +loop_over_passwd_file (int quiet) +{ + struct stat passwd_stat; + FILE *input, *output; + int output_fd; + char *buf = NULL; + size_t buflen = 0; + struct passwd res; + int result = 0; + struct blacklist_t blacklist = {NULL, 0, 0}; + int modified = 0; + char *inputname = alloca (strlen (files_etc_dir) + 8); + char *outputname = alloca (strlen (files_etc_dir) + 20); + + strcpy (inputname, files_etc_dir); + strcat (inputname, "/passwd"); + strcpy (outputname, files_etc_dir); + strcat (outputname, "/passwd.tmpXXXXXX"); + + if (!quiet) + printf (_("Checking `%s'\n"), inputname); + + input = fopen (inputname, "r"); + if (input == NULL) + { + fprintf (stderr, _("Can't open `%s': %m\n"), inputname); + return E_NO_FILE; + } + + if (fstat (fileno (input), &passwd_stat) < 0) + { + fprintf (stderr, _("Can't stat `%s': %m\n"), inputname); + fclose (input); + return E_NO_FILE; + } + +#ifdef WITH_SELINUX + security_context_t prev_context; + if (set_default_context (inputname, &prev_context) < 0) + { + fclose (input); + return E_NO_FILE; + } +#endif + /* Open a temp passwd file */ + output_fd = mkstemp (outputname); +#ifdef WITH_SELINUX + if (restore_default_context (prev_context) < 0) + { + if (output_fd >= 0) + close (output_fd); + fclose (input); + return E_FAILURE; + } +#endif + if (output_fd == -1) + { + fprintf (stderr, _("Can't create `%s': %m\n"), + inputname); + fclose (input); + return E_NO_FILE; + } + if (fchmod (output_fd, passwd_stat.st_mode) < 0) + { + fprintf (stderr, + _("Cannot change permissions for `%s': %s\n"), + outputname, strerror (errno)); + fclose (input); + close (output_fd); + unlink (outputname); + return E_NO_FILE; + } + if (fchown (output_fd, passwd_stat.st_uid, passwd_stat.st_gid) < 0) + { + fprintf (stderr, + _("Cannot change owner/group for `%s': %s\n"), + outputname, strerror (errno)); + fclose (input); + close (output_fd); + unlink (outputname); + return E_NO_FILE; + } + if (copy_xattr (inputname, outputname) != 0) + { + fclose (input); + close (output_fd); + unlink (outputname); + return E_NO_FILE; + } + output = fdopen (output_fd, "w+"); + if (output == NULL) + { + fprintf (stderr, _("Can't open `%s': %m\n"), outputname); + fclose (input); + close (output_fd); + unlink (outputname); + return E_NO_FILE; + } + + while (!feof (input)) + { + char *cp; +#if defined(HAVE_GETLINE) + ssize_t n = getline (&buf, &buflen, input); +#elif defined (HAVE_GETDELIM) + ssize_t n = getdelim (&buf, &buflen, '\n', input); +#else + ssize_t n; + + if (buf == NULL) + { + buflen = 8096; + buf = malloc (buflen); + } + buf[0] = '\0'; + fgets (buf, buflen - 1, input); + if (buf != NULL) + n = strlen (buf); + else + n = 0; +#endif /* HAVE_GETLINE / HAVE_GETDELIM */ + + if (buf) + cp = strdup (buf); + else + cp = strdup (""); + + /* Remove trailing '\n'. */ + if (strlen(cp) > 0 && cp[strlen (cp) - 1] == '\n') + cp[strlen (cp) - 1] = '\0'; + + if (n < 1) + { + if (feof (input)) + continue; + result = E_BAD_ENTRY; + printf (_("Invalid password entry.\n")); + printf (_("Delete empty line? ")); + if (answer_yes ()) + { + free (cp); + modified = 1; + continue; + } + else + goto write_pw; + } + + if (strcmp (cp, "+") == 0 || strcmp (cp, "-") == 0) + goto write_pw; + + /* Comments are not allowed in /etc/passwd. */ + if (strchr (cp, '#') != NULL) + { + result = E_BAD_ENTRY; + printf (_("Invalid password entry with comment.\n")); + printf (_("Delete line `%s'? "), cp); + if (answer_yes ()) + { + modified = 1; + free (cp); + continue; + } + else + goto write_pw; + } + + /* Parse string in strict mode and report error. */ + if (parse_pwent (buf, &res, 1) != 1) + { + result = E_BAD_ENTRY; + printf (_("Invalid password entry.\n")); + printf (_("Delete line `%s'? "), cp); + if (answer_yes ()) + { + modified = 1; + free (cp); + continue; + } + else + goto write_pw; + } + + /* Check for invalid characters in username. */ + if (cp[0] != '+' && cp[0] != '-' && check_name (res.pw_name) < 0) + { + result = E_BAD_ENTRY; + printf (_("Invalid account name `%s'.\n"), res.pw_name); + printf (_("Delete line `%s'? "), cp); + if (answer_yes ()) + { + modified = 1; + free (cp); + continue; + } + else + goto write_pw; + } + + /* Check, if we saw this user name already. */ + if (in_blacklist (res.pw_name, strlen (res.pw_name), &blacklist)) + { + result = E_BAD_ENTRY; + printf (_("Duplicate password entry\n")); + printf (_("Delete line `%s'? "), cp); + if (answer_yes ()) + { + modified = 1; + free (cp); + continue; + } + else + goto write_pw; + } + /* Mark the username as seen, but after checking for duplicate! */ + blacklist_store_name (res.pw_name, &blacklist); + + /* Check, if primary group exists. */ + if (!quiet && getgrgid (res.pw_gid) == NULL && + files_getgrgid (res.pw_gid) == NULL) + { + result = E_BAD_ENTRY; + printf (_("User `%s': unknown group `%u'\n"), + res.pw_name, res.pw_gid); + } + + /* Check, if the home directory exists. */ + if (!quiet && cp[0] != '+' && cp[0] != '=' && + access (res.pw_dir, F_OK)) + { + result = E_BAD_ENTRY; + printf (_("User `%s': directory `%s' does not exist.\n"), + res.pw_name, res.pw_dir); + } + + /* Check, if shell is executable. */ + if (!quiet && res.pw_shell && res.pw_shell[0] + && access (res.pw_shell, X_OK)) + { + result = E_BAD_ENTRY; + printf (_("User `%s': shell `%s' is not executable.\n"), + res.pw_name, res.pw_shell); + } + write_pw: + fprintf (output, "%s\n", cp); + free (cp); + } + + + fclose (input); + fclose (output); + if (modified) + { + char *oldname = alloca (strlen (files_etc_dir) + 20); + strcpy (oldname, files_etc_dir); + strcat (oldname, "/passwd.old"); + unlink (oldname); + if (link (inputname, oldname) < 0) + fprintf (stderr, + _("Warning: cannot create backup file `%s': %m\n"), + oldname); + rename (outputname, inputname); + } + else + unlink (outputname); + + return result; +} + +static int +loop_over_shadow_file (int quiet) +{ + struct stat shadow_stat; + FILE *input, *output; + int output_fd; + char *buf = NULL; + size_t buflen = 0; + struct spwd res; + int result = 0; + struct blacklist_t blacklist = {NULL, 0, 0}; + int modified = 0; + char *inputname = alloca (strlen (files_etc_dir) + 8); + char *outputname = alloca (strlen (files_etc_dir) + 20); + + strcpy (inputname, files_etc_dir); + strcat (inputname, "/shadow"); + strcpy (outputname, files_etc_dir); + strcat (outputname, "/shadow.tmpXXXXXX"); + + input = fopen (inputname, "r"); + if (input == NULL) + { + /* fprintf (stderr, _("Can't open `%s': %m\n"), inputname); */ + return E_NO_FILE; + } + + if (!quiet) + printf (_("Checking `%s'.\n"), inputname); + + if (fstat (fileno (input), &shadow_stat) < 0) + { + fprintf (stderr, _("Can't stat `%s': %m\n"), inputname); + fclose (input); + return E_NO_FILE; + } + +#ifdef WITH_SELINUX + security_context_t prev_context; + if (set_default_context (inputname, &prev_context) < 0) + { + fclose (input); + return E_NO_FILE; + } +#endif + /* Open a temp shadow file */ + output_fd = mkstemp (outputname); +#ifdef WITH_SELINUX + if (restore_default_context (prev_context) < 0) + { + if (output_fd >= 0) + close (output_fd); + fclose (input); + return E_FAILURE; + } +#endif + if (output_fd == -1) + { + fprintf (stderr, _("Can't create `%s': %m\n"), + inputname); + fclose (input); + return E_NO_FILE; + } + if (fchmod (output_fd, shadow_stat.st_mode) < 0) + { + fprintf (stderr, + _("Cannot change permissions for `%s': %s\n"), + outputname, strerror (errno)); + fclose (input); + close (output_fd); + unlink (outputname); + return E_NO_FILE; + } + if (fchown (output_fd, shadow_stat.st_uid, shadow_stat.st_gid) < 0) + { + fprintf (stderr, + _("Cannot change owner/group for `%s': %s\n"), + outputname, strerror (errno)); + fclose (input); + close (output_fd); + unlink (outputname); + return E_NO_FILE; + } + if (copy_xattr (inputname, outputname) != 0) + { + fclose (input); + close (output_fd); + unlink (outputname); + return E_NO_FILE; + } + output = fdopen (output_fd, "w+"); + if (output == NULL) + { + fprintf (stderr, _("Can't open `%s': %m\n"), outputname); + fclose (input); + close (output_fd); + unlink (outputname); + return E_NO_FILE; + } + + while (!feof (input)) + { + char *cp; +#if defined(HAVE_GETLINE) + ssize_t n = getline (&buf, &buflen, input); +#elif defined (HAVE_GETDELIM) + ssize_t n = getdelim (&buf, &buflen, '\n', input); +#else + ssize_t n; + + if (buf == NULL) + { + buflen = 8096; + buf = malloc (buflen); + } + buf[0] = '\0'; + fgets (buf, buflen - 1, input); + if (buf != NULL) + n = strlen (buf); + else + n = 0; +#endif /* HAVE_GETLINE / HAVE_GETDELIM */ + + if (buf) + cp = strdup (buf); + else + cp = strdup (""); + + /* Remove trailing '\n'. */ + if (strlen (cp) > 0 && cp[strlen (cp) - 1] == '\n') + cp[strlen (cp) - 1] = '\0'; + + if (n < 1) + { + if (feof (input)) + continue; + result = E_BAD_ENTRY; + printf (_("Invalid shadow entry.\n")); + printf (_("Delete empty line? ")); + if (answer_yes ()) + { + modified = 1; + free (cp); + continue; + } + else + goto write_pw; + } + + if (strcmp (cp, "+") == 0 || strcmp (cp, "-") == 0) + goto write_pw; + + /* Comments are not allowed in /etc/shadow. */ + if (strchr (cp, '#') != NULL) + { + result = E_BAD_ENTRY; + printf (_("Invalid shadow entry with comment.\n")); + printf (_("Delete line `%s'? "), cp); + if (answer_yes ()) + { + modified = 1; + continue; + } + else + goto write_pw; + } + + /* Parse string in strict mode and report error. */ + if (parse_spent (buf, &res, 1) != 1) + { + result = E_BAD_ENTRY; + printf (_("Invalid shadow entry.\n")); + printf (_("Delete line `%s'? "), cp); + if (answer_yes ()) + { + modified = 1; + free (cp); + continue; + } + else + goto write_pw; + } + + /* Check for invalid characters in username. */ + if (cp[0] != '+' && cp[0] != '-' && check_name (res.sp_namp) < 0) + { + result = E_BAD_ENTRY; + printf (_("Invalid account name `%s'.\n"), res.sp_namp); + printf (_("Delete line `%s'? "), cp); + if (answer_yes ()) + { + modified = 1; + free (cp); + continue; + } + else + goto write_pw; + } + + /* Check, if we saw this user name already. */ + if (in_blacklist (res.sp_namp, strlen (res.sp_namp), &blacklist)) + { + result = E_BAD_ENTRY; + printf (_("Duplicate shadow entry\n")); + printf (_("Delete line `%s'? "), cp); + if (answer_yes ()) + { + modified = 1; + free (cp); + continue; + } + else + goto write_pw; + } + /* Mark the username as seen, but after checking for duplicate! */ + blacklist_store_name (res.sp_namp, &blacklist); + + /* Check, if a passwd entry exist. */ + if (cp[0] != '+' && cp[0] != '-' && files_getpwnam (res.sp_namp) == NULL) + { + result = E_BAD_ENTRY; + printf (_("No matching password file entry.\n")); + printf (_("Delete line `%s'? "), cp); + if (answer_yes ()) + { + modified = 1; + free (cp); + continue; + } + else + goto write_pw; + } + + if (!quiet && res.sp_lstchg > time ((time_t *) 0) / SCALE) + { + result = E_BAD_ENTRY; + printf (_("User `%s': last password change in the future.\n"), + res.sp_namp); + } + + write_pw: + fprintf (output, "%s\n", cp); + free (cp); + } + + + fclose (input); + fclose (output); + if (modified) + { + char *oldname = alloca (strlen (files_etc_dir) + 20); + strcpy (oldname, files_etc_dir); + strcat (oldname, "/shadow.old"); + unlink (oldname); + if (link (inputname, oldname) < 0) + fprintf (stderr, + _("Warning: cannot create backup file `%s': %m\n"), + oldname); + rename (outputname, inputname); + } + else + unlink (outputname); + + return result; +} + +/* XXX move n library. */ +static struct passwd * +files_getpwent (void) +{ + enum nss_status status; + int buflen = 256; + char *buffer = NULL; + struct passwd *resultbuf = malloc (sizeof (struct passwd)); + + if (buffer == NULL) + buffer = malloc (buflen); + + while ((status = files_getpwent_r (resultbuf, buffer, buflen, &errno)) + == NSS_STATUS_TRYAGAIN && errno == ERANGE) + { + errno = 0; + buflen += 256; + buffer = realloc (buffer, buflen); + } + if (status == NSS_STATUS_SUCCESS) + return resultbuf; + else + return NULL; +} + +struct passwd_list { + struct passwd *pwd; + struct passwd_list *next; +}; + +static int +sort_passwd_file (void) +{ + struct passwd *pwd; + struct passwd_list *ptr = NULL; + int retval = 0; + + while ((pwd = files_getpwent ())) + { + if (pwd->pw_name[0] == '+' || pwd->pw_name[0] == '-') + break; + + if (ptr == NULL) + { + ptr = malloc (sizeof (struct passwd_list)); + if (ptr == NULL) + { + fputs ("running out of memory!\n", stderr); + exit (E_FAILURE); + } + + ptr->pwd = pwd; + ptr->next = NULL; + } + else + { + struct passwd_list *next = ptr; + + while (next->next && next->pwd->pw_uid < pwd->pw_uid) + next = next->next; + + if (next->next == NULL) + { + next->next = malloc (sizeof (struct passwd_list)); + + if (next->next == NULL) + { + fputs ("running out of memory!\n", stderr); + exit (E_FAILURE); + } + next->next->next = NULL; + + if (pwd->pw_uid > next->pwd->pw_uid) + next->next->pwd = pwd; + else + { + next->next->pwd = next->pwd; + next->pwd = pwd; + } + } + else + { + struct passwd_list *tmp; + tmp = malloc (sizeof (struct passwd_list)); + + if (tmp == NULL) + { + fputs ("running out of memory!\n", stderr); + exit (E_FAILURE); + } + tmp->next = next->next; + next->next = tmp; + tmp->pwd = next->pwd; + next->pwd = pwd; + } + } + } + + const char *file_tmp = "/passwd.tmpXXXXXX"; + char *passwd_tmp = alloca (strlen (files_etc_dir) + strlen (file_tmp) + 1); + char *passwd_orig = alloca (strlen (files_etc_dir) + 8); + char *passwd_old = alloca (strlen (files_etc_dir) + 12); + struct stat passwd_stat; + FILE *oldgf, *newgf; + int newgf_fd; + char *cp; + + + cp = stpcpy (passwd_tmp, files_etc_dir); + strcpy (cp, file_tmp); + cp = stpcpy (passwd_orig, files_etc_dir); + strcpy (cp, "/passwd"); + cp = stpcpy (passwd_old, passwd_orig); + strcpy (cp, ".old"); + + if ((oldgf = fopen (passwd_orig, "r")) == NULL) + { + fprintf (stderr, _("Can't open `%s': %m\n"), passwd_orig); + retval = -1; + goto error_passwd; + } + if (fstat (fileno (oldgf), &passwd_stat) < 0) + { + fprintf (stderr, _("Can't stat `%s': %m\n"), passwd_orig); + fclose (oldgf); + retval = -1; + goto error_passwd; + } + +#ifdef WITH_SELINUX + security_context_t prev_context; + if (set_default_context (passwd_orig, &prev_context) < 0) + { + fclose (oldgf); + retval = -1; + goto error_passwd; + } +#endif + /* Open a temp passwd file */ + newgf_fd = mkstemp (passwd_tmp); +#ifdef WITH_SELINUX + if (restore_default_context (prev_context) < 0) + { + if (newgf_fd >= 0) + close (newgf_fd); + fclose (oldgf); + retval = -1; + goto error_passwd; + } +#endif + if (newgf_fd == -1) + { + fprintf (stderr, _("Can't create `%s': %m\n"), + passwd_orig); + fclose (oldgf); + retval = -1; + goto error_passwd; + } + if (fchmod (newgf_fd, passwd_stat.st_mode) < 0) + { + fprintf (stderr, + _("Cannot change permissions for `%s': %s\n"), + passwd_tmp, strerror (errno)); + fclose (oldgf); + close (newgf_fd); + unlink (passwd_tmp); + retval = -1; + goto error_passwd; + } + if (fchown (newgf_fd, passwd_stat.st_uid, passwd_stat.st_gid) < 0) + { + fprintf (stderr, + _("Cannot change owner/group for `%s': %s\n"), + passwd_tmp, strerror (errno)); + fclose (oldgf); + close (newgf_fd); + unlink (passwd_tmp); + retval = -1; + goto error_passwd; + } + if (copy_xattr (passwd_orig, passwd_tmp) != 0) + { + fclose (oldgf); + close (newgf_fd); + unlink (passwd_tmp); + retval = -1; + goto error_passwd; + } + + newgf = fdopen (newgf_fd, "w+"); + if (newgf == NULL) + { + fprintf (stderr, _("Can't open `%s': %m\n"), passwd_tmp); + fclose (oldgf); + close (newgf_fd); + unlink (passwd_tmp); + retval = -1; + goto error_passwd; + } + + while (ptr != NULL) + { + /* write the passwd entry to tmp file */ + if (putpwent (ptr->pwd, newgf) < 0) + goto write_error_passwd; + ptr = ptr->next; + } + + /* Check if we have entries starting with +/- and copy + the rest of the passwd file without sorting it. */ + if (pwd != NULL) + { + /* write the passwd entry to tmp file */ + if (putpwent (pwd, newgf) < 0) + goto write_error_passwd; + while ((pwd = files_getpwent ())) + /* write the passwd entry to tmp file */ + if (putpwent (pwd, newgf) < 0) + { + write_error_passwd: + fprintf (stderr, + _("Error while writing `%s': %m\n"), + passwd_tmp); + fclose (oldgf); + fclose (newgf); + retval = -1; + goto error_passwd; + } + } + + if (fclose (oldgf) != 0) + { + fprintf (stderr, + _("Error while closing `%s': %m\n"), passwd_orig); + fclose (newgf); + retval = -1; + goto error_passwd; + } + if (fclose (newgf) != 0) + { + fprintf (stderr, + _("Error while closing `%s': %m\n"), passwd_tmp); + retval = -1; + goto error_passwd; + } + unlink (passwd_old); + if (link (passwd_orig, passwd_old) < 0) + fprintf (stderr, + _("Warning: cannot create backup file `%s': %m\n"), + passwd_old); + rename (passwd_tmp, passwd_orig); + error_passwd: + unlink (passwd_tmp); + + return retval; +} + +int +main (int argc, char *argv[]) +{ + const char *program = "pwck"; + int quiet = 0; + int sort = 0; + +#ifdef ENABLE_NLS + setlocale(LC_ALL, ""); + bindtextdomain(PACKAGE, LOCALEDIR); + textdomain(PACKAGE); +#endif + + while (1) + { + int c; + int option_index = 0; + static struct option long_options[] = { + {"path", required_argument, NULL, 'P'}, + {"quiet", no_argument, NULL, 'q' }, + {"readonly", no_argument, NULL, 'r' }, + {"read-only", no_argument, NULL, 'r' }, + {"sort", no_argument, NULL, 's' }, + {"version", no_argument, NULL, 'v' }, + {"usage", no_argument, NULL, 'u' }, + {"help", no_argument, NULL, '\255' }, + {NULL, 0, NULL, '\0'} + }; + + c = getopt_long (argc, argv, "P:qrsvu", + long_options, &option_index); + if (c == (-1)) + break; + switch (c) + { + case 'P': + files_etc_dir = strdup (optarg); + break; + case 'q': + quiet = 1; + break; + case 'r': + readonly = 1; + break; + case 's': + sort = 1; + break; + case '\255': + print_help (program); + return 0; + case 'v': + print_version (program, "2005"); + return 0; + case 'u': + print_usage (stdout, program); + return 0; + default: + print_error (program); + return E_USAGE; + } + } + + argc -= optind; + argv += optind; + + if (argc > 0) + { + fprintf (stderr, _("%s: Too many arguments.\n"), program); + print_error (program); + return E_USAGE; + } + else if (readonly && sort) + { + fprintf (stderr, _("%s: -s and -r are incompatibile.\n"), + program); + return E_USAGE; + } + + if (lock_database () != 0) + { + fprintf (stderr, + _("Cannot lock password file: already locked.\n")); + return E_PWDBUSY; + } + + if (sort) + return sort_passwd_file (); + else + { + int rp, rs; + + rp = loop_over_passwd_file (quiet); + rs = loop_over_shadow_file (quiet); + + if (rs == 0 || rs == E_NO_FILE) + return rp; + + if (rp == 0 || rp == E_NO_FILE) + return rs; + + if (rp > rs) + return rp; + else + return rs; + } +} diff --git a/src/pwconv.8 b/src/pwconv.8 new file mode 100644 index 0000000..40c0cd6 --- /dev/null +++ b/src/pwconv.8 @@ -0,0 +1,63 @@ +.\" -*- nroff -*- +.\" Copyright (C) 2004, 2007 Thorsten Kukuk +.\" Author: Thorsten Kukuk +.\" +.\" This program is free software; you can redistribute it and/or modify +.\" it under the terms of the GNU General Public License version 2 as +.\" published by the Free Software Foundation. +.\" +.\" 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +.\" +.TH pwconv 8 "January 2004" "pwdutils" +.SH NAME +pwconv \- convert to shadow account +.SH SYNOPSIS +.TP 5 +\fBpwconv\fR [\fB-P \fIpath\fR] +.SH DESCRIPTION +\fBpwconv\fR installs and updates \fI/etc/shadow\fR with information +from \fI/etc/passwd\fR. It relies on the special password 'x' in the +password field of the account. This value indicates that the password +for the user is already in \fI/etc/shadow\fR and should not be modified. + +If \fI/etc/shadow\fR does not exist, \fBpwconv\fR creates this file, +moves the user password to it and creates default aging informations +with the help of the values of \fBPASS_MIN_DAYS\fR, \fBPASS_MAX_DAYS\fR +and \fBPASS_WARN_AGE\fR from \fI/etc/login.defs\fR. The password field +in \fI/etc/passwd\fR is replaced with the special character 'x'. + +If the \fI/etc/shadow\fR does exist, entries that are in the +\fI/etc/passwd\fR file and not in the \fI/etc/shadow\fR file are +added to the \fI/etc/shadow\fR file. Accounts, which only exist in +\fI/etc/passwd\fR, are added to \fI/etc/shadow\fR. Entries that +are in \fI/etc/shadow\fR and not in \fI/etc/passwd\fR are removed +from \fI/etc/shadow\fR. All passwords from \fI/etc/passwd\fR are +moved to \fI/etc/shadow\fR and replaced with the special character 'x'. + +\fBpwconv\fR can be used for initial conversion and for updates later. +.SH OPTIONS +.TP +.BI "\-P, \-\-path" " path" +The \fIpasswd\fR and \fIshadow\fR files are located below +the specified directory path. \fBpwconv\fR will use this files, +not \fI/etc/passwd\fR and \fI/etc/shadow\fR. +.SH FILES +passwd \- user account information +.br +shadow \- shadow user account information +.SH SEE ALSO +.BR passwd (1), +.BR login.defs (5), +.BR passwd (5), +.BR shadow (5), +.BR pwck (8), +.BR pwunconv (8) +.SH AUTHOR +Thorsten Kukuk diff --git a/src/pwconv.c b/src/pwconv.c new file mode 100644 index 0000000..c29275a --- /dev/null +++ b/src/pwconv.c @@ -0,0 +1,500 @@ +/* Copyright (C) 2004, 2005, 2006, 2007, 2009 Thorsten Kukuk + Author: Thorsten Kukuk + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License version 2 as + published by the Free Software Foundation. + + 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ + + +#ifdef HAVE_CONFIG_H +#include +#endif + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#ifdef HAVE_LIBNSCD_H +#include +#endif + +#include "i18n.h" +#include "public.h" +#include "logindefs.h" +#include "read-files.h" +#include "error_codes.h" + +static void +print_usage (FILE *stream, const char *program) +{ + fprintf (stream, _("Usage: %s\n"), program); +} + +static void +print_help (const char *program) +{ + print_usage (stdout, program); + fprintf (stdout, _("%s - convert to shadow account\n\n"), + program); + + fputs (_(" -P path Search passwd and shadow file in \"path\"\n"), + stdout); + fputs (_(" --help Give this help list\n"), stdout); + fputs (_(" -u, --usage Give a short usage message\n"), stdout); + fputs (_(" -v, --version Print program version\n"), stdout); +} + +static struct passwd * +files_getpwent (void) +{ + enum nss_status status; + static int buflen = 256; + static char *buffer = NULL; + static struct passwd resultbuf; + + if (buffer == NULL) + buffer = malloc (buflen); + + while ((status = files_getpwent_r (&resultbuf, buffer, buflen, &errno)) + == NSS_STATUS_TRYAGAIN && errno == ERANGE) + { + errno = 0; + buflen += 256; + buffer = realloc (buffer, buflen); + } + if (status == NSS_STATUS_SUCCESS) + return &resultbuf; + else + return NULL; +} + +static struct spwd * +files_getspent (void) +{ + enum nss_status status; + static int buflen = 256; + static char *buffer = NULL; + static struct spwd resultbuf; + + if (buffer == NULL) + buffer = malloc (buflen); + + while ((status = files_getspent_r (&resultbuf, buffer, buflen, &errno)) + == NSS_STATUS_TRYAGAIN && errno == ERANGE) + { + errno = 0; + buflen += 256; + buffer = realloc (buffer, buflen); + } + if (status == NSS_STATUS_SUCCESS) + return &resultbuf; + else + return NULL; +} + +int +main (int argc, char *argv[]) +{ + struct passwd *pw; + struct spwd *sp; + char *program; + char *cp; + char *tmpshadow = NULL; + char *tmppasswd = NULL; + + +#ifdef ENABLE_NLS + setlocale(LC_ALL, ""); + bindtextdomain(PACKAGE, LOCALEDIR); + textdomain(PACKAGE); +#endif + + /* determine name of binary, which specifies edit mode. */ + program = ((cp = strrchr (*argv, '/')) ? cp + 1 : *argv); + + while (1) + { + int c; + int option_index = 0; + static struct option long_options[] = { + {"path", required_argument, NULL, 'P'}, + {"version", no_argument, NULL, 'v' }, + {"usage", no_argument, NULL, 'u' }, + {"help", no_argument, NULL, '\255' }, + {NULL, 0, NULL, '\0'} + }; + + c = getopt_long (argc, argv, "vuP:", + long_options, &option_index); + if (c == (-1)) + break; + switch (c) + { + case 'P': + files_etc_dir = strdup (optarg); + break; + case '\255': + print_help (program); + return 0; + case 'v': + print_version (program, "2005"); + return 0; + case 'u': + print_usage (stdout, program); + return 0; + default: + print_error (program); + return E_USAGE; + } + } + + argc -= optind; + argv += optind; + + if (argc > 0) + { + fprintf (stderr, _("%s: Too many arguments.\n"), program); + print_error (program); + return E_USAGE; + } + else + { + /* Check, if /etc/shadow file exist. If not, create one. */ + char *path; + struct stat st; + + if (asprintf (&path, "%s/shadow", files_etc_dir) < 0) + { + fputs ("running out of memory!\n", stderr); + free (path); + return E_FAILURE; + } + + if (lstat (path, &st) < 0) + { + /* ENOENT means, the file does not exist and we have + to create it. Else report an error and abort. */ + if (errno == ENOENT) + { + int fd = creat (path, S_IRUSR|S_IWUSR); + struct group *shadow_grp = getgrnam ("shadow"); + + if (fd < 0) + { + fprintf (stderr, _("Can't create `%s': %m\n"), path); + free (path); + return E_FAILURE; + } + + if (chown (path, 0, shadow_grp ? shadow_grp->gr_gid : 0) < 0) + { + fprintf (stderr, + _("Cannot change owner/group for `%s': %s\n"), + path, strerror (errno)); + unlink (path); + free (path); + return E_FAILURE; + } + if (chmod (path, S_IRUSR|S_IWUSR|S_IRGRP) < 0) + { + fprintf (stderr, + _("Cannot change permissions for `%s': %s\n"), + path, strerror (errno)); + unlink (path); + free (path); + return E_FAILURE; + } + } + else + { + fprintf (stderr, _("Can't stat `%s': %m\n"), path); + free (path); + return E_FAILURE; + } + } + else + { + /* else file exist, create a backup copy. */ + if (asprintf (&tmpshadow, "%s/shadow.pwconv", files_etc_dir) < 0) + { + fputs ("running out of memory!\n", stderr); + free (tmpshadow); + free (path); + return E_FAILURE; + } + /* remove old stale files */ + unlink (tmpshadow); + if (link (path, tmpshadow) < 0) + { + fprintf (stderr, _("Cannot create backup file `%s': %m\n"), + tmpshadow); + free (tmpshadow); + free (path); + return E_FAILURE; + } + } + free (path); + + /* Now create a copy of the original passwd file. */ + if (asprintf (&path, "%s/passwd", files_etc_dir) < 0) + { + fputs ("running out of memory!\n", stderr); + unlink (tmpshadow); + return E_FAILURE; + } + if (asprintf (&tmppasswd, "%s/passwd.pwconv", files_etc_dir) < 0) + { + fputs ("running out of memory!\n", stderr); + unlink (tmpshadow); + return E_FAILURE; + } + if (link (path, tmppasswd) < 0) + { + fprintf (stderr, _("Cannot create backup file `%s': %m\n"), + tmppasswd); + unlink (tmpshadow); + if (tmpshadow) + free (tmpshadow); + free (tmppasswd); + return E_FAILURE; + } + free (path); + } + + + /* Remove accounts from /etc/shadow, which have no entry in + /etc/passwd. */ + while ((sp = files_getspent ()) != NULL) + { + user_t *pw_data; + + if (sp->sp_namp[0] == '-' || sp->sp_namp[0] == '+') + { + if (sp->sp_namp[1] == '@' || sp->sp_namp[1] == '\0') + continue; /* we cannot check netgroups */ + else + pw_data = do_getpwnam (&sp->sp_namp[1], NULL); + } + else + pw_data = do_getpwnam (sp->sp_namp, NULL); + + if (pw_data == NULL || pw_data->service == S_NONE) + { + user_t *sp_data = calloc (1, sizeof (user_t)); + + if (sp_data == NULL) + { + fputs ("running out of memory!\n", stderr); + unlink (tmpshadow); + unlink (tmppasswd); + return E_FAILURE; + } + fprintf (stdout, + _("Orphaned entry '%s' removed from shadow database.\n"), + sp->sp_namp); + sp_data->service = S_LOCAL; + sp_data->todo = DO_DELETE_SHADOW; + sp_data->use_shadow = 1; + sp_data->pw.pw_name = sp->sp_namp; + if (write_user_data (sp_data, 0) != 0) + { + fprintf (stderr, + _("Error while deleting `%s' shadow account.\n"), + sp_data->pw.pw_name); + free (sp_data); + unlink (tmpshadow); + unlink (tmppasswd); + return E_FAILURE; + } + free (sp_data); + } + free_user_t (pw_data); + } + + /* For all accounts in /etc/passwd: If the passwd entry contains + a password and a shadow entry exist, update the shadow entry. + If no shadow entry exist, create one. */ + + while ((pw = files_getpwent ()) != NULL) + { + user_t *pw_data = do_getpwnam (pw->pw_name, "files"); + + if (pw_data == NULL || pw_data->service == S_NONE) + { + /* Ignore NIS entries */ + if (pw->pw_name[0] == '-' || pw->pw_name[0] == '+') + continue; + + fprintf (stderr, + _("%s: Error trying to get data for `%s'\n"), + program, pw->pw_name); + unlink (tmpshadow); + unlink (tmppasswd); + return E_FAILURE; + } + + /* This user does not have a shadow entry. Create one. */ + if (!pw_data->use_shadow) + { + int rc; + + /* Backup original password and replace it with a "x" + in local files. Report error*/ + pw_data->todo = DO_MODIFY; + pw_data->sp.sp_pwdp = pw_data->pw.pw_passwd; + pw_data->newpassword = strdup ("x"); + rc = write_user_data (pw_data, 0); + + if (rc != 0) + { + fprintf (stderr, + _("Error while converting `%s' to shadow account.\n"), + pw_data->pw.pw_name); + free_user_t (pw_data); + unlink (tmpshadow); + unlink (tmppasswd); + return E_FAILURE; + } + + pw_data->use_shadow = 1; + pw_data->todo = DO_CREATE_SHADOW; + free (pw_data->newpassword); + pw_data->newpassword = strdup (pw_data->pw.pw_passwd); + pw_data->sp.sp_namp = pw_data->pw.pw_name; + pw_data->sp.sp_lstchg = time ((time_t *) 0) / (24L * 3600L); + pw_data->sp.sp_min = getlogindefs_num ("PASS_MIN_DAYS", -1); + pw_data->sp.sp_max = getlogindefs_num ("PASS_MAX_DAYS", -1); + pw_data->sp.sp_warn = getlogindefs_num ("PASS_WARN_AGE", -1); + pw_data->sp.sp_inact = -1; + pw_data->sp.sp_expire = -1; + + if (write_user_data (pw_data, 0) != 0) + { + fprintf (stderr, + _("Error while converting `%s' to shadow account.\n"), + pw_data->pw.pw_name); + free_user_t (pw_data); + unlink (tmpshadow); + unlink (tmppasswd); + return E_FAILURE; + } +#ifdef HAVE_NSCD_FLUSH_CACHE + else + nscd_flush_cache ("passwd"); +#endif + } + else if (strcmp (pw_data->pw.pw_passwd, "x") != 0) + { + /* The user has a shadow account and an entry in + /etc/passwd. */ + + /* Backup original password and replace it with a "x" + in local passwd file. Report error*/ + int rc; + char *oldpassword = pw_data->pw.pw_passwd; + + pw_data->todo = DO_MODIFY; + pw_data->newpassword = strdup ("x"); + pw_data->use_shadow = 0; + rc = write_user_data (pw_data, 0); + pw_data->use_shadow = 1; + + if (rc != 0) + { + fprintf (stderr, + _("Error while converting `%s' to shadow account.\n"), + pw_data->pw.pw_name); + free_user_t (pw_data); + unlink (tmpshadow); + unlink (tmppasswd); + return E_FAILURE; + } + + pw_data->spn = pw_data->sp; + pw_data->spn.sp_lstchg = time ((time_t *) 0) / (24L * 3600L); + pw_data->sp_changed = 1; + free (pw_data->newpassword); + pw_data->newpassword = strdup (oldpassword); + if (write_user_data (pw_data, 0) != 0) + { + fprintf (stderr, + _("Error while converting `%s' to shadow account.\n"), + pw_data->pw.pw_name); + free_user_t (pw_data); + unlink (tmpshadow); + unlink (tmppasswd); + return E_FAILURE; + } +#ifdef HAVE_NSCD_FLUSH_CACHE + else + nscd_flush_cache ("passwd"); +#endif + } + + free_user_t (pw_data); + } + + /* Rename our own copy to shadow.old. As result, /etc/shadow.old + will have the contents of /etc/shadow when starting this program. */ + if (tmpshadow) + { + char *oldshadow; + + if (asprintf (&oldshadow, "%s/shadow.old", files_etc_dir) < 0) + { + fputs ("running out of memory!\n", stderr); + return E_FAILURE; + } + unlink (oldshadow); + if (rename (tmpshadow, oldshadow) < 0) + { + fprintf (stderr, + _("Error while renaming temporary shadow file: %m\n")); + unlink (tmpshadow); + unlink (tmppasswd); + return E_FAILURE; + } + free (oldshadow); + free (tmpshadow); + } + + /* Rename our own copy to passwd.old. As result, /etc/passwd.old + will have the contents of /etc/passwd when starting this program. */ + if (tmppasswd) + { + char *oldpasswd; + + if (asprintf (&oldpasswd, "%s/passwd.old", files_etc_dir) < 0) + { + fputs ("running out of memory!\n", stderr); + unlink (tmppasswd); + return E_FAILURE; + } + unlink (oldpasswd); + if (rename (tmppasswd, oldpasswd) < 0) + { + fprintf (stderr, + _("Error while renaming temporary password file: %m\n")); + unlink (tmppasswd); + return E_FAILURE; + } + free (oldpasswd); + free (tmppasswd); + } + + return E_SUCCESS; +} diff --git a/src/pwunconv.8 b/src/pwunconv.8 new file mode 100644 index 0000000..8916587 --- /dev/null +++ b/src/pwunconv.8 @@ -0,0 +1,45 @@ +.\" -*- nroff -*- +.\" Copyright (C) 2004 Thorsten Kukuk +.\" Author: Thorsten Kukuk +.\" +.\" This program is free software; you can redistribute it and/or modify +.\" it under the terms of the GNU General Public License version 2 as +.\" published by the Free Software Foundation. +.\" +.\" 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +.\" +.TH pwunconv 8 "January 2004" "pwdutils" +.SH NAME +pwunconv \- convert from shadow account +.SH SYNOPSIS +.TP 5 +\fBpwunconv\fR [\fB-P \fIpath\fR] +.SH DESCRIPTION +\fBpwunconv\fR moves the passwords from \fI/etc/shadow\fR to +\fI/etc/passwd\fR. The \fIshadow\fR file will be removed afterwards. +All password aging informations will go lost. +.SH OPTIONS +.TP +.BI "\-P, \-\-path" " path" +The \fIpasswd\fR and \fIshadow\fR files are located below +the specified directory path. \fBpwunconv\fR will use this files, +not \fI/etc/passwd\fR and \fI/etc/shadow\fR. +.SH FILES +passwd \- user account information +.br +shadow \- shadow user account information +.SH SEE ALSO +.BR passwd (1), +.BR passwd (5), +.BR shadow (5), +.BR pwck (8), +.BR pwconv (8) +.SH AUTHOR +Thorsten Kukuk diff --git a/src/pwunconv.c b/src/pwunconv.c new file mode 100644 index 0000000..9313786 --- /dev/null +++ b/src/pwunconv.c @@ -0,0 +1,258 @@ +/* Copyright (C) 2004, 2005 Thorsten Kukuk + Author: Thorsten Kukuk + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License version 2 as + published by the Free Software Foundation. + + 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ + + +#ifdef HAVE_CONFIG_H +#include +#endif + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#ifdef HAVE_LIBNSCD_H +#include +#endif + +#include "i18n.h" +#include "public.h" +#include "logindefs.h" +#include "read-files.h" +#include "error_codes.h" + +static void +print_usage (FILE *stream, const char *program) +{ + fprintf (stream, _("Usage: %s\n"), program); +} + +static void +print_help (const char *program) +{ + print_usage (stdout, program); + fprintf (stdout, _("%s - convert from shadow account\n\n"), + program); + + fputs (_(" -P path Search passwd and shadow file in \"path\"\n"), + stdout); + fputs (_(" --help Give this help list\n"), stdout); + fputs (_(" -u, --usage Give a short usage message\n"), stdout); + fputs (_(" -v, --version Print program version\n"), stdout); +} + +static struct spwd * +files_getspent (void) +{ + enum nss_status status; + static int buflen = 256; + static char *buffer = NULL; + static struct spwd resultbuf; + + if (buffer == NULL) + buffer = malloc (buflen); + + while ((status = files_getspent_r (&resultbuf, buffer, buflen, &errno)) + == NSS_STATUS_TRYAGAIN && errno == ERANGE) + { + errno = 0; + buflen += 256; + buffer = realloc (buffer, buflen); + } + if (status == NSS_STATUS_SUCCESS) + return &resultbuf; + else + return NULL; +} + +int +main (int argc, char *argv[]) +{ + struct spwd *sp; + char *program; + char *cp; + char *tmppasswd = NULL; + char *shadow_path; + +#ifdef ENABLE_NLS + setlocale(LC_ALL, ""); + bindtextdomain(PACKAGE, LOCALEDIR); + textdomain(PACKAGE); +#endif + + /* determine name of binary, which specifies edit mode. */ + program = ((cp = strrchr (*argv, '/')) ? cp + 1 : *argv); + + while (1) + { + int c; + int option_index = 0; + static struct option long_options[] = { + {"path", required_argument, NULL, 'P'}, + {"version", no_argument, NULL, 'v' }, + {"usage", no_argument, NULL, 'u' }, + {"help", no_argument, NULL, '\255' }, + {NULL, 0, NULL, '\0'} + }; + + c = getopt_long (argc, argv, "vuP:", + long_options, &option_index); + if (c == (-1)) + break; + switch (c) + { + case 'P': + files_etc_dir = strdup (optarg); + break; + case '\255': + print_help (program); + return 0; + case 'v': + print_version (program, "2005"); + return 0; + case 'u': + print_usage (stdout, program); + return 0; + default: + print_error (program); + return E_USAGE; + } + } + + argc -= optind; + argv += optind; + + if (argc > 0) + { + fprintf (stderr, _("%s: Too many arguments.\n"), program); + print_error (program); + return E_USAGE; + } + else + { + /* Check, if /etc/shadow file exist. If not, exit. */ + char *path; + struct stat st; + + if (asprintf (&shadow_path, "%s/shadow", files_etc_dir) < 0) + { + fputs ("running out of memory!\n", stderr); + return E_FAILURE; + } + + if (lstat (shadow_path, &st) < 0) + { + /* ENOENT means, the file does not exist and we have + to create it. Else report an error and abort. */ + if (errno == ENOENT) + { + fprintf (stderr, _("%s: No shadow file found.\n"), + program); + return E_FAILURE; + } + else + { + fprintf (stderr, _("Can't stat `%s': %m\n"), shadow_path); + return E_FAILURE; + } + } + + /* Now create a copy of the original passwd file. */ + if (asprintf (&path, "%s/passwd", files_etc_dir) < 0) + { + fputs ("running out of memory!\n", stderr); + return E_FAILURE; + } + if (asprintf (&tmppasswd, "%s/passwd.pwunconv", files_etc_dir) < 0) + { + fputs ("running out of memory!\n", stderr); + return E_FAILURE; + } + if (link (path, tmppasswd) < 0) + { + fprintf (stderr, _("Cannot create backup file `%s': %m\n"), + tmppasswd); + return E_FAILURE; + } + free (path); + } + + + /* Step through /etc/shadow and move the password into the passwd + file. */ + while ((sp = files_getspent ()) != NULL) + { + user_t *pw_data = do_getpwnam (sp->sp_namp, NULL); + /* Only change password in passwd file, if we have a + corresponding passwd entry and this is 'x'. */ + if (pw_data != NULL && pw_data->service != S_NONE && + strcmp (pw_data->pw.pw_passwd, "x") == 0) + { + /* Tell backend to ignore shadow file. */ + pw_data->use_shadow = 0; + pw_data->newpassword = strdup (sp->sp_pwdp); + if (write_user_data (pw_data, 0) != 0) + { + fprintf (stderr, + _("Error while moving password for `%s'.\n"), + pw_data->pw.pw_name); + free (pw_data); + return E_FAILURE; + } + } + free_user_t (pw_data); + } +#ifdef HAVE_NSCD_FLUSH_CACHE + nscd_flush_cache ("passwd"); +#endif + + /* Rename original shadow file to shadow.old. */ + { + char *oldshadow; + if (asprintf (&oldshadow, "%s/shadow.old", files_etc_dir) < 0) + { + fputs ("running out of memory!\n", stderr); + return E_FAILURE; + } + unlink (oldshadow); + rename (shadow_path, oldshadow); + free (oldshadow); + free (shadow_path); + } + + /* Rename our own copy to passwd.old. As result, /etc/passwd.old + will have the contents of /etc/passwd when starting this program. */ + if (tmppasswd) + { + char *oldpasswd; + + if (asprintf (&oldpasswd, "%s/passwd.old", files_etc_dir) < 0) + { + fputs ("running out of memory!\n", stderr); + return E_FAILURE; + } + unlink (oldpasswd); + rename (tmppasswd, oldpasswd); + free (oldpasswd); + free (tmppasswd); + } + + return E_SUCCESS; +} diff --git a/src/rpasswd-client.c b/src/rpasswd-client.c new file mode 100644 index 0000000..d21b4bb --- /dev/null +++ b/src/rpasswd-client.c @@ -0,0 +1,1064 @@ +/* Copyright (C) 2002-2005, 2008, 2010, 2011 Thorsten Kukuk + Author: Thorsten Kukuk + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License version 2 as + published by the Free Software Foundation. + + 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ + +#ifdef HAVE_CONFIG_H +#include +#endif + +#include +#include +#include +#include + +#ifdef HAVE_DIRENT_H +#include +#endif + +#ifdef USE_SLP +#include +#endif + + +#ifdef USE_GNUTLS +static int +start_request (HANDLE gnutls_session ssl, char *username, int admin_mode) +{ + request_header req; + char *locale = getenv ("LANG"); + int ret; + + if (admin_mode) + req.request = START_ADMIN; + else + req.request = START; + req.version = RPASSWD_VERSION; + req.data_len = strlen (username) + 1; + if (locale) + req.locale_len = strlen (locale) + 1; + else + req.locale_len = 0; + + if ((ret = gnutls_record_send (ssl, &req, sizeof (request_header))) <= 0) + { + if (ret == 0) + PRINTF (ERR_HANDLE, _("error while sending start request: %s\n"), + _("Peer has closed the TLS connection")); + else + PRINTF (ERR_HANDLE, _("error while sending start request: %s\n"), + gnutls_strerror (ret)); + return -1; + } + + if (locale) + { + if ((ret = gnutls_record_send (ssl, locale, req.locale_len)) <= 0) + { + if (ret == 0) + PRINTF (ERR_HANDLE, _("error while sending locale data: %s\n"), + _("Peer has closed the TLS connection")); + else + PRINTF (ERR_HANDLE, _("error while sending locale data: %s\n"), + gnutls_strerror (ret)); + return -1; + } + } + if ((ret = gnutls_record_send (ssl, username, req.data_len)) <= 0) + { + if (ret == 0) + PRINTF (ERR_HANDLE, _("error while sending username: %s\n"), + _("Peer has closed the TLS connection")); + else + PRINTF (ERR_HANDLE, _("error while sending username: %s\n"), + gnutls_strerror (ret)); + return -1; + } + + return 0; +} + +static int +send_string (HANDLE gnutls_session ssl, u_int32_t retval, const char *str) +{ + int ret; + conv_header resp; + + resp.retval = retval; + if (str == NULL) + resp.data_len = 0; + else + resp.data_len = strlen (str) + 1; + + if ((ret = gnutls_record_send (ssl, &resp, sizeof (resp))) <= 0) + { + if (ret == 0) + PRINTF (ERR_HANDLE, _("error while sending string: %s\n"), + _("Peer has closed the TLS connection")); + else + PRINTF (ERR_HANDLE, _("error while sending string: %s\n"), + gnutls_strerror (ret)); + return E_FAILURE; + } + + if (str) + { + if ((ret = gnutls_record_send (ssl, str, resp.data_len)) <= 0) + { + if (ret == 0) + PRINTF (ERR_HANDLE, _("error while sending string: %s\n"), + _("Peer has closed the TLS connection")); + else + PRINTF (ERR_HANDLE, _("error while sending string: %s\n"), + gnutls_strerror (ret)); + return E_FAILURE; + } + } + + return E_SUCCESS; +} + +#else + +static int +start_request (SSL *ssl, char *username, int admin_mode) +{ + request_header req; + char *locale = getenv ("LANG"); + + if (admin_mode) + req.request = START_ADMIN; + else + req.request = START; + req.version = RPASSWD_VERSION; + req.data_len = strlen (username) + 1; + if (locale) + req.locale_len = strlen (locale) + 1; + else + req.locale_len = 0; + + if (SSL_write (ssl, &req, sizeof (request_header)) != + sizeof (request_header)) + return -1; + + if (locale) + if (SSL_write (ssl, locale, req.locale_len) != req.locale_len) + return -1; + + if (SSL_write (ssl, username, req.data_len) != req.data_len) + return -1; + + return 0; +} + +static int +send_string (SSL *ssl, u_int32_t ret, const char *str) +{ + conv_header resp; + + resp.retval = ret; + if (str == NULL) + resp.data_len = 0; + else + resp.data_len = strlen (str) + 1; + if (TEMP_FAILURE_RETRY (SSL_write (ssl, &resp, sizeof (resp))) + != sizeof (resp)) + return E_FAILURE; + + if (str) + if (TEMP_FAILURE_RETRY (SSL_write (ssl, str, resp.data_len)) + != resp.data_len) + return E_FAILURE; + + return E_SUCCESS; +} +#endif + +#ifdef USE_SLP +/* Ask SLP server for rpasswd service. */ + +struct slpcb +{ + char *srvurl; + SLPError err; + struct slpcb *next; + char *hostp; + char *portp; + char *descr; +}; + +static void +free_slpcb (struct slpcb *cb) +{ + struct slpcb *tcb; + + free (cb->srvurl); + cb = cb->next; + + while (cb) + { + tcb = cb; + cb = cb->next; + free (tcb->srvurl); + if (tcb->descr) + free (tcb->descr); + free (tcb); + } +} + +static void +parse_slpcb (struct slpcb *cb) +{ +#define NEEDLE "://" + size_t needle_length = strlen (NEEDLE); + + cb->hostp = strstr (cb->srvurl, NEEDLE); + + if (cb->hostp == NULL || strlen (cb->hostp) < needle_length + 1) + return; + + cb->hostp += needle_length; + + cb->portp = strchr (cb->hostp, ':'); + if (cb->portp) + { + char *cp; + + cb->portp[0] = '\0'; + cb->portp += 1; + cp = cb->portp; + while (isdigit (*cp)) + cp++; + + if (*cp != '\0') + *cp = '\0'; + } +} + +static SLPBoolean +MySLPSrvURLCallback (SLPHandle hslp __attribute__ ((unused)), + const char *srvurl, + unsigned short lifetime __attribute__ ((unused)), + SLPError errcode, void *cookie) +{ + struct slpcb *cb = (struct slpcb *) cookie; + + if (errcode == SLP_OK) + { + if (cb->srvurl != NULL) + { + struct slpcb *cbt = malloc (sizeof (struct slpcb)); + if (cbt == NULL) + return SLP_FALSE; + + cbt->srvurl = cb->srvurl; + cbt->hostp = cb->hostp; + cbt->portp = cb->portp; + cbt->err = cb->err; + cbt->next = cb->next; + cb->next = cbt; + cb->descr = NULL; + } + cb->srvurl = strdup (srvurl); + parse_slpcb (cb); + cb->err = SLP_OK; + return SLP_TRUE; + } + else if (errcode != SLP_LAST_CALL) + cb->err = errcode; + + return SLP_FALSE; /* We don't wan't to be called again. */ +} + +static SLPBoolean +MySLPAttrCallback (SLPHandle hslp __attribute__ ((unused)), + const char *attrlist, SLPError errcode, void *cookie) +{ + char **descr = (char **) cookie; + + if (errcode == SLP_OK) + { + char *cp = strstr (attrlist, "(description="); + + if (cp == NULL) + return SLP_FALSE; + + *descr = strdup (cp + 13); + + cp = strchr (*descr, ')'); + if (cp != NULL) + *cp = '\0'; + } + + return SLP_FALSE; +} + +static int +query_slp (HANDLE char **hostp, char **portp, char **descrp) +{ + struct slpcb *cb, callbackres = { NULL, 0, NULL, NULL, NULL, NULL }; + SLPError err; + SLPHandle hslp; + + *hostp = NULL; + *portp = NULL; + *descrp = NULL; + + PRINTF (STD_HANDLE, _("Searching a server...\n")); + + err = SLPOpen ("en", SLP_FALSE, &hslp); + if (err != SLP_OK) + { + PRINTF (ERR_HANDLE, _("Error opening SLP handle: %i.\n"), err); + return err; + } + + err = SLPFindSrvs (hslp, "rpasswdd", 0, 0, + MySLPSrvURLCallback, &callbackres); + + /* err may contain an error code that occurred as the slp library + _prepared_ to make the call. */ + if (err != SLP_OK || callbackres.err != SLP_OK) + { + PRINTF (STD_HANDLE, _("No service found with SLP.\n")); + return -1; + } + + cb = &callbackres; + + while (cb != NULL) + { + char *buf; + + if (asprintf (&buf, "service:rpasswdd://%s:%s/", cb->hostp, + cb->portp ? : "774") < 0) + return -1; + err = SLPFindAttrs (hslp, buf, "", "", /* use configured scopes */ + MySLPAttrCallback, &(cb->descr)); + free (buf); + if (err != SLP_OK) + { + PRINTF (STD_HANDLE, + _("Error while searching for SLP description.\n")); + return -1; + } + cb = cb->next; + } + + /* Now that we're done using slp, close the slp handle */ + SLPClose (hslp); + + cb = &callbackres; +#if defined(SELECT_SRVURL) + if (cb->next != NULL) /* Only if we have more than one entry. */ + { + /* Ask the user which one to use. */ + struct slpcb *tcb = &callbackres; + int choice = 0; /* index of the user's choice. */ + char response[20]; /* string to hold the user's response. */ + int i = 0; + + printf (_("\nPlease select a server:\n")); + while (tcb != NULL) + { + ++i; + printf ("[%2d] %s", i, tcb->hostp); + if (tcb->portp) + printf (_(" (port %s)"), tcb->portp); + if (tcb->descr) + printf (" - %s", tcb->descr); + fputs ("\n", stdout); + tcb = tcb->next; + } + + while ((choice < 1) || (choice > i)) + { + char *cp; + printf (_("Enter number of choice [1-%d]: "), i); + fflush (stdin); + cp = fgets (response, sizeof (response), stdin); + fflush (stdin); + if (cp == NULL) + choice = 0; + else + choice = strtol (response, NULL, 10); + } + printf ("\n"); + for (i = 0; i < (choice - 1); i++) + cb = cb->next; + } +#endif + + if (cb->hostp != NULL) + { + *hostp = strdup (cb->hostp); + if (cb->portp) + *portp = strdup (cb->portp); + if (cb->descr) + *descrp = strdup (cb->descr); + + free_slpcb (&callbackres); + return 0; + } + + free_slpcb (&callbackres); + return -1; +} +#endif + +static int +parse_reqcert (const char *str) +{ + if (strcmp (str, "never") == 0) + return 0; + else if (strcmp (str, "allow") == 0) + return 1; + else if (strcmp (str, "try") == 0) + return 2; + else if (strcmp (str, "demand") == 0 || strcmp (str, "hard") == 0) + return 3; + + /* If we cannot parse it, use saftest mode. */ + return 3; +} + +/* Load the config file (/etc/rpasswd.conf) */ +static int +load_config (const char *configfile, char **hostp, char **portp, int *reqcertp +#ifdef DO_VERBOSE_OUTPUT + , int verbose, int check_syntax +#endif + ) +{ + FILE *fp; + char *buf = NULL; + size_t buflen = 0; + int have_entries = 0; /* # of entries we found in config file */ +#ifdef DO_VERBOSE_OUTPUT + int bad_entries = 0; +#endif + + fp = fopen (configfile, "r"); + if (NULL == fp) + return 1; + +#ifdef DO_VERBOSE_OUTPUT + if (verbose > 1) + PRINTF (STD_HANDLE, _("parsing config file")); +#endif + + while (!feof (fp)) + { + char *tmp, *cp; +#if defined(HAVE_GETLINE) + ssize_t n = getline (&buf, &buflen, fp); +#elif defined (HAVE_GETDELIM) + ssize_t n = getdelim (&buf, &buflen, '\n', fp); +#else + ssize_t n; + + if (buf == NULL) + { + buflen = 8096; + buf = malloc (buflen); + } + buf[0] = '\0'; + fgets (buf, buflen - 1, fp); + if (buf != NULL) + n = strlen (buf); + else + n = 0; +#endif /* HAVE_GETLINE / HAVE_GETDELIM */ + cp = buf; + + if (n < 1) + break; + + tmp = strchr (cp, '#'); /* remove comments */ + if (tmp) + *tmp = '\0'; + while (isspace ((int) *cp)) /* remove spaces and tabs */ + ++cp; + if (*cp == '\0') /* ignore empty lines */ + continue; + + if (cp[strlen (cp) - 1] == '\n') + cp[strlen (cp) - 1] = '\0'; + +#ifdef DO_VERBOSE_OUTPUT + if (verbose > 1) + PRINTF (STD_HANDLE, "%s %s", _("Trying entry:"), cp); + + if (check_syntax) + PRINTF (STD_HANDLE, "%s %s\n", _("Trying entry:"), cp); +#endif + + if (strncmp (cp, "server", 6) == 0 && isspace ((int) cp[6])) + { + if (hostp != NULL) + { + char tmpserver[MAXHOSTNAMELEN + 1]; + + if (sscanf (cp, "server %s", tmpserver) == 1) + *hostp = strdup (tmpserver); + } + continue; + } + else if (strncmp (cp, "port", 4) == 0 && isspace ((int) cp[4])) + { + if (portp != NULL) + { + char tmpport[30]; + + if (sscanf (cp, "port %s", tmpport) == 1) + *portp = strdup (tmpport); + } + continue; + } + else if (strncmp (cp, "reqcert", 7) == 0 && isspace ((int) cp[7])) + { + char *p = &cp[7]; + + while (isspace (*p)) + ++p; + + *reqcertp = parse_reqcert (p); + continue; + } + +#ifdef DO_VERBOSE_OUTPUT + if (check_syntax) + { + PRINTF (STD_HANDLE, _("Entry \"%s\" is not valid!\n"), cp); + ++bad_entries; + } + else + PRINTF (ERR_HANDLE, _("Entry \"%s\" is not valid, ignored!\n"), cp); +#endif + } + fclose (fp); + + if (buf) + free (buf); + +#ifdef DO_VERBOSE_OUTPUT + if (check_syntax) + { + if (bad_entries) + { + PRINTF (STD_HANDLE, _("Bad entries found.\n")); + return 1; + } + if (!have_entries) + { + PRINTF (STD_HANDLE, _("No entry found.\n")); + return 1; + } + } +#endif + + if (!have_entries) + { +#ifdef DO_VERBOSE_OUTPUT + if (verbose > 1) + PRINTF (STD_HANDLE, _("No entry found.")); +#endif + return 1; + } + + return 0; +} + +static int +connect_to_server (HANDLE const char *hostp, const char *portp, + int family, int quiet) +{ +#ifdef NI_WITHSCOPEID + const int niflags = NI_NUMERICHOST | NI_WITHSCOPEID; +#else + const int niflags = NI_NUMERICHOST; +#endif + struct addrinfo hints, *res, *res0; + int error; + int sock = -1; + + memset (&hints, 0, sizeof (hints)); + hints.ai_family = family; + + hints.ai_socktype = SOCK_STREAM; + hints.ai_flags = AI_CANONNAME; + + error = getaddrinfo (hostp, portp, &hints, &res0); + if (error) + { + if (error == EAI_NONAME) + { + PRINTF (ERR_HANDLE, + _ + ("Hostname or service not known for specified protocol\n")); + return -1; + } + else if (error == EAI_SERVICE) + { + /* if port cannot be resolved, try compiled in + port number. If this works, don't abort here. */ + char *cp; + if (asprintf (&cp, "%d", RPASSWDD_PORT) < 0) + return -1; + error = getaddrinfo (hostp, cp, &hints, &res0); + free (cp); + if (error) + { + PRINTF (ERR_HANDLE, _("bad port: %s\n"), portp); + return -1; + } + } + else + { + PRINTF (ERR_HANDLE, "%s: %s\n", hostp, gai_strerror (error)); + return -1; + } + } + + for (res = res0; res; res = res->ai_next) + { + char hbuf[NI_MAXHOST]; + + if (getnameinfo (res->ai_addr, res->ai_addrlen, + hbuf, sizeof (hbuf), NULL, 0, niflags) != 0) + strcpy (hbuf, "(invalid)"); + switch (res->ai_family) + { + case AF_INET: + if (!quiet) + { + struct sockaddr_in s_in; + memcpy (&s_in, res->ai_addr, sizeof (struct sockaddr_in)); + PRINTF (STD_HANDLE, _("Trying %s port %d...\n"), + hbuf, ntohs (s_in.sin_port)); + } + break; + case AF_INET6: + if (!quiet) + { + struct sockaddr_in6 s_in6; + memcpy (&s_in6, res->ai_addr, sizeof (struct sockaddr_in)); + PRINTF (STD_HANDLE, _("Trying %s port %d...\n"), + hbuf, ntohs (s_in6.sin6_port)); + } + break; + default: + if (!quiet) + PRINTF (STD_HANDLE, _("Trying %s...\n"), hbuf); + break; + } + + /* Create the socket. */ + sock = socket (res->ai_family, res->ai_socktype, res->ai_protocol); + if (sock < 0) + continue; + + if (connect (sock, res->ai_addr, res->ai_addrlen) < 0) + { + if (getnameinfo (res->ai_addr, res->ai_addrlen, + hbuf, sizeof (hbuf), NULL, 0, niflags) != 0) + strcpy (hbuf, "(invalid)"); + PRINTF (ERR_HANDLE, _("connect to address %s: %s\n"), hbuf, + strerror (errno)); + close (sock); + sock = -1; + continue; + } + if (!quiet) + PRINTF (STD_HANDLE, "\n"); + break; + } + freeaddrinfo (res0); + return sock; +} + +#ifdef USE_GNUTLS + +#include + +#ifndef HAVE_GNUTLS_PK_ALGORITHM_GET_NAME + +static const char * +gnutls_pk_algorithm_get_name (gnutls_pk_algorithm algorithm) +{ + if (algorithm == GNUTLS_PK_RSA) + return "RSA"; + else if (algorithm == GNUTLS_PK_DSA) + return "DSA"; + else + return "UNKNOWN"; +} +#endif + +/* This function will print information about this session's peer + * certificate. + */ +static void +print_x509_certificate_info (HANDLE gnutls_session session) +{ + char dn[128]; + size_t size; + unsigned int algo, bits; + time_t expiration_time, activation_time; + const gnutls_datum *cert_list; + unsigned int cert_list_size = 0; + gnutls_x509_crt cert; + + /* This function only works for X.509 certificates. + */ + if (gnutls_certificate_type_get (session) != GNUTLS_CRT_X509) + return; + + cert_list = gnutls_certificate_get_peers (session, &cert_list_size); + if (cert_list_size <= 0) + return; + + PRINTF (STD_HANDLE, _("Server certificate info:\n")); + + /* we only print information about the first certificate. */ + gnutls_x509_crt_init (&cert); + + gnutls_x509_crt_import (cert, &cert_list[0], GNUTLS_X509_FMT_DER); + + expiration_time = gnutls_x509_crt_get_expiration_time (cert); + activation_time = gnutls_x509_crt_get_activation_time (cert); + + PRINTF (STD_HANDLE, _(" Certificate is valid since: %s"), + ctime (&activation_time)); + PRINTF (STD_HANDLE, _(" Certificate expires: %s"), + ctime (&expiration_time)); + + /* Extract some of the public key algorithm's parameters + */ + algo = gnutls_x509_crt_get_pk_algorithm (cert, &bits); + PRINTF (STD_HANDLE, _(" Certificate public key: %s"), + gnutls_pk_algorithm_get_name (algo)); + + /* Print the version of the X.509 + * certificate. + */ + PRINTF (STD_HANDLE, _(" Certificate version: #%d\n"), + gnutls_x509_crt_get_version (cert)); + + size = sizeof (dn); + gnutls_x509_crt_get_dn (cert, dn, &size); + PRINTF (STD_HANDLE, _(" DN: %s\n"), dn); + + size = sizeof (dn); + gnutls_x509_crt_get_issuer_dn (cert, dn, &size); + PRINTF (STD_HANDLE, _(" Issuer's DN: %s\n"), dn); + + PRINTF (STD_HANDLE, "\n"); + + gnutls_x509_crt_deinit (cert); +} + + +static int +start_ssl (HANDLE long sock, int reqcert, int verbose, gnutls_session session, + gnutls_certificate_credentials *cred) +{ + gnutls_certificate_credentials xcred; + DIR *dir = opendir ("/etc/ssl/certs"); + struct dirent *entry; + int ret; + + /* Allow connections to servers that have OpenPGP keys as well. */ + const int cert_type_priority[3] = + { GNUTLS_CRT_X509, GNUTLS_CRT_OPENPGP, 0 }; + + + /* X509 stuff */ + gnutls_certificate_allocate_credentials (&xcred); + + /* sets the trusted cas files from /etc/ssl/certs and try to + add /etc/rpasswdd.pem (default from server). */ + if (dir != NULL) + { + while ((entry = readdir (dir)) != NULL) + { + /* Skip "." and ".." directory entries. */ + if (strcmp (entry->d_name, ".") == 0 || + strcmp (entry->d_name, "..") == 0) + continue; + else + { + char srcfile[strlen ("/etc/ssl/certs") + + strlen (entry->d_name) + 2]; + struct stat st; + char *cp; + + /* create source and destination filename with full path. */ + cp = stpcpy (srcfile, "/etc/ssl/certs"); + *cp++ = '/'; + strcpy (cp, entry->d_name); + + if (lstat (srcfile, &st) != 0) + continue; + + if (!S_ISLNK(st.st_mode) && !S_ISDIR(st.st_mode) && + !S_ISCHR(st.st_mode) && !S_ISBLK(st.st_mode)) + { + /* XXX error handling! */ + gnutls_certificate_set_x509_trust_file (xcred, srcfile, + GNUTLS_X509_FMT_PEM); + + } + } + } + closedir (dir); + } + gnutls_certificate_set_x509_trust_file (xcred, "/etc/rpasswdd.pem", + GNUTLS_X509_FMT_PEM); + + *cred = xcred; + + /* Use default priorities */ + gnutls_set_default_priority (session); + gnutls_certificate_type_set_priority (session, cert_type_priority); + + /* put the x509 credentials to the current session. */ + gnutls_credentials_set (session, GNUTLS_CRD_CERTIFICATE, xcred); + + gnutls_transport_set_ptr (session, (gnutls_transport_ptr) sock); + + /* Perform the TLS handshake. */ + ret = gnutls_handshake (session); + + if (ret < 0) + { + PRINTF (ERR_HANDLE, _("Handshake failed: %s\n"), + gnutls_strerror (ret)); + return E_SSL_FAILURE; + } + + if (reqcert > 0 || verbose) + { + gnutls_kx_algorithm kx; + unsigned int verify_result = 0; + time_t now; + + /* print the key exchange's algorithm name. */ + kx = gnutls_kx_get (session); + +#ifdef HAVE_GNUTLS_CERTIFICATE_VERIFY_PEERS2 + ret = gnutls_certificate_verify_peers2 (session, &verify_result); +#else + ret = gnutls_certificate_verify_peers (session); + if (ret > 0) + verify_result = ret; +#endif + if (ret < 0) + { + PRINTF (ERR_HANDLE, _("TLS certificate error: %s\n"), + gnutls_strerror (verify_result)); + return E_SSL_FAILURE; + } + + /* Following two steps are optional and not required for + data exchange to be successful except the client couldn't verfiy + the server certificate. */ + if (verify_result || verbose) + { + /* Get the cipher. */ + PRINTF (STD_HANDLE, _("%s connection using %s-%s (%s)\n\n"), + gnutls_protocol_get_name (gnutls_protocol_get_version + (session)), + gnutls_cipher_get_name (gnutls_cipher_get (session)), + gnutls_mac_get_name (gnutls_mac_get (session)), + gnutls_certificate_type_get_name + (gnutls_certificate_type_get (session))); + +#if defined(IAM_PAM_MODULE) + print_x509_certificate_info (pamh, session); +#else + print_x509_certificate_info (session); +#endif + + if (verify_result & GNUTLS_CERT_SIGNER_NOT_FOUND) + { + PRINTF (ERR_HANDLE, + _ + ("TLS authentication error: server certificate issuer is unknown.\n")); + if (reqcert >= 2) + return E_SSL_FAILURE; + } + else if (verify_result & GNUTLS_CERT_INVALID) + { + PRINTF (ERR_HANDLE, + _ + ("TLS authentication error: server certificate is NOT trusted.\n")); + if (reqcert >= 2) + return E_SSL_FAILURE; + } + } + + now = time (NULL); + + if (gnutls_certificate_activation_time_peers (session) > now) + { + PRINTF (ERR_HANDLE, + _("TLS authentication error: server certificate not yet activated.\n")); + if (reqcert >= 2) + return E_SSL_FAILURE; + } + + if (gnutls_certificate_expiration_time_peers (session) < now) + { + PRINTF (ERR_HANDLE, + _("TLS authentication error: server certificate expired.\n")); + if (reqcert >= 2) + return E_SSL_FAILURE; + } + } + + return 0; +} + +#else +static int +start_ssl (HANDLE int sock, int reqcert, int verbose, + SSL_CTX ** ctx, SSL ** ssl) +{ + X509 *server_cert; + char *str; + SSL_METHOD *meth; + long verify_result; + int err; + + SSLeay_add_ssl_algorithms (); + meth = SSLv3_client_method (); + SSL_load_error_strings (); + *ctx = SSL_CTX_new (meth); + if (*ctx == NULL) + { + PRINTF (ERR_HANDLE, ERR_error_string (ERR_get_error (), NULL)); + return E_SSL_FAILURE; + } + +#if 0 + /* This is only necessary if we configure a unusual path. + XXX Make this a program option. */ + if (!SSL_CTX_load_verify_locations (*ctx, NULL, "/etc/ssl/certs")) + { + PRINTF (ERR_HANDLE, _("error loading default verify locations: %s\n"), + ERR_error_string (ERR_get_error (), NULL)); + if (reqcert > 1) + return E_SSL_FAILURE; + } +#endif + if (!SSL_CTX_set_default_verify_paths (*ctx)) + { + PRINTF (ERR_HANDLE, _("error setting default verify path: %s\n"), + ERR_error_string (ERR_get_error (), NULL)); + if (reqcert > 1) + return E_SSL_FAILURE; + } + + /* Now we have TCP conncetion. Start SSL negotiation. */ + *ssl = SSL_new (*ctx); + if (*ssl == NULL) + { + PRINTF (ERR_HANDLE, ERR_error_string (ERR_get_error (), NULL)); + return E_SSL_FAILURE; + } + SSL_set_fd (*ssl, sock); + +#if OPENSSL_VERSION_NUMBER >= 0x00906000L + /* This only exists in 0.9.6 and above. Without it we may get interrupted + * reads or writes. Bummer. */ + SSL_set_mode (*ssl, SSL_MODE_AUTO_RETRY); +#endif + + err = SSL_connect (*ssl); + if (err < 1) + { + PRINTF (ERR_HANDLE, "SSL_connect: %s", ERR_error_string (err, NULL)); + close (sock); + return E_SSL_FAILURE; + } + + if (reqcert > 0 || verbose) + { + /* Get server's certificate (note: beware of dynamic allocation). */ + server_cert = SSL_get_peer_certificate (*ssl); + if (!server_cert) + { + PRINTF (ERR_HANDLE, _("Unable to get certificate from peer.\n")); + close (sock); + return E_SSL_FAILURE; + } + + /* Verify severs certificate. */ + verify_result = SSL_get_verify_result (*ssl); + + /* Following two steps are optional and not required for + data exchange to be successful except the client couldn't verfiy + the server certificate. */ + if (verify_result || verbose) + { + /* Get the cipher. */ + PRINTF (STD_HANDLE, _("SSL connection using %s\n\n"), + SSL_get_cipher (*ssl)); + + if (server_cert == NULL) + { + PRINTF (ERR_HANDLE, _("Server does not have a certificate?\n")); + if (reqcert >= 3) + return E_SSL_FAILURE; + } + else + { + PRINTF (STD_HANDLE, _("Server certificate info:\n")); + + str = X509_NAME_oneline (X509_get_subject_name (server_cert), + 0, 0); + if (str) + { + PRINTF (STD_HANDLE, _(" DN: %s\n"), str); + free (str); + } + str = X509_NAME_oneline (X509_get_issuer_name (server_cert), + 0, 0); + if (str) + { + PRINTF (STD_HANDLE, _(" Issuer's DN: %s\n"), str); + free (str); + } + /* We could do all sorts of certificate verification stuff + here before deallocating the certificate. */ + + PRINTF (STD_HANDLE, "\n"); + } + } + + if ((verify_result = SSL_get_verify_result (*ssl)) != X509_V_OK) + { + PRINTF (ERR_HANDLE, "Server certificate is not ok: %s!\n", + X509_verify_cert_error_string (verify_result)); + if (reqcert >= 2) + return E_SSL_FAILURE; + } + + X509_free (server_cert); + } + + return 0; +} +#endif diff --git a/src/rpasswd-client.h b/src/rpasswd-client.h new file mode 100644 index 0000000..1c97e28 --- /dev/null +++ b/src/rpasswd-client.h @@ -0,0 +1,55 @@ + +#ifndef _RPASSWD_CLIENT_H +#define _RPASSWD_CLIENT_H 1 + +/* Version number of the daemon interface. */ +#define RPASSWD_VERSION 1 + +/* Default port number on which the server listens. */ +#define RPASSWDD_PORT 774 + +/* Path for the configuration file. */ +#define _PATH_RPASSWDCONF "/etc/rpasswd.conf" + +/* Available requests from client. */ +typedef enum +{ + START, /* Normal user wishes to change password. */ + START_ADMIN /* Admin wishes to change the password for + another user. */ +} request_type; + +/* Header for first requests. */ +typedef struct +{ + int32_t version; /* Version number of the daemon interface. */ + request_type request; /* Normal user or Admin account. */ + int32_t locale_len; /* Length of the locale string. */ + int32_t data_len; /* Length of following data. */ +} request_header; + +/* Available responses from server. */ +typedef enum +{ + PROMPT_ECHO_OFF, + PROMPT_ECHO_ON, + ERROR_MSG, + TEXT_INFO, + FINISH +} response_type; + +/* Header for all messages from server. */ +typedef struct +{ + response_type type; /* Action requested. */ + int32_t data_len; /* Length of following data. */ +} response_header; + +/* Header for answers from conversion function. */ +typedef struct +{ + u_int32_t retval; /* Service requested. */ + int32_t data_len; /* Length of following data. */ +} conv_header; + +#endif /* rpasswd client */ diff --git a/src/rpasswd.1 b/src/rpasswd.1 new file mode 100644 index 0000000..d381ed3 --- /dev/null +++ b/src/rpasswd.1 @@ -0,0 +1,95 @@ +.\" -*- nroff -*- +.\" Copyright (C) 2002, 2003, 2004 Thorsten Kukuk +.\" Author: Thorsten Kukuk +.\" +.\" This program is free software; you can redistribute it and/or modify +.\" it under the terms of the GNU General Public License version 2 as +.\" published by the Free Software Foundation. +.\" +.\" 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +.\" +.TH rpasswd 1 "January 2004" "pwdutils" +.SH NAME +rpasswd \- change user password on remote server +.SH SYNOPSIS +.TP 5 +\fBrpasswd\fR [\fB-4\fR|\fB-6\fR] [\fB-a\fR] [\fB-f \fIconfig-file\fR] [\fB-h \fIhostname\fR] [\fB-v\fR] [\fB-p \fIport\fR] [\fB--reqcert \fIlevel\fR] [\fB--no-slp\fR] [\fBname\fR] +.SH DESCRIPTION +\fBrpasswd\fR changes passwords for user accounts on a remote server over +a secure SSL connection. A normal user may only change the password for +their own account, if the user knows the password of the administrator +account (in the moment this is the root password on the server), he +may change the password for any account if he calls \fBrpasswd\fR with +the \fB-a\fR option. +.SH OPTIONS +.TP +.B "\-a, \-\-admin" +With this option, \fBrpasswd\fR connects as administrator user to the +remote server. The user has to supply the administrator password +and can change then every password. +.TP +.BI "\-f, \-\-config-file" " config-file" +Specify another configuration file than \fI/etc/rpasswd.conf\fR. +.TP +.BI "\-h, \-\-hostname" " hostname" +Specify the name of the server, where +.BR rpasswdd (8) +is running. +.TP +.BI "\-p, \-\-port" " portnumber" +Specify the portnumber on which the server process +.BR rpasswdd (8) +is listening. +.TP +.BI "\-r, \-\-reqcert" " never|allow|try|hard" +.RS +Specifies what checks to perform on server certificates in +a SSL session. The default for this option is +.IR hard . +.TP +.B never +\fIrpasswd\fR will not request or check any server certificate. +.TP +.B allow +The server certificate is requested. If no certificate is provided, +the session proceeds normally. If a bad certificate is provided, a +warning will be shown but the session proceeds normally. +.TP +.B try +The server certificate is requested. If no certificate is provided, +the session proceeds normally. If a bad certificate is provided, +the session is immediately terminated. +.TP +.B hard +The server certificate is requested. If no or a bad certificate is +provided, the session is immediately terminated. +.RE +.TP +.B "-4" +\fBrpasswd\fR will only use IPv4 to connect to the server. +.TP +.B "-6" +\fBrpasswd\fR will only use IPv6 to connect to the server. +.TP +.B "\-\-no-slp" +If compiled with SLP support, \fBrpasswd\fR will not use SLP +to find a server. +.TP +.B "\-v, \-\-verbose" +Be verbose, print SSL connection data. +.SH FILES +/etc/rpasswd.conf \- configuration file +.SH SEE ALSO +.BR passwd (1), +.BR passwd (5), +.BR rpasswd.conf (5), +.BR rpasswdd (8) +.SH AUTHOR +Thorsten Kukuk diff --git a/src/rpasswd.c b/src/rpasswd.c new file mode 100644 index 0000000..ffe92ac --- /dev/null +++ b/src/rpasswd.c @@ -0,0 +1,611 @@ +/* Copyright (C) 2002-2006, 2009, 2010 Thorsten Kukuk + Author: Thorsten Kukuk + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License version 2 as + published by the Free Software Foundation. + + 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include + +#ifdef USE_GNUTLS +#include +#else +#include +#include +#include +#include +#include +#endif + +#include "i18n.h" +#include "dbg_log.h" +#include "rpasswd-client.h" +#include "error_codes.h" + +/* Define verbose output of rpasswd-client functions. */ +#define DO_VERBOSE_OUTPUT +#define HANDLE +#define PRINTF fprintf +#define ERR_HANDLE stderr +#define STD_HANDLE stdout +#define SELECT_SRVURL 1 + +#include "rpasswd-client.c" + +/* Print the version information. */ +static void +print_version (const char *program) +{ + fprintf (stdout, "%s (%s) %s\n", program, PACKAGE, VERSION); + fprintf (stdout, _("\ +Copyright (C) %s Thorsten Kukuk.\n\ +This is free software; see the source for copying conditions. There is NO\n\ +warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n\ +"), "2006"); + /* fprintf (stdout, _("Written by %s.\n"), "Thorsten Kukuk"); */ +} + +static void +print_usage (FILE * stream, const char *program) +{ + fprintf (stream, + _("Usage: %s [-4|-6][-a][-f config-file][-h hostname][-p port][-v][name]\n"), + program); +} + +static void +print_help (const char *program) +{ + print_usage (stdout, program); + fprintf (stdout, _("%s - change password information\n\n"), program); + + fputs (_(" -4 Use IPv4 only\n"), stdout); + fputs (_(" -6 Use IPv6 only\n"), stdout); + fputs (_ + (" -a Admin mode, special admin password is required\n"), + stdout); + fputs (_(" -f config-file Specify a different config file\n"), stdout); + fputs (_(" -h hostname Specify the remote server\n"), stdout); + fputs (_(" -p port Specify port remote server is listening on\n"), + stdout); + fputs (_(" -r level Specify level of SSL certificate checks\n"), + stdout); +#ifdef USE_SLP + fputs (_(" --no-slp Don't use SLP to find a server\n"), stdout); +#endif + fputs (_(" -v, --verbose Be verbose, print SSL connection data\n"), + stdout); + fputs (_(" --help Give this help list\n"), stdout); + fputs (_(" --usage Give a short usage message\n"), stdout); + fputs (_(" --version Print program version\n"), stdout); +} + +static void +print_error (const char *program) +{ + fprintf (stderr, + _("Try `%s --help' or `%s --usage' for more information.\n"), + program, program); +} + +/* Read a line of input string, giving prompt when appropriate. */ +static int +read_string (int echo, const char *prompt, char **retstr) +{ + struct termios term_before, term_tmp; + char line[PAM_MAX_MSG_SIZE]; + int nc = -1, have_term = 0; + + D (("called with echo='%s', prompt='%s'.", echo ? "ON" : "OFF", prompt)); + + if (isatty (STDIN_FILENO)) + { /* terminal state */ + /* is a terminal so record settings and flush it */ + if (tcgetattr (STDIN_FILENO, &term_before) != 0) + { + fprintf (stderr, ("Error: failed to get terminal settings\n")); + *retstr = NULL; + return -1; + } + memcpy (&term_tmp, &term_before, sizeof (term_tmp)); + if (!echo) + term_tmp.c_lflag &= ~(ECHO); + + have_term = 1; + } + else if (!echo) + fprintf (stderr, _("Warning: cannot turn echo off\n")); + + /* reading the line */ + fprintf (stderr, "%s", prompt); + /* this may, or may not set echo off -- drop pending input */ + if (have_term) + (void) tcsetattr (STDIN_FILENO, TCSAFLUSH, &term_tmp); + + nc = read (STDIN_FILENO, line, PAM_MAX_MSG_SIZE - 1); + if (have_term) + { + (void) tcsetattr (STDIN_FILENO, TCSADRAIN, &term_before); + if (!echo) /* do we need a newline? */ + fprintf (stderr, "\n"); + } + + if (nc > 0) /* We got some user input. */ + { + if (line[nc - 1] == '\n') /* terminate */ + line[--nc] = '\0'; + else + line[nc] = '\0'; + + *retstr = strdup (line); /* return malloc()ed string */ + _pam_overwrite (line); + + return nc; + } + else if (nc == 0) /* Ctrl-D */ + { + D (("user did not want to type anything")); + fprintf (stderr, "\n"); + } + + /* getting here implies that there was an error or Ctrl-D pressed. */ + if (have_term) + (void) tcsetattr (STDIN_FILENO, TCSADRAIN, &term_before); + + memset (line, 0, PAM_MAX_MSG_SIZE); /* clean up */ + *retstr = NULL; + return nc; +} + +#define CONV_ECHO_ON 1 /* types of echo state */ +#define CONV_ECHO_OFF 0 + +#ifdef USE_GNUTLS +static int +handle_responses (gnutls_session ssl) +{ + response_header resp; + char retval = E_SUCCESS; + char *buf; + + do + { + int ret; + + if ((ret = gnutls_record_recv (ssl, &resp, sizeof (resp))) <= 0) + { + if (ret == 0) + fprintf (stderr, _("error while reading request: %s"), + _("Peer has closed the TLS connection")); + else + fprintf (stderr, _("error while reading request: %s"), + gnutls_strerror (ret)); + fputs ("\n", stderr); + return E_FAILURE; + } + + buf = alloca (resp.data_len); + if ((ret = gnutls_record_recv (ssl, buf, resp.data_len)) <= 0) + { + fprintf (stderr, _("error while reading request data: %s"), + gnutls_strerror (ret)); + fputs ("\n", stderr); + return E_FAILURE; + } + + switch (resp.type) + { + case TEXT_INFO: + printf ("%s\n", buf); + break; + case ERROR_MSG: + fprintf (stderr, "%s\n", buf); + break; + case PROMPT_ECHO_OFF: + { + char *string = NULL; + int nc = read_string (CONV_ECHO_OFF, buf, &string); + if (nc < 0) + retval = send_string (ssl, PAM_CONV_ERR, string); + else + retval = send_string (ssl, PAM_SUCCESS, string); + } + break; + case PROMPT_ECHO_ON: + { + char *string = NULL; + int nc = read_string (CONV_ECHO_ON, buf, &string); + if (nc < 0) + retval = send_string (ssl, PAM_CONV_ERR, string); + else + retval = send_string (ssl, PAM_SUCCESS, string); + } + break; + case FINISH: + retval = buf[0]; + break; + default: + break; + } + + if ((resp.type == PROMPT_ECHO_ON || resp.type == PROMPT_ECHO_OFF) && + retval != 0) + { + char err_buf[256]; + + fprintf (stderr, _("Cannot send input back to server: %s\n"), + strerror_r (errno, err_buf, sizeof (err_buf))); + return E_FAILURE; + } + } + while (resp.type != FINISH); + + return retval; +} + +#else + +static int +handle_responses (SSL *ssl) +{ + response_header resp; + char retval = E_SUCCESS; + char *buf; + + do + { + errno = 0; + if (TEMP_FAILURE_RETRY (SSL_read (ssl, &resp, sizeof (resp))) + != sizeof (resp)) + { + char err_buf[256]; + + if (errno == 0) + fprintf (stderr, _("error while reading request: %s"), + _("wrong data received")); + else + fprintf (stderr, _("error while reading request: %s"), + strerror_r (errno, err_buf, sizeof (err_buf))); + fputs ("\n", stderr); + return E_FAILURE; + } + + buf = alloca (resp.data_len); + if (TEMP_FAILURE_RETRY (SSL_read (ssl, buf, resp.data_len)) + != resp.data_len) + { + char err_buf[256]; + + fprintf (stderr, _("error while reading request data: %s"), + strerror_r (errno, err_buf, sizeof (err_buf))); + fputs ("\n", stderr); + return E_FAILURE; + } + + switch (resp.type) + { + case TEXT_INFO: + printf ("%s\n", buf); + break; + case ERROR_MSG: + fprintf (stderr, "%s\n", buf); + break; + case PROMPT_ECHO_OFF: + { + char *string = NULL; + int nc = read_string (CONV_ECHO_OFF, buf, &string); + if (nc < 0) + retval = send_string (ssl, PAM_CONV_ERR, string); + else + retval = send_string (ssl, PAM_SUCCESS, string); + } + break; + case PROMPT_ECHO_ON: + { + char *string = NULL; + int nc = read_string (CONV_ECHO_ON, buf, &string); + if (nc < 0) + retval = send_string (ssl, PAM_CONV_ERR, string); + else + retval = send_string (ssl, PAM_SUCCESS, string); + } + break; + case FINISH: + retval = buf[0]; + break; + default: + break; + } + + if ((resp.type == PROMPT_ECHO_ON || resp.type == PROMPT_ECHO_OFF) && + retval != 0) + { + char err_buf[256]; + + fprintf (stderr, _("Cannot send input back to server: %s\n"), + strerror_r (errno, err_buf, sizeof (err_buf))); + return E_FAILURE; + } + } + while (resp.type != FINISH); + + return retval; +} +#endif + +int +main (int argc, char **argv) +{ + const char *config_file = _PATH_RPASSWDCONF; + const char *program = "rpasswd"; + char *hostp = NULL, *portp = NULL; + int sock = -1, ai_family = PF_UNSPEC; +#ifdef USE_SLP + int use_slp = 1; +#endif + int verbose = 0; + int admin_mode = 0; + int reqcert = 3; + int retval; + char *username; +#ifdef USE_GNUTLS + gnutls_session session; + gnutls_certificate_credentials xcred; +#else + SSL_CTX *ctx; + SSL *ssl; +#endif + +#ifdef ENABLE_NLS + /* Set locale via LC_ALL. */ + setlocale (LC_ALL, ""); + /* Set the text message domain. */ + textdomain (PACKAGE); +#endif + + /* Ignore all signals which can make trouble later. */ + signal (SIGXFSZ, SIG_IGN); + signal (SIGPIPE, SIG_IGN); + + /* Parse program arguments */ + while (1) + { + int c; + int option_index = 0; + static struct option long_options[] = { + {"admin", no_argument, NULL, 'a'}, + {"config-file", required_argument, NULL, 'f'}, + {"host", required_argument, NULL, 'h'}, + {"ipv4", no_argument, NULL, '4'}, + {"ipv6", no_argument, NULL, '6'}, + {"port", no_argument, NULL, 'p'}, + {"verbose", no_argument, NULL, 'v'}, + {"reqcert", required_argument, NULL, 'r'}, +#ifdef USE_SLP + {"no-slp", no_argument, NULL, '\252'}, +#endif + {"version", no_argument, NULL, '\255'}, + {"usage", no_argument, NULL, '\254'}, + {"help", no_argument, NULL, '\253'}, + {NULL, 0, NULL, '\0'} + }; + + c = getopt_long (argc, argv, "af:h:p:r:v46", + long_options, &option_index); + if (c == EOF) + break; + switch (c) + { + case 'a': + admin_mode = 1; + break; + case 'f': + config_file = optarg; + break; + case 'h': + hostp = optarg; + break; + case '4': + if (ai_family == PF_INET || ai_family == PF_INET6) + { + print_usage (stderr, program); + return E_USAGE; + } + ai_family = PF_INET; + break; + case '6': + if (ai_family == PF_INET || ai_family == PF_INET6) + { + print_usage (stderr, program); + return E_USAGE; + } + ai_family = PF_INET6; + break; + case 'p': + portp = optarg; + break; + case 'r': + reqcert = parse_reqcert (optarg); + break; + case 'v': + verbose++; + break; +#ifdef USE_SLP + case '\252': + use_slp = 0; + break; +#endif + case '\253': + print_help (program); + return 0; + case '\255': + print_version (program); + return 0; + case '\254': + print_usage (stdout, program); + return E_USAGE; + default: + print_error (program); + return E_BAD_ARG; + } + } + + argc -= optind; + argv += optind; + + if (argc > 1) + { + fprintf (stderr, _("%s: Too many arguments.\n"), program); + print_error (program); + return E_USAGE; + } + + if (hostp) + { + if (portp) + load_config (config_file, NULL, NULL, &reqcert, verbose, 0); + else + load_config (config_file, NULL, &portp, &reqcert, verbose, 0); + } + else if (portp) + load_config (config_file, &hostp, NULL, &reqcert, verbose, 0); + else + load_config (config_file, &hostp, &portp, &reqcert, verbose, 0); + +#ifdef USE_SLP + if (hostp == NULL && portp == NULL && use_slp == 1) + { + char *descr; + + query_slp (&hostp, &portp, &descr); + if (hostp != NULL && portp != NULL) + printf (_("SLP: Found Server on %s, port %s"), + hostp, portp); + else if (hostp != NULL) + printf (_("SLP: Found Server on %s"), hostp); + + if (descr) + { + printf (" (%s)\n", descr); + free (descr); + } + else + fputs ("\n", stdout); + } +#endif + + if (portp == NULL) + portp = "rpasswd"; + + /* Get the login name of the calling user. This could be the one + argument we still have or we use getpwuid/getuid to determine + the login name. */ + if (argc == 1) + username = strdup (argv[0]); + else + { + int pw_buflen = 256; + char *pw_buffer = alloca (pw_buflen); + struct passwd pw_resultbuf; + struct passwd *pw = NULL; + + while (getpwuid_r (getuid (), &pw_resultbuf, pw_buffer, pw_buflen, + &pw) != 0 && errno == ERANGE) + { + errno = 0; + pw_buflen += 256; + pw_buffer = alloca (pw_buflen); + } + if (pw == NULL) + { + fprintf (stderr, _("Go away, you do not exist!")); + return E_UNKNOWN_USER; + } + username = strdup (pw->pw_name); + } + + if (hostp != NULL) + { + sock = connect_to_server (hostp, portp, ai_family, 0); + if (sock < 0) + return E_FAILURE; + } + else + { + fprintf (stderr, _("No server specified\n")); + return E_USAGE; + } + + /* Do SSL */ +#ifdef USE_GNUTLS + gnutls_global_init (); + /* Initialize TLS session. */ + gnutls_init (&session, GNUTLS_CLIENT); + retval = start_ssl (sock, reqcert, verbose, session, &xcred); +#else + retval = start_ssl (sock, reqcert, verbose, &ctx, &ssl); +#endif + if (retval != 0) + return retval; + +#ifdef USE_GNUTLS + if ((retval = start_request (session, username, admin_mode)) == 0) + retval = handle_responses (session); + else + retval = E_FAILURE; +#else + if ((retval = start_request (ssl, username, admin_mode)) == 0) + retval = handle_responses (ssl); + else + retval = E_FAILURE; +#endif + + free (username); + +#ifdef USE_GNUTLS + gnutls_bye (session, GNUTLS_SHUT_RDWR); + close (sock); + gnutls_deinit (session); + gnutls_certificate_free_credentials (xcred); + gnutls_global_deinit (); +#else + close (sock); + SSL_free (ssl); + SSL_CTX_free (ctx); +#endif + + return retval; +} diff --git a/src/rpasswd.conf.5 b/src/rpasswd.conf.5 new file mode 100644 index 0000000..a234430 --- /dev/null +++ b/src/rpasswd.conf.5 @@ -0,0 +1,93 @@ +.\" -*- nroff -*- +.\" Copyright (C) 2002, 2003 Thorsten Kukuk +.\" Author: Thorsten Kukuk +.\" +.\" This program is free software; you can redistribute it and/or modify +.\" it under the terms of the GNU General Public License version 2 as +.\" published by the Free Software Foundation. +.\" +.\" 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +.\" +.TH rpasswd.conf 5 "January 2003" "pwdutils" +.SH NAME +/etc/rpasswd.conf \- configuration file for remote password update client +.SH DESCRIPTION +The file +\fI/etc/rpasswd.conf\fR is read from +.BR rpasswd (1) +at startup to determine the name and port number of the server where +.BR rpasswdd (8) +is running. +Valid entries are +.PP +.B server +.I hostname +.RS +The +.BR rpasswdd (8) +daemon is running on server \fIhostname\fR. +.RE +.PP +.B port +.I number +.RS +The +.BR rpasswdd (8) +daemon is listening on port \fInumber\fR. The default port number +is \fI774\fR, which is defined as \fIrpasswd\fR in \fI/etc/services\fR. +.RE +.PP +.B reqcert +.I never|allow|try|hard +.RS +Specifies what checks to perform on server certificates in +a SSL session. The default for this option is +.IR hard . +.TP +.B never +\fIrpasswd\fR will not request or check any server certificate. +.TP +.B allow +The server certificate is requested. If no certificate is provided, +the session proceeds normally. If a bad certificate is provided, a +warning will be shown but the session proceeds normally. +.TP +.B try +The server certificate is requested. If no certificate is provided, +the session proceeds normally. If a bad certificate is provided, +the session is immediately terminated. +.TP +.B hard +The server certificate is requested. If no or a bad certificate is +provided, the session is immediately terminated. +.RE +.PP +.SH EXAMPLE +.RS +# rpasswdd runs on master.example.com +.br +server master.example.com +.br +port 774 +.br +reqcert allow +.RE +.SH BUGS +The service \fIrpasswd\fR on port \fI774\fR in \fI/etc/services\fR +is not registerd for this program, only misused. It could be that +there is another daemon already running on this port, but I couldn't +find any software using this port. +.SH SEE ALSO +.BR rpasswd (1), +.BR passwd (5), +.BR rpasswdd (8), +.BR services (5) +.SH AUTHOR +Thorsten Kukuk diff --git a/src/rpasswdd.8 b/src/rpasswdd.8 new file mode 100644 index 0000000..1c76294 --- /dev/null +++ b/src/rpasswdd.8 @@ -0,0 +1,72 @@ +.\" -*- nroff -*- +.\" Copyright (C) 2002, 2004 Thorsten Kukuk +.\" Author: Thorsten Kukuk +.\" +.\" This program is free software; you can redistribute it and/or modify +.\" it under the terms of the GNU General Public License version 2 as +.\" published by the Free Software Foundation. +.\" +.\" 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +.\" +.TH rpasswdd 8 "January 2004" "pwdutils" +.SH NAME +rpasswdd \- remote password update daemon +.SH SYNOPSIS +.TP 5 +\fBrpasswdd\fR [\fB-4\fR|\fB-6\fR] [\fB-d\fR] [\fB-c \fIcertificate\fR] [\fB-k \fIprivatekey\fR] [\fB-p \fIport\fR] [\fB--slp\fR] [\fB--slp-timeout \fItimeout\fR] [\fB--slp-descr \fIdescription\fR] +.SH DESCRIPTION +\fBrpasswdd\fR is a daemon that lets users change their passwords in the +presence of a directory service like NIS, NIS+ or LDAP over a secure SSL +connection. \fBrpasswdd\fR behaves like the normal +.BR passwd (1) +program and uses PAM for authentification and changing the password, so +it can be configured very flexibel for the local requirements. +.PP +A normal user may only change the password for their own account, if the +user knows the password of the administrator account (in the moment this +is the root password on the server), he may change the password for any +account if he calls \fBrpasswd\fR with the \fB-a\fR option. +.SH OPTIONS +.TP +.B "\-d, \-\-debug" +Causes the server to run in debugging mode. Normally, \fBrpasswdd\fR +reports only errors using the syslog(3) facility. In debug mode, the +server does not background itself and prints extra status messages to +stderr for each request that it revceives. +.TP +.BI "\-c, \-\-certificate" " certificate" +Specify another file which contains the certificate than +\fI/etc/rpasswdd.pem\fR. +.TP +.BI "\-k, \-\-privatekey" " privatekey" +Specify another file which contains the private key than +\fI/etc/rpasswdd.pem\fR. +.TP +.BI "\-p, \-\-port" " port number" +Specify another port where the daemon will listen on for requests. +.TP +.B "-4" +\fBrpasswdd\fR will only accept IPv4 connections. +.TP +.B "-6" +\fBrpasswd\fR will accept IPv4 and IPv6 connections. +.TP +.B "\-\-slp" +Register rpasswd service at local SLP server. +.SH FILES +/etc/pam.d/rpasswd \- the PAM configuration file +.br +/etc/rpasswdd.pem \- contains the certificate and private key +.SH SEE ALSO +.BR passwd (1), +.BR passwd (5), +.BR rpasswd (1) +.SH AUTHOR +Thorsten Kukuk diff --git a/src/rpasswdd.c b/src/rpasswdd.c new file mode 100644 index 0000000..88b4efa --- /dev/null +++ b/src/rpasswdd.c @@ -0,0 +1,1464 @@ +/* Copyright (C) 2002-2006, 2008, 2009 Thorsten Kukuk + Author: Thorsten Kukuk + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License version 2 as + published by the Free Software Foundation. + + 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#ifdef USE_GNUTLS +#include +#else +#include /* SSLeay stuff */ +#include +#include +#include +#include +#include +#endif + +#include +#include + +#include "i18n.h" +#include "dbg_log.h" +#include "use_slp.h" +#include "logindefs.h" +#include "error_codes.h" +#include "rpasswd-client.h" + +#if !defined(IPV6_V6ONLY) && defined(__linux__) +#define IPV6_V6ONLY 26 +#endif + +/* Path of the file where the PID of the running system is stored. */ +#define _PATH_RPASSWDDPID "/var/run/rpasswdd.pid" + +extern int setresuid(uid_t ruid, uid_t euid, uid_t suid); + +/* XXX This variable should not be global. */ +#ifdef USE_GNUTLS +/* XXX */ +#else +static SSL_CTX *ctx; +#endif +/* Socket for incoming connections. */ +static struct pollfd pollfd_conn[10]; +static int pollfd_cnt = 0; +#ifdef USE_SLP +/* register/deregister at SLP server. */ +static int use_slp = 0; +#endif + +/* Print the version information. */ +static void +print_version (const char *program) +{ + fprintf (stdout, "%s (%s) %s\n", program, PACKAGE, VERSION); + fprintf (stdout, _("\ +Copyright (C) %s Thorsten Kukuk.\n\ +This is free software; see the source for copying conditions. There is NO\n\ +warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n\ +"), "2006"); + /* fprintf (stdout, _("Written by %s.\n"), "Thorsten Kukuk"); */ +} + +static void +print_usage (FILE *stream, const char *program) +{ +#ifdef USE_SLP + fprintf (stream, _("Usage: %s [-4] [-6] [-d] [-c certificate] [-k privatekey] [-p port]\n [--slp [--slp-timeout timeout] [--slp-descr description]]\n"), + program); +#else + fprintf (stream, _("Usage: %s [-4] [-6] [-d] [-c certificate] [-k privatekey] [-p port]\n"), + program); +#endif +} + +static void +print_help (const char *program) +{ + print_usage (stdout, program); + fprintf (stdout, _("%s - change password information\n\n"), program); + + fputs (_(" -4 Use IPv4\n"), stdout); + fputs (_(" -6 Use IPv6\n"), stdout); + fputs (_(" -c certificate Specify alternate certificate file\n"), stdout); + fputs (_(" -k privatekey Specify alternate file with private key\n"), + stdout); + fputs (_(" -d Run in debug mode\n"), stdout); + fputs (_(" -p port Port on which the server should listen\n"), + stdout); +#ifdef USE_SLP + fputs (_(" --slp Register at local SLP server\n"), stdout); + fputs (_(" --slp-timeout Set timeout for re-registration\n"), stdout); + fputs (_(" --slp-descr Set a description shown to SLP clients\n"), + stdout); +#endif + fputs (_(" --help Give this help list\n"), stdout); + fputs (_(" --usage Give a short usage message\n"), stdout); + fputs (_(" --version Print program version\n"), stdout); +} + +static void +print_error (const char *program) +{ + fprintf (stderr, + _("Try `%s --help' or `%s --usage' for more information.\n"), + program, program); +} + +/* Returns 1 if the process in pid file FILE is running, 0 if not. */ +static int +check_pid (const char *file) +{ + FILE *fp; + + fp = fopen (file, "r"); + if (fp) + { + pid_t pid; + int n; + + n = fscanf (fp, "%d", &pid); + fclose (fp); + + if (n != 1 || kill (pid, 0) == 0) + return 1; + } + + return 0; +} + +/* Write the current process id to the pid file. + Returns 0 if successful, -1 if not. */ +static int +write_pid (const char *file) +{ + FILE *fp; + + fp = fopen (file, "w"); + if (fp == NULL) + return -1; + + fprintf (fp, "%d\n", getpid ()); + if (fflush (fp) || ferror (fp)) + return -1; + + fclose (fp); + + return 0; +} + +/************************************************************************ +************************************************************************* +*** *** +*** Here is now the connection handling part *** +*** *** +************************************************************************* +************************************************************************/ + +/* Initialize database information structures. */ +static void +server_init (int port, int ipv4, int ipv6) +{ + int have_usagi = 1; /* Assume we have a USAGI patched kernel. */ + + /* The Linux kernel without USAGI patch will handle IPv4 connections + over an existing IPv6 binding. So we cannot bind explicit a IPv6 + and a IPv4 socket. We use only a IPv6 socket in this case. */ + + if (ipv6) + { + struct sockaddr_in6 sock_addr; + int on = 1; + + /* Create the socket. */ + pollfd_conn[pollfd_cnt].fd = socket (AF_INET6, SOCK_STREAM, 0); + if (pollfd_conn[pollfd_cnt].fd < 0) + { + dbg_log ("cannot open socket: %s", strerror (errno)); + exit (1); + } + +#ifdef IPV6_V6ONLY + /* we try to bind to IPv6 only and to bind a second socket + for IPv4. If the IPV6_V6ONLY option failed, we assume IPv6 + will also handle IPv4 addresses. */ + + if (setsockopt (pollfd_conn[pollfd_cnt].fd, IPPROTO_IPV6, IPV6_V6ONLY, + (char *)&on, sizeof (on)) <0) + { + if (errno != ENOPROTOOPT) + dbg_log ("setsockopt (IPPROTO_IPV6, IPV6_V6ONLY): %m"); + have_usagi = 0; + } +#endif + + memset (&sock_addr, '\0', sizeof (sock_addr)); + sock_addr.sin6_family = AF_INET6; + sock_addr.sin6_addr = in6addr_any; + sock_addr.sin6_port = port; + + if (bind (pollfd_conn[pollfd_cnt].fd, (struct sockaddr *) &sock_addr, + sizeof (sock_addr)) < 0) + { + dbg_log ("bind: %s", strerror (errno)); + exit (1); + } + + /* Set the socket up to accept connections. */ + if (listen (pollfd_conn[pollfd_cnt].fd, SOMAXCONN) < 0) + { + dbg_log ("cannot enable socket to accept connections: %s", + strerror (errno)); + exit (1); + } + ++pollfd_cnt; + } + + if (ipv4 && (!ipv6 || have_usagi)) + { + struct sockaddr_in sock_addr; + + /* Create the socket. */ + pollfd_conn[pollfd_cnt].fd = socket (AF_INET, SOCK_STREAM, 0); + if (pollfd_conn[pollfd_cnt].fd < 0) + { + dbg_log ("cannot open socket: %s", strerror (errno)); + exit (1); + } + + memset (&sock_addr, '\0', sizeof (sock_addr)); + sock_addr.sin_family = AF_INET; + sock_addr.sin_addr.s_addr = INADDR_ANY; + sock_addr.sin_port = port; + + if (bind (pollfd_conn[pollfd_cnt].fd, (struct sockaddr *) &sock_addr, + sizeof (sock_addr)) < 0) + { + dbg_log ("bind: %s", strerror (errno)); + exit (1); + } + + /* Set the socket up to accept connections. */ + if (listen (pollfd_conn[pollfd_cnt].fd, SOMAXCONN) < 0) + { + dbg_log ("cannot enable socket to accept connections: %s", + strerror (errno)); + exit (1); + } + ++pollfd_cnt; + } +} + +/* Close the connections. */ +static void +close_sockets (void) +{ + int i; + + for (i = 0; i < pollfd_cnt; i++) + if (pollfd_conn[i].fd >= 0) + close (pollfd_conn[i].fd); +} + +#ifdef USE_GNUTLS +static int +send_string (gnutls_session ssl, response_type type, const char *str) +{ + response_header resp; + ssize_t err_code; + + resp.type = type; + resp.data_len = strlen (str) + 1; + if ((err_code = gnutls_record_send (ssl, &resp, sizeof (resp))) <= 0) + { + dbg_log ("%s:%d gnutls_record_send failed: %s", + __FILE__, __LINE__, gnutls_strerror (err_code)); + return -1; + } + if ((err_code = gnutls_record_send (ssl, str, resp.data_len)) <= 0) + { + dbg_log ("%s:%d gnutls_record_send failed: %s", __FILE__, __LINE__, + gnutls_strerror (err_code)); + return -1; + } + + return 0; +} + + +static ssize_t +safe_read (gnutls_session ssl, void *data, size_t count, int timeout) +{ + struct pollfd conn; + void *sock; + + sock = gnutls_transport_get_ptr (ssl); + conn.fd = (long) sock; + conn.events = POLLRDNORM; + + errno = 0; + + while (1) + { + int nr = poll (&conn, 1, timeout * 1000); + + if (nr < 0) + { + /* Don't print error messages if poll is only interupted + by a signal. */ + if (errno != EINTR) + dbg_log ("poll() failed: %s", strerror (errno)); + continue; + } + else if (nr == 0) + { + /* XXX TIMEOUT */ + errno = ETIME; + return -1; + } + else + break; + } + + /* We have new incoming data. */ + if (conn.revents & (POLLRDNORM|POLLERR|POLLHUP|POLLNVAL)) + { + if (gnutls_record_recv (ssl, data, count) <= 0) + return -1; + else + return count; + } + else + { + /* I don't know if this can ever happen. */ + errno = EAGAIN; + return -1; + } +} + +#else + +static int +send_string (SSL *ssl, response_type type, const char *str) +{ + response_header resp; + + resp.type = type; + resp.data_len = strlen (str) + 1; + if (TEMP_FAILURE_RETRY(SSL_write (ssl, &resp, sizeof (resp))) + != sizeof (resp)) + return -1; + if (TEMP_FAILURE_RETRY(SSL_write (ssl, str, resp.data_len)) + != resp.data_len) + return -1; + + return 0; +} + +static ssize_t +safe_read (SSL *ssl, void *data, size_t count, int timeout) +{ + struct pollfd conn; + + conn.fd = SSL_get_fd (ssl); + conn.events = POLLRDNORM; + + errno = 0; + + while (1) + { + int nr = poll (&conn, 1, timeout * 1000); + + if (nr < 0) + { + /* Don't print error messages if poll is only interupted + by a signal. */ + if (errno != EINTR) + dbg_log ("poll() failed: %s", strerror (errno)); + continue; + } + else if (nr == 0) + { + /* XXX TIMEOUT */ + errno = ETIME; + return -1; + } + else + break; + } + + /* We have new incoming data. */ + if (conn.revents & (POLLRDNORM|POLLERR|POLLHUP|POLLNVAL)) + return TEMP_FAILURE_RETRY (SSL_read (ssl, data, count)); + else + { + /* I don't know if this can ever happen. */ + errno = EAGAIN; + return -1; + } +} +#endif + +static int +#ifdef USE_GNUTLS +read_string (gnutls_session ssl, char **retstr) +#else +read_string (SSL *ssl, char **retstr) +#endif +{ + conv_header resp; + *retstr = NULL; + + errno = 0; + if (safe_read (ssl, &resp, sizeof (resp), 120) != sizeof (resp)) + { + char err_buf[256]; + + if (errno == 0) + dbg_log ("error while reading request: %s", + "wrong data received"); + else + dbg_log ("error while reading request: %s", + strerror_r (errno, err_buf, sizeof (err_buf))); + return PAM_CONV_ERR; + } + + /* 1024 bytes data should be enough. Don't allow more to avoid + DOS attacks. */ + if (resp.data_len > 0 && resp.data_len <= 1024) + { + char *buf = alloca (resp.data_len + 1); + + if (safe_read (ssl, buf, resp.data_len, 120) != resp.data_len) + { + char err_buf[256]; + + if (errno == 0) + dbg_log ("error while reading request data: %s", + "wrong data received"); + else + dbg_log ("error while reading request data: %s", + strerror_r (errno, err_buf, sizeof (err_buf))); + return PAM_CONV_ERR; + } + buf[resp.data_len] = '\0'; + *retstr = strdup (buf); + } + else + return PAM_CONV_ERR; + + return resp.retval; +} + +static int +rpasswd_conv(int num_msg, const struct pam_message **msgm, + struct pam_response **response, void *appdata_ptr) +{ + int count=0; + struct pam_response *reply; +#ifdef USE_GNUTLS + gnutls_session ssl = appdata_ptr; +#else + SSL *ssl = appdata_ptr; +#endif + + if (num_msg <= 0) + return PAM_CONV_ERR; + + D(("allocating empty response structure array.")); + + reply = (struct pam_response *) calloc(num_msg, + sizeof(struct pam_response)); + if (reply == NULL) { + D(("no memory for responses")); + return PAM_CONV_ERR; + } + + D(("entering conversation function.")); + + for (count = 0; count < num_msg; ++count) + { + char *string = NULL; + + switch (msgm[count]->msg_style) + { + case PAM_PROMPT_ECHO_OFF: + D(("PAM_PROMPT_ECHO_OFF")); + if (send_string (ssl, PROMPT_ECHO_OFF, msgm[count]->msg) != 0) + goto failed_conversation; + if (read_string (ssl, &string) != PAM_SUCCESS) + goto failed_conversation; + break; + case PAM_PROMPT_ECHO_ON: + D(("PAM_PROMPT_ECHO_ON")); + if (send_string (ssl, PROMPT_ECHO_OFF, msgm[count]->msg) != 0) + goto failed_conversation; + if (read_string (ssl, &string) != PAM_SUCCESS) + goto failed_conversation; + break; + case PAM_ERROR_MSG: + D(("PAM_ERROR_MSG")); + if (send_string (ssl, ERROR_MSG, msgm[count]->msg) != 0) + goto failed_conversation; + break; + case PAM_TEXT_INFO: + D(("PAM_TEXT_INFO")); + if (send_string (ssl, TEXT_INFO, msgm[count]->msg) != 0) + goto failed_conversation; + break; + default: + /* send_string (ssl, TEXT_INFO, _("erroneous conversation (%d)") + ,msgm[count]->msg_style); */ + goto failed_conversation; + } + + if (string) { /* must add to reply array */ + /* add string to list of responses */ + + reply[count].resp_retcode = 0; + reply[count].resp = string; + string = NULL; + } + } + + /* New (0.59+) behavior is to always have a reply - this is + compatable with the X/Open (March 1997) spec. */ + *response = reply; + reply = NULL; + + return PAM_SUCCESS; + +failed_conversation: + + if (reply) { + for (count=0; countmsg_style) { + case PAM_PROMPT_ECHO_ON: + case PAM_PROMPT_ECHO_OFF: + _pam_overwrite(reply[count].resp); + free(reply[count].resp); + break; + case PAM_ERROR_MSG: + case PAM_TEXT_INFO: + /* should not actually be able to get here... */ + free(reply[count].resp); + } + reply[count].resp = NULL; + } + /* forget reply too */ + free(reply); + reply = NULL; + } + + return PAM_CONV_ERR; +} + +/* Sanity check on locale string. + Otherwise local lusers may be tempted to send us + a locale of "../../../../../tmp" and deposit a + message catalog there containing format strings with + lots of %n's in them. */ +static int +sane_locale (const char *name) +{ + if (!name) + return 0; + if (strchr (name, '/')) + return 0; + if (strstr (name, "..")) + return 0; + /* Any other checks? */ + return 1; +} + +/* Handle new request. */ +static int +#ifdef USE_GNUTLS +handle_request (gnutls_session ssl, request_header *req, char *locale, + const char *username, const char * program) +#else +handle_request (SSL *ssl, request_header *req, char *locale, + const char *username, const char *program) +#endif +{ + const struct pam_conv conv = { + rpasswd_conv, + ssl + }; + pam_handle_t *pamh = NULL; + int flags = 0, ret; + int retval = E_SUCCESS; + int pw_buflen = 256; + char *pw_buffer = alloca (pw_buflen); + struct passwd pw_resultbuf; + struct passwd *pw = NULL; + + if (debug_level > 0) + dbg_log ("handle_request: request received (Version = %d)", + req->version); + + if (req->version != RPASSWD_VERSION) + { + if (debug_level > 0) + dbg_log ("cannot handle request version %d; current version is %d", + req->version, RPASSWD_VERSION); + retval = E_WRONG_VERSION; + goto send_finish; + } + +#ifdef ENABLE_NLS + if (locale && sane_locale(locale)) + setlocale (LC_ALL, locale); +#endif + + /* Get password file entry... */ + while (getpwnam_r (username, &pw_resultbuf, pw_buffer, pw_buflen, &pw) != 0 + && errno == ERANGE) + { + errno = 0; + pw_buflen += 256; + pw_buffer = alloca (pw_buflen); + } + if (pw == NULL && req->request != START_ADMIN) + { + dbg_log ("passwd entry for \"%s\" not found", username); + /* Dummy authentication. So the user will not see that this + account does not exist. */ + ret = pam_start ("rpasswd", username, &conv, &pamh); + if (ret != PAM_SUCCESS) + { + retval = E_PAM_ERROR; + goto send_finish; + } + /* We are not interested in the return value, we always assume + a failed. */ + pam_authenticate (pamh, flags); + pam_end (pamh, PAM_SUCCESS); + /* after using PAM we have to reset openlog data */ + openlog (program, LOG_CONS | LOG_ODELAY, LOG_DAEMON); + sleep (getlogindefs_num ("FAIL_DELAY", 1)); + send_string (ssl, ERROR_MSG, "Authentication failure"); + retval = E_FAILURE; + goto send_finish; + } + + /* Do extra authentication if run in admin mode or the passwort + for root should be changed. */ + if (req->request == START_ADMIN || (pw && pw->pw_uid == 0)) + { + const char *account; + + if (req->request == START_ADMIN) + account = "root"; + else + account = username; + + /* Do PAM authentification at first. */ + ret = pam_start ("rpasswd", account, &conv, &pamh); + if (ret != PAM_SUCCESS) + { + /* after using PAM we have to reset openlog data */ + openlog (program, LOG_CONS | LOG_ODELAY, LOG_DAEMON); + dbg_log ("Couldn't initialize PAM: %s", pam_strerror (pamh, ret)); + retval = E_PAM_ERROR; + goto send_finish; + } + else if (req->request == START_ADMIN) + { /* print the message only in admin mode. */ + char host[MAXHOSTNAMELEN+1]; + char *cp; + + gethostname (host, sizeof (host)); + if (asprintf (&cp, _("Please authenticate as %s on %s"), + account, host) < 0) + { + retval = E_FAILURE; + goto send_finish; + } + + send_string (ssl, TEXT_INFO, cp); + free (cp); + } + + ret = pam_authenticate (pamh, flags); + if (ret != PAM_SUCCESS) + { + pam_end (pamh, ret); + /* after using PAM we have to reset openlog data */ + openlog (program, LOG_CONS | LOG_ODELAY, LOG_DAEMON); + dbg_log ("User %s: %s", account, + pam_strerror (pamh, ret)); + sleep (getlogindefs_num ("FAIL_DELAY", 1)); + send_string (ssl, ERROR_MSG, pam_strerror (pamh, ret)); + retval = E_FAILURE; + goto send_finish; + } + pam_end (pamh, PAM_SUCCESS); + /* after using PAM we have to reset openlog data */ + openlog (program, LOG_CONS | LOG_ODELAY, LOG_DAEMON); + + if (req->request == START_ADMIN) + { /* In Admin mode send info text what we are now doing. */ + char *cp; + + if (pw == NULL) /* Now send error message for admin. */ + { + dbg_log ("passwd entry for \"%s\" not found", username); + retval = E_UNKNOWN_USER; + goto send_finish; + } + + if (asprintf (&cp, _("\nNow enter the new password for %s"), + username) < 0) + { + retval = E_FAILURE; + goto send_finish; + } + send_string (ssl, TEXT_INFO, cp); + free (cp); + } + } + else /* (req->request != START_ADMIN) */ + { + /* Set the real uid to the one of the user for which we wish to + change the password and let the effective and saved uid to be + root. With this, most PAM modules thinks they are called from + a setuid root passwd program. Not needed if we run in Admin mode. + In this case, PAM moduls should think passwd is called by root. */ + if (setresuid (pw->pw_uid, 0, 0) == -1) + { + char *cp; + + if (asprintf (&cp, _("setresuid failed on server: %s"), + strerror (errno)) > 0) + { + dbg_log (cp); + send_string (ssl, ERROR_MSG, cp); + free (cp); + } + retval = E_FAILURE; + goto send_finish; + } + } + + ret = pam_start ("rpasswd", username, &conv, &pamh); + if (ret != PAM_SUCCESS) + { + /* after using PAM we have to reset openlog data */ + openlog (program, LOG_CONS | LOG_ODELAY, LOG_DAEMON); + dbg_log ("Couldn't initialize PAM: %s", pam_strerror (pamh, ret)); + retval = E_PAM_ERROR; + goto send_finish; + } + + + ret = pam_chauthtok (pamh, flags); + if (ret != PAM_SUCCESS) + { + pam_end (pamh, ret); + /* after using PAM we have to reset openlog data */ + openlog (program, LOG_CONS | LOG_ODELAY, LOG_DAEMON); + dbg_log ("User %s: %s", username, + pam_strerror (pamh, ret)); + sleep (getlogindefs_num ("FAIL_DELAY", 1)); + send_string (ssl, ERROR_MSG, pam_strerror (pamh, ret)); + retval = E_FAILURE; + goto send_finish; + } + + pam_end (pamh, PAM_SUCCESS); + + /* after using PAM we have to reset openlog data */ + openlog (program, LOG_CONS | LOG_ODELAY, LOG_DAEMON); + + if (retval) + send_string (ssl, TEXT_INFO, _("Password not changed")); +#if 0 + else + send_string (ssl, TEXT_INFO, _("Password changed")); +#endif + + send_finish: + { + response_header resp; + + resp.type = FINISH; + resp.data_len = 1; +#ifdef USE_GNUTLS + gnutls_record_send (ssl, &resp, sizeof (resp)); + gnutls_record_send (ssl, &retval, resp.data_len); +#else + SSL_write (ssl, &resp, sizeof (resp)); + SSL_write (ssl, &retval, resp.data_len); +#endif + } + + if (debug_level > 0) + dbg_log ("handle_request: exit (%d)", retval); + return retval; +} + +#ifdef USE_GNUTLS +/* These are global */ +static gnutls_certificate_credentials x509_cred; + +static gnutls_session +initialize_gnutls_session (const char *certificate, const char *privatekey) +{ + gnutls_session session; + + gnutls_certificate_allocate_credentials (&x509_cred); +#if 0 /* XXX */ + gnutls_certificate_set_x509_trust_file (x509_cred, certificate, + GNUTLS_X509_FMT_PEM); + + gnutls_certificate_set_x509_crl_file (x509_cred, CRLFILE, + GNUTLS_X509_FMT_PEM); +#endif + gnutls_certificate_set_x509_key_file (x509_cred, certificate, privatekey, + GNUTLS_X509_FMT_PEM); + + gnutls_init (&session, GNUTLS_SERVER); + + gnutls_set_default_priority (session); + gnutls_credentials_set (session, GNUTLS_CRD_CERTIFICATE, x509_cred); + + /* XXX gnutls_certificate_server_set_request (session, GNUTLS_CERT_REQUEST); + gnutls_dh_set_prime_bits (session, DH_BITS); + + generate_dh_params(); + + gnutls_certificate_set_dh_params( x509_cred, dh_params); */ + + return session; +} +#endif + +/* This is the main loop. It can be replicated in different threads but the + `poll' call makes sure only one thread handles an incoming connection. */ +static void +#ifdef USE_GNUTLS +server_run (const char *certificate, const char *privatekey, + const char *program) +#else +server_run (const char *program) +#endif +{ + int i; + + for (i = 0; i < pollfd_cnt; i++) + pollfd_conn[i].events = POLLRDNORM; + + while (1) + { + int nr; + + nr = poll (pollfd_conn, pollfd_cnt, -1); + + if (nr < 0) + { + /* Don't print error messages if poll is only interupted + by a signal. */ + if (errno != EINTR) + dbg_log ("poll() failed: %s", strerror (errno)); + continue; + } + + /* We have a new incoming connection. Look at which socket. */ + for (i = 0; i < pollfd_cnt; i++) + { + if (pollfd_conn[i].revents & (POLLRDNORM|POLLERR|POLLHUP|POLLNVAL)) + { + /* Accept the connection. */ + int ssl_err; + long fd; + request_header req; + char buf[256]; + char *locale, *username; +#ifdef USE_GNUTLS + gnutls_session ssl; +#else + SSL *ssl; +#endif + + fd = accept (pollfd_conn[i].fd, NULL, NULL); + if (fd < 0) + { + dbg_log ("while accepting connection: %s", + strerror_r (errno, buf, sizeof (buf))); + continue; + } + /* TCP connection is ready. Do server side SSL. */ +#ifdef USE_GNUTLS + ssl = initialize_gnutls_session (certificate, privatekey); + gnutls_transport_set_ptr (ssl, (gnutls_transport_ptr)fd); + ssl_err = gnutls_handshake (ssl); + if (ssl_err < 0) + { + close (fd); + gnutls_deinit (ssl); + dbg_log ("Handshake has failed (%s)", + gnutls_strerror (ssl_err)); + continue; + } + + /* see the Getting peer's information example */ + /* print_info(session); */ + /* XXX print cipher info and check client + certificate */ + + if ((ssl_err = gnutls_record_recv (ssl, &req, sizeof (req))) <= 0) + { + if (debug_level > 0) + { + if (ssl_err == 0) + dbg_log ("error while reading request: %s", + "client has closed the GNUTLS connection"); + else + dbg_log ("error while reading request: %s", + gnutls_strerror (ssl_err)); + } + gnutls_deinit (ssl); + close (fd); + continue; + } +#else + ssl = SSL_new (ctx); + if (ssl == NULL) + { + dbg_log ("cannot enable SSL encryption"); + close (fd); + continue; + } + SSL_set_fd (ssl, fd); + ssl_err = SSL_accept (ssl); + if (ssl_err < 1) + { + dbg_log ("SSL_accept: %s", ERR_error_string (ssl_err, NULL)); + close (fd); + continue; + } + + /* Get the cipher - opt */ + if (debug_level > 0) + dbg_log ("SSL connection using %s", SSL_get_cipher (ssl)); + +#if 0 + /* Get client's certificate (note: beware of dynamic + allocation) - opt */ + + client_cert = SSL_get_peer_certificate (ssl); + if (client_cert != NULL) + { + printf ("Client certificate:\n"); + + str = X509_NAME_oneline (X509_get_subject_name (client_cert), + 0, 0); + CHK_NULL(str); + printf ("\t subject: %s\n", str); + free (str); + + str = X509_NAME_oneline (X509_get_issuer_name (client_cert), + 0, 0); + CHK_NULL(str); + printf ("\t issuer: %s\n", str); + free (str); + + /* We could do all sorts of certificate verification + stuff here before deallocating the certificate. */ + X509_free (client_cert); + } + else + printf ("Client does not have certificate.\n"); +#endif + /* Now read the request. */ + errno = 0; + if (TEMP_FAILURE_RETRY (SSL_read (ssl, &req, sizeof (req))) + != sizeof (req)) + { + if (debug_level > 0) + { + if (errno == 0) + dbg_log ("error while reading request: %s", + "wrong data received"); + else + dbg_log ("error while reading request: %s", + strerror_r (errno, buf, sizeof (buf))); + } + close (fd); + continue; + } +#endif + + /* It should not be possible to crash the rpasswdd with + a silly request (i.e., a terribly large key). We limit + the size to 1kb for locale and username. */ + if (req.locale_len < 0 || req.locale_len > 1024) + { + if (debug_level > 0) + dbg_log ("locale length in request too long: %d", + req.locale_len); + continue; + } + else if (req.locale_len > 0) + { + /* Get the locale. */ + char localebuf[req.locale_len + 1]; + + if (safe_read (ssl, localebuf, req.locale_len, 1) + != req.locale_len) + { + if (debug_level > 0) + { + char err_buf[256]; + + if (errno == 0) + dbg_log ("error while reading request locale: %s", + "wrong data received"); + else + dbg_log ("error while reading request locale: %s", + strerror_r (errno, err_buf, + sizeof (err_buf))); + } + continue; + } + /* Don't assume the string is NUL-terminated */ + localebuf[req.locale_len] = '\0'; + if ((locale = strdup (localebuf)) == NULL) + { + dbg_log ("running out of memory!"); + continue; + } + } + else + locale = NULL; + + if (req.data_len < 0 || req.data_len > 1024) + { + if (debug_level > 0) + dbg_log ("data length in request too long: %d", + req.data_len); + if (locale) + free (locale); + continue; + } + else if (req.data_len > 0) + { + /* Get the data. */ + char databuf[req.data_len + 1]; + + if (safe_read (ssl, databuf, req.data_len, 1) + != req.data_len) + { + if (debug_level > 0) + { + char err_buf[256]; + + if (errno == 0) + dbg_log ("error while reading request username: %s", + "wrong data received"); + else + dbg_log ("error while reading request username: %s", + strerror_r (errno, err_buf, + sizeof (err_buf))); + } + if (locale) + free (locale); + continue; + } + /* Don't assume the string is NUL-terminated */ + databuf[req.data_len] = '\0'; + if ((username = strdup (databuf)) == NULL) + { + dbg_log ("running out of memory!"); + if (locale) + free (locale); + continue; + } + } + else + { + dbg_log ("No username supplied"); + if (locale) + free (locale); + continue; + } + + + /* To avoid a DoS attack, fork at first and let the child + handle the request. */ + switch (fork ()) + { + case 0: + /* Child: get all the data and process it. */ + { + int ret = handle_request (ssl, &req, locale, username, + program); + + close (fd); + exit (ret); + } + break; + case -1: + { + char *cp; + + if (asprintf (&cp, "fork: %s", strerror (errno)) > 0) + { + dbg_log (cp); + send_string (ssl, ERROR_MSG, cp); + free (cp); +#ifdef USE_GNUTLS + /* do not wait for the peer to close the connection. */ + gnutls_bye (ssl, GNUTLS_SHUT_WR); + close (fd); + gnutls_deinit (ssl); +#else + close (fd); + SSL_free (ssl); +#endif + if (locale) + free (locale); + free (username); + } + } + break; + default: + /* Parent: we are done. */ +#ifdef USE_GNUTLS + /* do not wait for the peer to close the connection. */ + gnutls_bye (ssl, GNUTLS_SHUT_WR); + close (fd); + gnutls_deinit (ssl); +#else + close (fd); + SSL_free (ssl); +#endif + if (locale) + free (locale); + free (username); + } + } + } + } +} + + +/* Cleanup. */ +static void +termination_handler (int sig __attribute__ ((unused))) +{ + close_sockets (); + +#ifdef USE_SLP + /* Remove from local SLP server. */ + if (use_slp) + deregister_slp (); +#endif + + /* Clean up pid file. */ + unlink (_PATH_RPASSWDDPID); + + exit (EXIT_SUCCESS); +} + +/* Make sure there are no zombies left. */ +static void +sig_child (int sig __attribute__ ((unused))) +{ + int st; + + /* Clear all childs */ + while (waitpid(-1, &st, WNOHANG) > 0) + ; +} + +static void +init_limits (void) +{ + struct rlimit rlim; + + /* Don't create a core file. */ + rlim.rlim_cur = rlim.rlim_max = 0; + setrlimit (RLIMIT_CORE, &rlim); + + /* Set all limits to unlimited to avoid to run in any + problems later. */ + rlim.rlim_cur = rlim.rlim_max = RLIM_INFINITY; + setrlimit (RLIMIT_AS, &rlim); + setrlimit (RLIMIT_CPU, &rlim); + setrlimit (RLIMIT_DATA, &rlim); + setrlimit (RLIMIT_FSIZE, &rlim); + setrlimit (RLIMIT_NOFILE, &rlim); + setrlimit (RLIMIT_RSS, &rlim); + setrlimit (RLIMIT_STACK, &rlim); +} + +int +main (int argc, char **argv) +{ + /* ipv4 and/or ipv6 binding. */ + int ipv4 = 0; + int ipv6 = 0; + int go_background = 1; + const char *program = "rpasswdd"; + char *certificate = "/etc/rpasswdd.pem"; + char *privatekey = "/etc/rpasswdd.pem"; + int port = -1; +#ifdef USE_SLP + int slp_timeout = 3600; + char *slp_descr = NULL; +#endif +#ifndef USE_GNUTLS + SSL_METHOD *meth; +#endif + +#ifdef ENABLE_NLS + /* Set locale via LC_ALL. */ + setlocale (LC_ALL, "C"); + /* Set the text message domain. */ + textdomain (PACKAGE); +#endif + + /* Parse program arguments */ + while (1) + { + int c; + int option_index = 0; + static struct option long_options[] = + { + {"port", required_argument, NULL, 'p'}, + {"debug", no_argument, NULL, 'd'}, + {"ipv4", no_argument, NULL, '4'}, + {"ipv6", no_argument, NULL, '6'}, + {"certificate", required_argument, NULL, 'c'}, + {"privatekey", required_argument, NULL, 'k'}, + {"slp-descr", required_argument, NULL, '\250'}, + {"slp-timeout", required_argument, NULL, '\251'}, + {"slp", no_argument, NULL, '\252'}, + {"version", no_argument, NULL, '\255'}, + {"usage", no_argument, NULL, '\254'}, + {"help", no_argument, NULL, '\253'}, + {NULL, 0, NULL, '\0'} + }; + + c = getopt_long (argc, argv, "46c:dk:p:", long_options, + &option_index); + if (c == EOF) + break; + switch (c) + { + case '4': + ipv4 = 1; + break; + case '6': + ipv6 = 1; + break; + case 'c': + certificate = optarg; + break; + case 'k': + privatekey = optarg; + break; + case 'd': + ++debug_level; + go_background = 0; + break; + case 'p': + port = htons (atol (optarg)); + break; +#ifdef USE_SLP + case '\250': + slp_descr = optarg; + break; + case '\251': + slp_timeout = atol (optarg); + break; + case '\252': + use_slp = 1; + break; +#endif + case '\253': + print_help (program); + return 0; + case '\255': + print_version (program); + return 0; + case '\254': + print_usage (stdout, program); + return E_USAGE; + default: + print_error (program); + return E_BAD_ARG; + } + } + + argc -= optind; + argv += optind; + + if (argc != 0) + { + fprintf (stderr, _("%s: Too many arguments.\n"), program); + print_error (program); + return E_USAGE; + } + + if (ipv4 == 0 && ipv6 == 0) + ipv4 = ipv6 = 1; + + /* Check if we are already running. */ + if (check_pid (_PATH_RPASSWDDPID)) + error (EXIT_FAILURE, 0, _("already running")); + +#ifdef USE_GNUTLS + + /* this must be called once in the program. */ + gnutls_global_init (); + +#else + /* Initialize SSL data. We need to do this before we go in + background, else we cannot read the PEM phass phrase. */ + SSL_load_error_strings (); + SSLeay_add_ssl_algorithms (); + meth = SSLv23_server_method (); + ctx = SSL_CTX_new (meth); + if (!ctx) + { + dbg_log (ERR_error_string (ERR_get_error (), NULL)); + return E_SSL_FAILURE; + } + + if (SSL_CTX_use_certificate_file (ctx, certificate, SSL_FILETYPE_PEM) <= 0) + { + dbg_log ("Loading certificate (%s): %s", certificate, + ERR_error_string (ERR_get_error (), NULL)); + return E_SSL_FAILURE; + } + if (SSL_CTX_use_PrivateKey_file (ctx, privatekey, SSL_FILETYPE_PEM) <= 0) + { + dbg_log ("Loading privatekey (%s): %s", privatekey, + ERR_error_string (ERR_get_error (), NULL)); + return E_SSL_FAILURE; + } + + if (!SSL_CTX_check_private_key (ctx)) + { + dbg_log (ERR_error_string (ERR_get_error (), NULL)); + return E_SSL_FAILURE; + } +#endif + + /* Behave like a daemon. */ + if (go_background) + { + int i; + + if (fork ()) + exit (0); + + for (i = 0; i < getdtablesize (); i++) + close (i); + + if (fork ()) + exit (0); + + setsid (); + + if (chdir ("/") < 0) + dbg_log ("chdir(\"/\") failed: %s", strerror (errno)); + + openlog (program, LOG_CONS | LOG_ODELAY, LOG_DAEMON); + + if (write_pid (_PATH_RPASSWDDPID) < 0) + dbg_log ("%s: %s", _PATH_RPASSWDDPID, strerror (errno)); + + /* Ignore job control signals. */ + signal (SIGTTOU, SIG_IGN); + signal (SIGTTIN, SIG_IGN); + signal (SIGTSTP, SIG_IGN); + } + + /* Install sig child handler to get ride of zombies. */ + signal (SIGCHLD, sig_child); + /* Ignore "File size limit exceeded" signals. */ + signal (SIGXFSZ, SIG_IGN); + /* We don't support SIGHUP yet. */ + signal (SIGHUP, SIG_IGN); + signal (SIGINT, termination_handler); + signal (SIGPIPE, SIG_IGN); + signal (SIGQUIT, termination_handler); + signal (SIGTERM, termination_handler); + + + /* Set the limits to a usefull value. */ + init_limits (); + + /* If port was not specified on commandline, try at first a lookup + in the service database, if this fails, use the compiled in + default port. */ + if (port == -1) + { + struct servent *serv = getservbyname ("rpasswd", "tcp"); + + if (serv) + port = serv->s_port; + else + port = htons (RPASSWDD_PORT); + } + + /* Init databases. */ + server_init (port, ipv4, ipv6); + +#ifdef USE_SLP + /* Register at local SLP server. */ + if (use_slp) + register_slp (ntohs(port), slp_timeout, slp_descr); +#endif + + /* Handle incoming requests. */ +#ifdef USE_GNUTLS + server_run (certificate, privatekey, program); +#else + server_run (program); +#endif + + return E_SUCCESS; +} diff --git a/src/sg.1 b/src/sg.1 new file mode 100644 index 0000000..3faf309 --- /dev/null +++ b/src/sg.1 @@ -0,0 +1 @@ +.so man1/newgrp.1 \ No newline at end of file diff --git a/src/tst-32bit-uid-gid b/src/tst-32bit-uid-gid new file mode 100755 index 0000000..1e551fa --- /dev/null +++ b/src/tst-32bit-uid-gid @@ -0,0 +1,82 @@ +#!/bin/bash + +export LANG=C + +# Don't enable before we don't know on which filesystem +# we run. faillog and lastlog can become very, very big. +# XXX FIX THIS +exit 77 + +TEMPDIR=`mktemp -d tests.XXXXXX` + +touch $TEMPDIR/passwd +touch $TEMPDIR/group + +# 31bit UID tests (signed int) +./useradd -P $TEMPDIR -G "" -c "INT_MAX=2147483647" -u 2147483647 intmax +RET=$? +if [ $RET != 0 ]; then + rm -rf $TEMPDIR + exit $RET +fi +./groupadd -P $TEMPDIR -g 2147483647 intmax +RET=$? +if [ $RET != 0 ]; then + rm -rf $TEMPDIR + exit $RET +fi + +cat << EOT > tst-32bit-uid-gid.expect-passwd +intmax:!:2147483647:100:INT_MAX=2147483647:/home/intmax:/bin/bash +EOT +diff -q -u tst-32bit-uid-gid.expect-passwd $TEMPDIR/passwd +RET1=$? +cat << EOT > tst-32bit-uid-gid.expect-group +intmax:!:2147483647: +EOT +diff -q -u tst-32bit-uid-gid.expect-group $TEMPDIR/group +RET2=$? + +# 32bit UID tests (unsigned int) +./useradd -P $TEMPDIR -G "" -c "UINT_MAX=4294967295" -u 4294967295 uintmax +RET=$? +if [ $RET != 0 ]; then + rm -rf $TEMPDIR + exit $RET +fi +./groupadd -P $TEMPDIR -g 4294967295 uintmax +RET=$? +if [ $RET != 0 ]; then + rm -rf $TEMPDIR + exit $RET +fi + +cat << EOT >> tst-32bit-uid-gid.expect-passwd +uintmax:!:4294967295:100:UINT_MAX=4294967295:/home/uintmax:/bin/bash +EOT +diff -q -u tst-32bit-uid-gid.expect-passwd $TEMPDIR/passwd +RET3=$? +cat << EOT >> tst-32bit-uid-gid.expect-group +uintmax:!:4294967295: +EOT +diff -q -u tst-32bit-uid-gid.expect-group $TEMPDIR/group +RET4=$? + + +cp $TEMPDIR/passwd tst-32bit-uid-gid.passwd +cp $TEMPDIR/group tst-32bit-uid-gid.group + +rm -rf $TEMPDIR + +if [ $RET1 != 0 || $RET2 != 0 ] ; then + exit 1 +fi +if [ $RET3 != 0 && $RET4 != 0 ] ; then + echo "System supports only 31bit UIDs, not 32bit!" + exit 77 +fi +if [ $RET3 != 0 || $RET4 != 0 ] ; then + exit 1 +fi +exit 0 + diff --git a/src/tst-chage b/src/tst-chage new file mode 100755 index 0000000..a0cc23d --- /dev/null +++ b/src/tst-chage @@ -0,0 +1,67 @@ +#!/bin/bash + +export LANG=C + +TEMPDIR=`mktemp -d tests.XXXXXX` + +touch $TEMPDIR/passwd +touch $TEMPDIR/shadow +./useradd -G "" -P $TEMPDIR chagetest1 -c "Test account" +RET1=$? +./chage -P $TEMPDIR -m 7 -M 92 -d 2000-02-29 -E 2004-02-29 -I 7 -W 14 --service files chagetest1 > tst-chage.out 2>&1 +RET2=$? +./chage -P $TEMPDIR -l chagetest1 > tst-chage.out1 +RET3=$? +cat << EOT > tst-chage.expect1 +Minimum: 7 +Maximum: 92 +Warning: 14 +Inactive: 7 +Last Change: Feb 29, 2000 +Password Expires: May 31, 2000 +Password Inactive: Jun 07, 2000 +Account Expires: Feb 29, 2004 +EOT +diff -q -u tst-chage.expect1 tst-chage.out1 +RET4=$? + +./chage -P $TEMPDIR -m 7 -M 92 -d 2000-02-29 -E 2004-02-29 -I 0 -W 14 --service files chagetest1 > tst-chage.out 2>&1 +RET5=$? +./chage -P $TEMPDIR -l chagetest1 > tst-chage.out2 +RET6=$? +cat << EOT > tst-chage.expect2 +Minimum: 7 +Maximum: 92 +Warning: 14 +Inactive: 0 +Last Change: Feb 29, 2000 +Password Expires: May 31, 2000 +Password Inactive: May 31, 2000 +Account Expires: Feb 29, 2004 +EOT +diff -q -u tst-chage.expect2 tst-chage.out2 +RET7=$? + +./chage -P $TEMPDIR -m 7 -M 92 -d 2000-02-29 -E 2004-02-29 -I -1 -W 14 --service files chagetest1 > tst-chage.out 2>&1 +RET8=$? +./chage -P $TEMPDIR -l chagetest1 > tst-chage.out3 +RET9=$? +cat << EOT > tst-chage.expect3 +Minimum: 7 +Maximum: 92 +Warning: 14 +Inactive: -1 +Last Change: Feb 29, 2000 +Password Expires: May 31, 2000 +Password Inactive: Never +Account Expires: Feb 29, 2004 +EOT +diff -q -u tst-chage.expect3 tst-chage.out3 +RET10=$? +rm -rf $TEMPDIR +if [ $RET1 != 0 -o $RET2 != 0 -o $RET3 != 0 -o $RET4 != 0 -o $RET5 != 0 -o $RET6 != 0 \ + -o $RET7 != 0 -o $RET8 != 0 -o $RET9 != 0 -o $RET10 != 0 ] ; then + exit 1 +else + exit 0 +fi diff --git a/src/tst-gpasswd b/src/tst-gpasswd new file mode 100755 index 0000000..0550675 --- /dev/null +++ b/src/tst-gpasswd @@ -0,0 +1,33 @@ +#!/bin/bash + +export LANG=C + +TEMPDIR=`mktemp -d tests.XXXXXX` + +echo "root:valid:0:" > tst-gpasswd.group +echo "root:!valid:0:" > tst-gpasswd.group.locked +echo "root::0:" > tst-gpasswd.group.empty +echo "root:!:0:" > tst-gpasswd.group.elocked + +cp -p tst-gpasswd.group $TEMPDIR/group +./gpasswd -P $TEMPDIR -l root > tst-gpasswd.run 2>&1 +diff -q -u tst-gpasswd.group.locked $TEMPDIR/group +RET1=$? +cp -p tst-gpasswd.group.locked $TEMPDIR/group +./gpasswd -P $TEMPDIR -u root >> tst-gpasswd.run 2>&1 +diff -q -u tst-gpasswd.group $TEMPDIR/group +RET2=$? +./gpasswd -P $TEMPDIR -r root >> tst-gpasswd.run 2>&1 +diff -q -u tst-gpasswd.group.empty $TEMPDIR/group +RET3=$? +cp -p tst-gpasswd.group.empty $TEMPDIR/group +./gpasswd -P $TEMPDIR -l root > tst-gpasswd.run 2>&1 +diff -q -u tst-gpasswd.group.elocked $TEMPDIR/group +RET4=$? + +rm -rf $TEMPDIR +if [ $RET1 != 0 -o $RET2 != 0 -o $RET3 != 0 -o $RET4 != 0 ] ; then + exit 1 +else + exit 0 +fi diff --git a/src/tst-groupadd b/src/tst-groupadd new file mode 100755 index 0000000..f2c78bb --- /dev/null +++ b/src/tst-groupadd @@ -0,0 +1,35 @@ +#!/bin/bash + +export LANG=C + +TEMPDIR=`mktemp -d tests.XXXXXX` + +cat << EOT > $TEMPDIR/group +root:x:0:bigsister +bin:x:1:daemon +uucp:x:14: +dialout:x:16: +audio:x:17: +floppy:x:19: +utmp:x:22: +video:x:33: +EOT +./groupadd -P $TEMPDIR groupaddtest1 +RET1=$? +./groupadd -P $TEMPDIR -g 99 groupaddtest2 +RET2=$? +./groupadd -P $TEMPDIR -g 99 groupaddtest3 > tst-groupadd.out3 2>&1 +RET3=$? +./groupadd -P $TEMPDIR -g 99 -o groupaddtest4 +RET4=$? +./groupadd -P $TEMPDIR groupaddtest4 > tst-groupadd.out5 2>&1 +RET5=$? +cp $TEMPDIR/group tst-groupadd.group + +rm -rf $TEMPDIR +if [ $RET1 != 0 -o $RET2 != 0 -o $RET3 == 0 -o $RET4 != 0 -o $RET5 == 0 ] +then + exit 1 +else + exit 0 +fi diff --git a/src/tst-groupmod b/src/tst-groupmod new file mode 100755 index 0000000..3589ee7 --- /dev/null +++ b/src/tst-groupmod @@ -0,0 +1,118 @@ +#!/bin/bash + +export LANG=C + +TEMPDIR=`mktemp -d tests.XXXXXX` + +cat << EOT > $TEMPDIR/group +root:x:0:bigsister +bin:x:1:daemon +uucp:x:14: +dialout:x:16: +audio:x:17: +floppy:x:19: +utmp:x:22: +video:x:33: +EOT +./groupmod -P $TEMPDIR -g 45 utmp +RET1=$? +./groupmod -P $TEMPDIR -g 55 -n video2 video +RET2=$? +./groupmod -P $TEMPDIR -g 55 floppy > tst-groupmod.out3 2>&1 +RET3=$? +./groupmod -P $TEMPDIR -g 55 -o uucp +RET4=$? +./groupmod -P $TEMPDIR -n root dialout > tst-groupmod.out5 2>&1 +RET5=$? +cat << EOT > tst-groupmod.expect +root:x:0:bigsister +bin:x:1:daemon +uucp:x:55: +dialout:x:16: +audio:x:17: +floppy:x:19: +utmp:x:45: +video2:x:55: +EOT +# Check, if resulting group file is the one we would expect +diff -q -u $TEMPDIR/group tst-groupmod.expect +RET6=$? +./groupmod -P $TEMPDIR -A root audio +RET7=$? +cat << EOT > tst-groupmod.expect +root:x:0:bigsister +bin:x:1:daemon +uucp:x:55: +dialout:x:16: +audio:x:17:root +floppy:x:19: +utmp:x:45: +video2:x:55: +EOT +# Check, if resulting group file is the one we would expect +diff -q -u $TEMPDIR/group tst-groupmod.expect +RET8=$? +./groupmod -P $TEMPDIR -A bin audio +RET9=$? +cat << EOT > tst-groupmod.expect +root:x:0:bigsister +bin:x:1:daemon +uucp:x:55: +dialout:x:16: +audio:x:17:root,bin +floppy:x:19: +utmp:x:45: +video2:x:55: +EOT +# Check, if resulting group file is the one we would expect +diff -q -u $TEMPDIR/group tst-groupmod.expect +RET10=$? +./groupmod -P $TEMPDIR -R root audio +RET11=$? +cat << EOT > tst-groupmod.expect +root:x:0:bigsister +bin:x:1:daemon +uucp:x:55: +dialout:x:16: +audio:x:17:bin +floppy:x:19: +utmp:x:45: +video2:x:55: +EOT +# Check, if resulting group file is the one we would expect +diff -q -u $TEMPDIR/group tst-groupmod.expect +RET12=$? +./groupmod -P $TEMPDIR -R bin audio +RET13=$? +cat << EOT > tst-groupmod.expect +root:x:0:bigsister +bin:x:1:daemon +uucp:x:55: +dialout:x:16: +audio:x:17: +floppy:x:19: +utmp:x:45: +video2:x:55: +EOT +# Check, if resulting group file is the one we would expect +diff -q -u $TEMPDIR/group tst-groupmod.expect +RET14=$? +./groupmod -P $TEMPDIR -R bin audio +RET15=$? +# Check, if resulting group file is the one we would expect +diff -q -u $TEMPDIR/group tst-groupmod.expect +RET16=$? + +cp $TEMPDIR/group tst-groupmod.group + +rm -f tst-groupmod.expect +rm -rf $TEMPDIR +if [ $RET1 != 0 -o $RET2 != 0 -o $RET3 == 0 -o $RET4 != 0 -o \ + $RET5 == 0 -o $RET6 != 0 -o $RET7 != 0 -o $RET8 != 0 -o \ + $RET9 != 0 -o $RET10 != 0 -o $RET11 != 0 -o $RET12 != 0 -o \ + $RET13 != 0 -o $RET14 != 0 -o $RET15 != 0 -o $RET16 != 0 ] +then + exit 1 +else + exit 0 +fi diff --git a/src/tst-grpck b/src/tst-grpck new file mode 100755 index 0000000..1f416b9 --- /dev/null +++ b/src/tst-grpck @@ -0,0 +1,104 @@ +#!/bin/bash + +export LANG=C +export LC_ALL=C + +TEMPDIR=`mktemp -d tests.XXXXXX` + +cat << EOT > $TEMPDIR/group +root:*:0: +bin:*:1:daemon +daemon:*:2: +sys:*:3: +tty:*:5: +disk:*:6: +lp:*:7: +www:*:8: +kmem:*:9: +wheel:*:10: +mail:*:12: +news:*:13: +uucp:*:14: +shadow:*:15: +dialout:*:16: +audio:*:17: +floppy:*:19: +cdrom:*:20: +console:*:21: +utmp:*:22: +public:*:32: +video:*:33: +games:*:40: +xok:*:41: +modem:*:43: +named:*:44: +man:*:62: +users:*:100: +nobody:*:65533: +nogroup:*:65534:nobody +at:!:25: +ntadmin:!:71: +ldap:!:70: +sshd:!:65: +postfix:!:51: +maildrop:!:59: +EOT + +cat << EOT > tst-grpck.group-sorted +root:*:0: +bin:*:1:daemon +daemon:*:2: +sys:*:3: +tty:*:5: +disk:*:6: +lp:*:7: +www:*:8: +kmem:*:9: +wheel:*:10: +mail:*:12: +news:*:13: +uucp:*:14: +shadow:*:15: +dialout:*:16: +audio:*:17: +floppy:*:19: +cdrom:*:20: +console:*:21: +utmp:*:22: +at:!:25: +public:*:32: +video:*:33: +games:*:40: +xok:*:41: +modem:*:43: +named:*:44: +postfix:!:51: +maildrop:!:59: +man:*:62: +sshd:!:65: +ldap:!:70: +ntadmin:!:71: +users:*:100: +nobody:*:65533: +nogroup:*:65534:nobody +EOT + +./grpck -s -P $TEMPDIR > tst-grpck.out1 +RET1=$? +diff -q -u $TEMPDIR/group tst-grpck.group-sorted +RET2=$? + +cat << EOT >> $TEMPDIR/group +broken:x: +EOT + +./grpck -P $TEMPDIR -r > tst-grpck.out3 +RET3=$? + +rm -rf $TEMPDIR + +if [ $RET1 != 0 -o $RET2 != 0 -o $RET3 != 2 ] ; then + exit 1 +else + exit 0 +fi diff --git a/src/tst-long-group-entry b/src/tst-long-group-entry new file mode 100755 index 0000000..f791c57 --- /dev/null +++ b/src/tst-long-group-entry @@ -0,0 +1,49 @@ +#!/bin/bash + +export LANG=C + +TEMPDIR=`mktemp -d tests.XXXXXX` +touch $TEMPDIR/{group,passwd} + +./groupadd -P $TEMPDIR primary +RET=$? +if [ $RET != 0 ]; then + rm -rf $TEMPDIR + exit $RET +fi +./groupadd -P $TEMPDIR secondary +RET=$? +if [ $RET != 0 ]; then + rm -rf $TEMPDIR + exit $RET +fi +./groupadd -P $TEMPDIR third +RET=$? +if [ $RET != 0 ]; then + rm -rf $TEMPDIR + exit $RET +fi + +for i in `seq 50000 56000` +do + ./useradd -P $TEMPDIR u$i -u $i -g primary -G secondary -d / -s /sbin/nologin + RET=$? + if [ $RET != 0 ]; then + rm -rf $TEMPDIR + exit $RET + fi + ./usermod -P $TEMPDIR -G secondary,third u$i + RET=$? + if [ $RET != 0 ]; then + rm -rf $TEMPDIR + exit $RET + fi +done + +cp $TEMPDIR/passwd tst-long-group-entry.passwd +cp $TEMPDIR/group tst-long-group-entry.group + +rm -rf $TEMPDIR + +exit 0 + diff --git a/src/tst-passwd b/src/tst-passwd new file mode 100755 index 0000000..2dc5a7e --- /dev/null +++ b/src/tst-passwd @@ -0,0 +1,46 @@ +#!/bin/bash + +export LANG=C + +TEMPDIR=`mktemp -d tests.XXXXXX` + +echo "root:x:0:0:root:/root:/bin/bash" > tst-passwd.passwd +echo "root:valid:0:0:root:/root:/bin/bash" > tst-passwd.noshadow +echo "root:!valid:0:0:root:/root:/bin/bash" > tst-passwd.noshadow.locked +echo "root::0:0:root:/root:/bin/bash" > tst-passwd.noshadow.deleted +echo "root:valid:12116:0:10000::::" > tst-passwd.shadow +echo "root:!valid:12116:0:10000::::" > tst-passwd.locked +echo "root::12116:0:10000::::" > tst-passwd.deleted + +cp -p tst-passwd.noshadow $TEMPDIR/passwd +./passwd -P $TEMPDIR -l root > tst-passwd.run 2>&1 +diff -q -u tst-passwd.noshadow.locked $TEMPDIR/passwd +RET1=$? +./passwd -P $TEMPDIR -u root >> tst-passwd.run 2>&1 +diff -q -u tst-passwd.noshadow $TEMPDIR/passwd +RET2=$? +./passwd -P $TEMPDIR -d root >> tst-passwd.run 2>&1 +diff -q -u tst-passwd.noshadow.deleted $TEMPDIR/passwd +RET3=$? + +cp -p tst-passwd.passwd $TEMPDIR/passwd +cp -p tst-passwd.shadow $TEMPDIR/shadow +./passwd -P $TEMPDIR -l root >> tst-passwd.run 2>&1 +diff -q -u tst-passwd.locked $TEMPDIR/shadow +RET4=$? +./passwd -P $TEMPDIR -u root >> tst-passwd.run 2>&1 +diff -q -u tst-passwd.shadow $TEMPDIR/shadow +RET5=$? +./passwd -P $TEMPDIR -d root >> tst-passwd.run 2>&1 +diff -q -u tst-passwd.deleted $TEMPDIR/shadow +RET6=$? + + +rm -rf $TEMPDIR +if [ $RET1 != 0 -o $RET2 != 0 -o $RET3 != 0 -o $RET4 != 0 -o $RET5 != 0 -o \ + $RET6 != 0 ] ; then + exit 1 +else + exit 0 +fi + diff --git a/src/tst-pwck b/src/tst-pwck new file mode 100755 index 0000000..68eba02 --- /dev/null +++ b/src/tst-pwck @@ -0,0 +1,73 @@ +#!/bin/bash + +export LANG=C +export LC_ALL=C + +TEMPDIR=`mktemp -d tests.XXXXXX` + +cat << EOT > $TEMPDIR/passwd +bin:x:1:1:bin:/bin:/bin/bash +daemon:x:2:2:Daemon:/sbin:/bin/bash +lp:x:4:7:Printing daemon:/var/spool/lpd:/bin/bash +mail:x:8:12:Mailer daemon:/var/spool/clientmqueue:/bin/false +games:x:12:100:Games account:/var/games:/bin/bash +wwwrun:x:30:8:WWW daemon apache:/var/lib/wwwrun:/bin/false +named:x:44:44:Nameserver daemon:/var/named:/bin/bash +nobody:x:65534:65533:nobody:/var/lib/nobody:/bin/bash +at:x:25:25:Batch jobs daemon:/var/spool/atjobs:/bin/bash +ldap:x:76:70:User for OpenLDAP:/var/lib/ldap:/bin/bash +sshd:x:71:65:SSH daemon:/var/lib/sshd:/bin/false +postfix:x:51:51:Postfix Daemon:/var/spool/postfix:/bin/false +ntp:x:74:65534:NTP daemon:/var/lib/ntp:/bin/false +kukuk:x:500:100:Thorsten Kukuk:/home/kukuk:/bin/bash +ftp:x:40:49:FTP account:/srv/ftp:/bin/bash +man:x:13:62:Manual pages viewer:/var/cache/man:/bin/bash +news:x:9:13:News system:/etc/news:/bin/bash +uucp:x:10:14:Unix-to-Unix CoPy system:/etc/uucp:/bin/bash +mysql:x:60:2:MySQL database admin:/var/lib/mysql:/bin/false +root:x:0:0:root:/root:/bin/bash +EOT + +cat << EOT > tst-pwck.passwd-sorted +root:x:0:0:root:/root:/bin/bash +bin:x:1:1:bin:/bin:/bin/bash +daemon:x:2:2:Daemon:/sbin:/bin/bash +lp:x:4:7:Printing daemon:/var/spool/lpd:/bin/bash +mail:x:8:12:Mailer daemon:/var/spool/clientmqueue:/bin/false +news:x:9:13:News system:/etc/news:/bin/bash +uucp:x:10:14:Unix-to-Unix CoPy system:/etc/uucp:/bin/bash +games:x:12:100:Games account:/var/games:/bin/bash +man:x:13:62:Manual pages viewer:/var/cache/man:/bin/bash +at:x:25:25:Batch jobs daemon:/var/spool/atjobs:/bin/bash +wwwrun:x:30:8:WWW daemon apache:/var/lib/wwwrun:/bin/false +ftp:x:40:49:FTP account:/srv/ftp:/bin/bash +named:x:44:44:Nameserver daemon:/var/named:/bin/bash +postfix:x:51:51:Postfix Daemon:/var/spool/postfix:/bin/false +mysql:x:60:2:MySQL database admin:/var/lib/mysql:/bin/false +sshd:x:71:65:SSH daemon:/var/lib/sshd:/bin/false +ntp:x:74:65534:NTP daemon:/var/lib/ntp:/bin/false +ldap:x:76:70:User for OpenLDAP:/var/lib/ldap:/bin/bash +kukuk:x:500:100:Thorsten Kukuk:/home/kukuk:/bin/bash +nobody:x:65534:65533:nobody:/var/lib/nobody:/bin/bash +EOT + +./pwck -s -P $TEMPDIR > tst-pwck.out1 +RET1=$? +diff -q -u $TEMPDIR/passwd tst-pwck.passwd-sorted +RET2=$? + +cat << EOT >> $TEMPDIR/passwd +hometest:x:498:54:Has invalid home:/is/invalid/dir:/bin/bash +broken:x:499:55:Broken Passwd Entry: +EOT + +./pwck -P $TEMPDIR -r > tst-pwck.out3 +RET3=$? + +rm -rf $TEMPDIR + +if [ $RET1 != 0 -o $RET2 != 0 -o $RET3 != 2 ] ; then + exit 1 +else + exit 0 +fi diff --git a/src/tst-pwconv b/src/tst-pwconv new file mode 100755 index 0000000..0b052d6 --- /dev/null +++ b/src/tst-pwconv @@ -0,0 +1,84 @@ +#!/bin/bash + +export LANG=C + +TEMPDIR=`mktemp -d tests.XXXXXX` + +cat < $TEMPDIR/passwd +root:despassword:0:0:root:/root:/bin/bash +bin:*:1:1:bin:/bin:/bin/bash +daemon:*:2:2:Daemon:/sbin:/bin/bash +lp:*:4:7:Printing daemon:/var/spool/lpd:/bin/bash +mail:*:8:12:Mailer daemon:/var/spool/clientmqueue:/bin/false +news:*:9:13:News system:/etc/news:/bin/bash +uucp:*:10:14:Unix-to-Unix CoPy system:/etc/uucp:/bin/bash +games:*:12:100:Games account:/var/games:/bin/bash +man:*:13:62:Manual pages viewer:/var/cache/man:/bin/bash +at:*:25:25:Batch jobs daemon:/var/spool/atjobs:/bin/bash +wwwrun:*:30:8:WWW daemon apache:/var/lib/wwwrun:/bin/false +ftp:*:40:49:FTP account:/srv/ftp:/bin/bash +named:*:44:44:Nameserver daemon:/var/named:/bin/bash +postfix:*:51:51:Postfix Daemon:/var/spool/postfix:/bin/false +sshd:*:71:65:SSH daemon:/var/lib/sshd:/bin/false +ntp:*:74:65534:NTP daemon:/var/lib/ntp:/bin/false +ldap:*:76:70:User for OpenLDAP:/var/lib/ldap:/bin/bash +nobody:*:65534:65533:nobody:/var/lib/nobody:/bin/bash +EOF + +cat < tst-pwconv.passwd +root:x:0:0:root:/root:/bin/bash +bin:x:1:1:bin:/bin:/bin/bash +daemon:x:2:2:Daemon:/sbin:/bin/bash +lp:x:4:7:Printing daemon:/var/spool/lpd:/bin/bash +mail:x:8:12:Mailer daemon:/var/spool/clientmqueue:/bin/false +news:x:9:13:News system:/etc/news:/bin/bash +uucp:x:10:14:Unix-to-Unix CoPy system:/etc/uucp:/bin/bash +games:x:12:100:Games account:/var/games:/bin/bash +man:x:13:62:Manual pages viewer:/var/cache/man:/bin/bash +at:x:25:25:Batch jobs daemon:/var/spool/atjobs:/bin/bash +wwwrun:x:30:8:WWW daemon apache:/var/lib/wwwrun:/bin/false +ftp:x:40:49:FTP account:/srv/ftp:/bin/bash +named:x:44:44:Nameserver daemon:/var/named:/bin/bash +postfix:x:51:51:Postfix Daemon:/var/spool/postfix:/bin/false +sshd:x:71:65:SSH daemon:/var/lib/sshd:/bin/false +ntp:x:74:65534:NTP daemon:/var/lib/ntp:/bin/false +ldap:x:76:70:User for OpenLDAP:/var/lib/ldap:/bin/bash +nobody:x:65534:65533:nobody:/var/lib/nobody:/bin/bash +EOF + +cp $TEMPDIR/passwd $TEMPDIR/passwd.orig + +./pwconv -P $TEMPDIR +RET1=$? +diff -q -u tst-pwconv.passwd $TEMPDIR/passwd +RET2=$? +diff -q -u $TEMPDIR/passwd.old $TEMPDIR/passwd.orig +RET3=$? +#diff -q -u tst-pwconv.shadow $TEMPDIR/shadow +#RETXXX=$? + +echo "mysql:password:60:2:MySQL admin:/var/lib/mysql:/bin/false" >> $TEMPDIR/passwd +echo "mysql:x:60:2:MySQL admin:/var/lib/mysql:/bin/false" >> tst-pwconv.passwd +echo "mysql:!:12343:0:99999:7:::" >> $TEMPDIR/shadow + +./pwconv -P $TEMPDIR +RET4=$? +diff -q -u tst-pwconv.passwd $TEMPDIR/passwd +RET5=$? + +cp $TEMPDIR/shadow $TEMPDIR/shadow.result +echo "toremove:x:::::::" >> $TEMPDIR/shadow +./pwconv -P $TEMPDIR +RET6=$? +diff -q -u $TEMPDIR/shadow.result $TEMPDIR/shadow +RET7=$? + +cat $TEMPDIR/shadow > tst-pwconv.shadow-generated + +rm -rf $TEMPDIR +if [ $RET1 != 0 -o $RET2 != 0 -o $RET3 != 0 -o $RET4 != 0 -o \ + $RET5 != 0 -o $RET6 != 0 -o $RET7 != 0 ] ; then + exit 1 +else + exit 0 +fi diff --git a/src/tst-pwunconv b/src/tst-pwunconv new file mode 100755 index 0000000..f1d98d1 --- /dev/null +++ b/src/tst-pwunconv @@ -0,0 +1,89 @@ +#!/bin/bash + +export LANG=C + +TEMPDIR=`mktemp -d tests.XXXXXX` + +cat < $TEMPDIR/passwd +root:x:0:0:root:/root:/bin/bash +bin:x:1:1:bin:/bin:/bin/bash +daemon:x:2:2:Daemon:/sbin:/bin/bash +lp:x:4:7:Printing daemon:/var/spool/lpd:/bin/bash +mail:x:8:12:Mailer daemon:/var/spool/clientmqueue:/bin/false +news:x:9:13:News system:/etc/news:/bin/bash +uucp:x:10:14:Unix-to-Unix CoPy system:/etc/uucp:/bin/bash +games:x:12:100:Games account:/var/games:/bin/bash +man:x:13:62:Manual pages viewer:/var/cache/man:/bin/bash +at:x:25:25:Batch jobs daemon:/var/spool/atjobs:/bin/bash +wwwrun:x:30:8:WWW daemon apache:/var/lib/wwwrun:/bin/false +ftp:x:40:49:FTP account:/srv/ftp:/bin/bash +named:x:44:44:Nameserver daemon:/var/named:/bin/bash +postfix:x:51:51:Postfix Daemon:/var/spool/postfix:/bin/false +sshd:x:71:65:SSH daemon:/var/lib/sshd:/bin/false +ntp:x:74:65534:NTP daemon:/var/lib/ntp:/bin/false +ldap:x:76:70:User for OpenLDAP:/var/lib/ldap:/bin/bash +nobody:x:65534:65533:nobody:/var/lib/nobody:/bin/bash +EOF + +cat < tst-pwunconv.passwd +root:despassword:0:0:root:/root:/bin/bash +bin:*:1:1:bin:/bin:/bin/bash +daemon:*:2:2:Daemon:/sbin:/bin/bash +lp:*:4:7:Printing daemon:/var/spool/lpd:/bin/bash +mail:*:8:12:Mailer daemon:/var/spool/clientmqueue:/bin/false +news:*:9:13:News system:/etc/news:/bin/bash +uucp:*:10:14:Unix-to-Unix CoPy system:/etc/uucp:/bin/bash +games:*:12:100:Games account:/var/games:/bin/bash +man:*:13:62:Manual pages viewer:/var/cache/man:/bin/bash +at:*:25:25:Batch jobs daemon:/var/spool/atjobs:/bin/bash +wwwrun:*:30:8:WWW daemon apache:/var/lib/wwwrun:/bin/false +ftp:*:40:49:FTP account:/srv/ftp:/bin/bash +named:*:44:44:Nameserver daemon:/var/named:/bin/bash +postfix:*:51:51:Postfix Daemon:/var/spool/postfix:/bin/false +sshd:*:71:65:SSH daemon:/var/lib/sshd:/bin/false +ntp:*:74:65534:NTP daemon:/var/lib/ntp:/bin/false +ldap:*:76:70:User for OpenLDAP:/var/lib/ldap:/bin/bash +nobody:*:65534:65533:nobody:/var/lib/nobody:/bin/bash +EOF + +cat < $TEMPDIR/shadow +root:despassword:12423:0:99999:7:::0 +bin:*:12423:0:99999:7:::0 +daemon:*:12423:0:99999:7:::0 +lp:*:12423:0:99999:7:::0 +mail:*:12423:0:99999:7:::0 +news:*:12423:0:99999:7:::0 +uucp:*:12423:0:99999:7:::0 +games:*:12423:0:99999:7:::0 +man:*:12423:0:99999:7:::0 +at:*:12423:0:99999:7:::0 +wwwrun:*:12423:0:99999:7:::0 +ftp:*:12423:0:99999:7:::0 +named:*:12423:0:99999:7:::0 +postfix:*:12423:0:99999:7:::0 +sshd:*:12423:0:99999:7:::0 +ntp:*:12423:0:99999:7:::0 +ldap:*:12423:0:99999:7:::0 +nobody:*:12423:0:99999:7:::0 +EOF + +cp $TEMPDIR/passwd $TEMPDIR/passwd.orig + +./pwunconv -P $TEMPDIR +RET1=$? +diff -q -u tst-pwunconv.passwd $TEMPDIR/passwd +RET2=$? +diff -q -u $TEMPDIR/passwd.old $TEMPDIR/passwd.orig +RET3=$? +if [ -f $TEMPDIR/shadow ] ; then + RET4=1 +else + RET4=0 +fi + +rm -rf $TEMPDIR +if [ $RET1 != 0 -o $RET2 != 0 -o $RET3 != 0 -o $RET4 != 0 ] ; then + exit 1 +else + exit 0 +fi diff --git a/src/tst-useradd b/src/tst-useradd new file mode 100755 index 0000000..cdfec28 --- /dev/null +++ b/src/tst-useradd @@ -0,0 +1,81 @@ +#!/bin/bash + +export LANG=C + +TEMPDIR=`mktemp -d tests.XXXXXX` + +touch $TEMPDIR/passwd +cat << EOT > $TEMPDIR/group +root:x:0:bigsister +bin:x:1:daemon +uucp:x:14: +dialout:x:16: +audio:x:17: +floppy:x:19: +utmp:x:22: +video:x:33: +EOT +cat << EOT > tst-group.useraddtest4 +root:x:0:bigsister,useraddtest4 +bin:x:1:daemon +uucp:x:14: +dialout:x:16: +audio:x:17:useraddtest4 +floppy:x:19:useraddtest4 +utmp:x:22: +video:x:33:useraddtest4 +EOT +cat << EOT > tst-group.useraddtest5 +root:x:0:bigsister,useraddtest4 +bin:x:1:daemon +uucp:x:14: +dialout:x:16: +audio:x:17:useraddtest4,useraddtest5 +floppy:x:19:useraddtest4,useraddtest5 +utmp:x:22: +video:x:33:useraddtest4,useraddtest5 +EOT +./useradd -P $TEMPDIR -G "" useraddtest1 +RET1=$? +./useradd -P $TEMPDIR -G "" -g bin useraddtest2 +RET2=$? +./useradd -P $TEMPDIR -G "" -g 1 useraddtest3 +RET3=$? +./useradd -P $TEMPDIR -G audio,video,floppy,root useraddtest4 +RET4=$? +diff -u tst-group.useraddtest4 $TEMPDIR/group +RET4a=$? +./useradd -P $TEMPDIR -G audio,video,floppy -u 64000 useraddtest5 +RET5=$? +diff -u tst-group.useraddtest5 $TEMPDIR/group +RET5a=$? +./useradd -P $TEMPDIR -G "" -u 64000 useraddtest6 > /dev/null 2>&1 +RET6=$? +./useradd -P $TEMPDIR -G "" -o -u 64000 useraddtest7 +RET7=$? +./useradd -P $TEMPDIR -G "" -u 0 useraddtest8 > /dev/null 2>&1 +RET8=$? +./useradd -P $TEMPDIR -G nogroup useraddtest9 > /dev/null 2>&1 +RET9=$? +./useradd -P $TEMPDIR -G 14,16 useraddtest10 > /dev/null 2>&1 +RET10=$? +./useradd -P $TEMPDIR -G 42 useraddtest11 > /dev/null 2>&1 +RET11=$? +# Test, if adding new users to shadow work, too. +touch $TEMPDIR/shadow +./useradd -P $TEMPDIR -G "" useraddtest12 > /dev/null 2>&1 +RET12=$? +test -s $TEMPDIR/shadow || RET12=1 +./useradd -P $TEMPDIR -G "" -u 9999999999 useraddtest13 > /dev/null 2>&1 +if [ $? -ne 6 ] ; then RET13=1; else RET13=0; fi + +rm -rf $TEMPDIR +if [ $RET1 != 0 -o $RET2 != 0 -o $RET3 != 0 -o $RET4 != 0 -o $RET5 != 0 -o \ + $RET6 == 0 -o $RET7 != 0 -o $RET8 == 0 -o $RET4a != 0 -o $RET5a != 0 -o \ + $RET9 == 0 -o $RET10 != 0 -o $RET11 == 0 -o $RET12 != 0 \ + -o $RET13 != 0 ] +then + exit 1 +else + exit 0 +fi diff --git a/src/tst-userdel b/src/tst-userdel new file mode 100755 index 0000000..f733ec6 --- /dev/null +++ b/src/tst-userdel @@ -0,0 +1,34 @@ +#!/bin/bash + +export LANG=C + +TEMPDIR=`mktemp -d tests.XXXXXX` + +touch $TEMPDIR/passwd +touch $TEMPDIR/group + +./groupadd -P $TEMPDIR -r -o -g 99 test_userdel1 +./useradd -P $TEMPDIR -g 99 -G "" test_userdel1 +RET=$? +if [ $RET != 0 ]; then + rm -rf $TEMPDIR + exit $RET +fi +rm -rf $TEMPDIR/group +touch $TEMPDIR/group +./userdel -P $TEMPDIR test_userdel1 &> /dev/null +RET=$? +if [ $RET != 0 ]; then + rm -rf $TEMPDIR + exit $RET +fi + +if [ -s $TEMPDIR/passwd ]; then + cp $TEMPDIR/passwd tst-userdel.passwd + rm -rf $TEMPDIR + exit $RET +fi + +rm -rf $TEMPDIR +exit 0 + diff --git a/src/tst-usermod b/src/tst-usermod new file mode 100755 index 0000000..6c57480 --- /dev/null +++ b/src/tst-usermod @@ -0,0 +1,38 @@ +#!/bin/bash + +export LANG=C + +TEMPDIR=`mktemp -d tests.XXXXXX` + +echo "root:x:0:0:root:/root:/bin/bash" > tst-usermod.passwd +echo "root:valid:0:0:root:/root:/bin/bash" > tst-usermod.noshadow +echo "root:!valid:0:0:root:/root:/bin/bash" > tst-usermod.noshadow.locked +echo "root::0:0:root:/root:/bin/bash" > tst-usermod.noshadow.deleted +echo "root:valid:12116:0:10000::::" > tst-usermod.shadow +echo "root:!valid:12116:0:10000::::" > tst-usermod.locked +echo "root::12116:0:10000::::" > tst-usermod.deleted + +cp -p tst-usermod.noshadow $TEMPDIR/passwd +./usermod -P $TEMPDIR -L root > tst-usermod.run 2>&1 +diff -q -u tst-usermod.noshadow.locked $TEMPDIR/passwd +RET1=$? +./usermod -P $TEMPDIR -U root >> tst-usermod.run 2>&1 +diff -q -u tst-usermod.noshadow $TEMPDIR/passwd +RET2=$? + +cp -p tst-usermod.passwd $TEMPDIR/passwd +cp -p tst-usermod.shadow $TEMPDIR/shadow +./usermod -P $TEMPDIR -L root >> tst-usermod.run 2>&1 +diff -q -u tst-usermod.locked $TEMPDIR/shadow +RET3=$? +./usermod -P $TEMPDIR -U root >> tst-usermod.run 2>&1 +diff -q -u tst-usermod.shadow $TEMPDIR/shadow +RET4=$? + + +rm -rf $TEMPDIR +if [ $RET1 != 0 -o $RET2 != 0 -o $RET3 != 0 -o $RET4 != 0 ] ; then + exit 1 +else + exit 0 +fi diff --git a/src/useradd.8 b/src/useradd.8 new file mode 100644 index 0000000..7ded465 --- /dev/null +++ b/src/useradd.8 @@ -0,0 +1,165 @@ +.\" -*- nroff -*- +.\" Copyright (C) 2003, 2005, 2010 Thorsten Kukuk +.\" Author: Thorsten Kukuk +.\" +.\" This program is free software; you can redistribute it and/or modify +.\" it under the terms of the GNU General Public License version 2 as +.\" published by the Free Software Foundation. +.\" +.\" 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +.\" +.TH useradd 8 "May 2010" "pwdutils" +.SH NAME +useradd \- create a new user account +.SH SYNOPSIS +.TP 8 +\fBuseradd\fR [\fB-D \fIbinddn\fR] [\fB-P \fIpath\fR] [\fB-c \fIcomment\fR] [\fB-d \fIhomedir\fR] +.br +[\fB-e \fIexpire\fR] [\fB-f \fIinactive\fR] [\fB-G \fIgroup,...\fR] [\fB-g \fIgid\fR] +.br +[\fB-m \fR[\fB-k \fIskeldir\fR]] [\fB-o\fR] [\fB-p \fIpassword\fR] [\fB-u \fRuid\fR] +.br +[\fB-U \fIumask\fR] [\fB-r\fR] [\fB-s \fIshell\fR] [\fB--service \fIservice\fR] [\fB--help\fR] +.br +[\fB--usage\fR] [\fB-v\fR] [\fB--preferred-uid \fIuid\fR] \fIaccount\fR +.TP 8 +\fBuseradd\fR \fB--show-defaults\fR +.TP 8 +\fBuseradd\fR \fB--save-defaults\fR [\fB-d \fIhomedir\fR] [\fB-e \fIexpire\fR] [\fB-f \fIinactive\fR] +[\fB-g \fIgid\fR] [\fB-G \fIgroup,...\fR] [\fB-k \fIskeldir\fR] [\fB-U \fIumask\fR] [\fB-s \fIshell\fR] +.SH DESCRIPTION +\fBuseradd\fR creates a new user account using the default values +from \fI/etc/default/useradd\fR and the specified on the command line. +Depending on the command line options the new account will be added to +the system files or LDAP database, the home directory will be created +and the initial default files and directories will be copied. + +The account name must begin with an alphabetic character and the rest +of the string should be from the POSIX portable character class +([A-Za-z_][A-Za-z0-9_-.]*[A-Za-z0-9_-.$]). +.SH OPTIONS +.TP +.BI "\-c, \-\-comment" " comment" +This option specifies the users finger information. +.TP +.BI "\-d, \-\-home" " homedir" +This option specifies the users home directory. +If not specified, the default from \fI/etc/default/useradd\fR is used. +.TP +.BI "\-e, \-\-expire" " expire" +With this option the date when the account will be expired can +be changed. \fIexpiredate\fR has to be specified as number of +days since January 1st, 1970. The date may also be expressed in +the format YYYY-MM-DD. +If not specified, the default from \fI/etc/default/useradd\fR is used. +.TP +.BI "\-f, \-\-inactive" " inactive" +This option is used to set the number of days of inactivity after +a password has expired before the account is locked. A user whose +account is locked must contact the system administrator before +being able to use the account again. +A value of -1 disables this feature. +If not specified, the default from \fI/etc/default/useradd\fR is used. +.TP +.BI "\-G, \-\-groups" " group,..." +With this option a list of supplementary groups can be specified, +which the user should become a member of. Each group is separated +from the next one only by a comma, without whitespace. +If not specified, the default from \fI/etc/default/useradd\fR is used. +.TP +.BI "\-g, \-\-gid" " gid" +The group name or number of the user's main group. The group name +or number must refer to an already existing group. +If not specified, the default from \fI/etc/default/useradd\fR is used. +.TP +.BI "\-k, \-\-skel" " skeldir" +Specify an alternative skel directory. This option is only valid, +if the home directory for the new user should be created, too. +If not specified, the default from \fI/etc/default/useradd\fR or +\fI/etc/skel\fR is used. +.TP +.B "\-m, \-\-create-home" +Create home directory for new user account. +.TP +.B "\-o, \-\-non-unique" +Allow duplicate (non-unique) User IDs. +.TP +.BI "\-p, \-\-password" " password" +Encrypted password as returned by +.BR crypt (3) +for the new account. The default is to disable the account. +.TP +.BI "\-U, \-\-umask" " umask" +The permission mask is initialized to this value. It is used by +useradd for creating new home directories. The default +is taken from \fI/etc/default/useradd\fR. +.TP +.BI "\-u, \-\-uid" " uid" +Force the new userid to be the given number. This value must be +positive and unique. The default is to use the first free ID after +the greatest used one. The range from which the user ID is chosen +can be specified in \fI/etc/login.defs\fR. +.TP +.BI "\-\-preferred\-uid" " uid" +Set the new userid to the specified value if possible. If that value +is already in use the first free ID will be chosen as described +above. +.TP +.B "\-r, \-\-system" +Create a system account. A system account is an user with an UID +between SYSTEM_UID_MIN and SYSTEM_UID_MAX as defined in +\fI/etc/login.defs\fR, if no UID is specified. The GROUPS entry +in \fI/etc/default/useradd\fR is ignored, too. +.TP +.B "\-s, \-\-shell" " shell" +Specify user's login shell. The default for normal user accounts +is taken from \fI/etc/default/useradd\fR, the default for system +accounts is \fI/bin/false\fR. +.TP +.BI "\-\-service" " service" +Add the account to a special directory. The default is \fIfiles\fR, +but \fIldap\fR is also valid. +.TP +.BI "\-D, \-\-binddn" " binddn" +Use the Distinguished Name binddn to bind to the LDAP directory. +The user will be prompted for a password for simple authentication. +.TP +.BI "\-P, \-\-path" " path" +The \fIpasswd\fR and \fIshadow\fR files are located below +the specified directory path. \fBuseradd\fR will use this files, +not \fI/etc/passwd\fR and \fI/etc/shadow\fR. +.TP +.B "\-\-help" +Print a list of valid options with a short description. +.TP +.B "\-\-usage" +Print a short list of valid options. +.TP +.B "\-v, \-\-version" +Print the version number and exit. +.SH FILES +/etc/passwd \- user account information +.br +/etc/shadow \- shadow user account information +.br +/etc/group \- group information +.br +/etc/default/useradd \- default values for account creation +.br +/etc/skel \- directory containing default files +.SH SEE ALSO +.BR passwd (1), +.BR login.defs (5), +.BR passwd (5), +.BR shadow (5), +.BR userdel (8), +.BR usermod (8) +.SH AUTHOR +Thorsten Kukuk diff --git a/src/useradd.c b/src/useradd.c new file mode 100644 index 0000000..568e9be --- /dev/null +++ b/src/useradd.c @@ -0,0 +1,1917 @@ +/* Copyright (C) 2003, 2004, 2005, 2008, 2010 Thorsten Kukuk + Author: Thorsten Kukuk + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License version 2 as + published by the Free Software Foundation. + + 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#ifdef HAVE_LIBNSCD_H +#include +#endif + +#ifdef USE_LDAP +#include "libldap.h" +#endif + +#include "i18n.h" +#include "group.h" +#include "public.h" +#include "logging.h" +#include "logindefs.h" +#include "read-files.h" +#include "error_codes.h" + +static void +print_usage (FILE *stream, const char *program) +{ + fprintf (stream, _("Usage: %s ...\n"), program); +} + +static void +print_help (const char *program) +{ + print_usage (stdout, program); + fprintf (stdout, _("%s - create a new user\n\n"), program); + + fputs (_(" -c comment Set the GECOS field for the new account\n"), + stdout); + fputs (_(" --show-defaults Print default values\n"), stdout); + fputs (_(" --save-defaults Save modified default values\n"), stdout); + fputs (_(" -D binddn Use dn \"binddn\" to bind to the LDAP directory\n"), stdout); + fputs (_(" -d homedir Home directory for the new user\n"), stdout); + fputs (_(" -e expire Date on which the new account will be disabled\n"), + stdout); + fputs (_(" -f inactive Days after a password expires until account is \ +disabled\n"), stdout); + fputs (_(" -G group,... List of supplementary groups\n"), stdout); + fputs (_(" -g gid Name/number of the users primary group\n"), + stdout); + fputs (_(" -k skeldir Specify an alternative skel directory\n"), + stdout); + fputs (_(" -m Create home directory for the new user\n"), + stdout); + fputs (_(" -o Allow duplicate (non-unique) UID\n"), stdout); + fputs (_(" -P path Search passwd, shadow and group file in \"path\"\n"), + stdout); + fputs (_(" -p password Encrypted password as returned by crypt(3)\n"), + stdout); + fputs (_(" -u uid Force the new userid to be the given number\n"), + stdout); + fputs (_(" -U umask Umask value used for creating home directory\n"), + stdout); + fputs (_(" -r, --system Create a system account\n"), stdout); + fputs (_(" -s shell Name of the user's login shell\n"), stdout); + fputs (_(" --service srv Add account to nameservice 'srv'\n"), stdout); + fputs (_(" --help Give this help list\n"), stdout); + fputs (_(" --usage Give a short usage message\n"), stdout); + fputs (_(" -v, --version Print program version\n"), stdout); + fputs (_("Valid services for --service are: files, ldap\n"), stdout); +} + +static const char *program = "useradd"; + +static const char *useradd_default_file = "/etc/default/useradd"; + +static struct option long_options_all[] = { + {"comment", required_argument, NULL, 'c'}, + {"gecos", required_argument, NULL, 'c'}, +#ifdef USE_LDAP + {"binddn", required_argument, NULL, 'D'}, +#endif + {"home", required_argument, NULL, 'd'}, + {"expire", required_argument, NULL, 'e'}, + {"inactive", required_argument, NULL, 'f'}, + {"groups", required_argument, NULL, 'G'}, + {"gid", required_argument, NULL, 'g'}, + {"skel", required_argument, NULL, 'k'}, + {"create-home", no_argument, NULL, 'm'}, + {"non-unique", no_argument, NULL, 'o'}, + {"path", required_argument, NULL, 'P'}, + {"password", required_argument, NULL, 'p'}, + {"preferred-uid", required_argument, NULL, '\247'}, + {"save-defaults", no_argument, NULL, '\251'}, + {"show-defaults", no_argument, NULL, '\252'}, + {"service", required_argument, NULL, '\253'}, + {"system", no_argument, NULL, 'r'}, + {"shell", required_argument, NULL, 's'}, + {"uid", required_argument, NULL, 'u'}, + {"umask", required_argument, NULL, 'U'}, + {"version", no_argument, NULL, 'v'}, + {"usage", no_argument, NULL, '\254'}, + {"help", no_argument, NULL, '\255'}, + {NULL, 0, NULL, '\0'} +}; +static const char *short_options_all = "c:D:d:e:f:G:g:k:MmoP:p:rs:u:U:v"; + +static struct option long_options_D[] = { + {"home", required_argument, NULL, 'b'}, +#ifdef USE_LDAP + {"binddn", required_argument, NULL, '\250'}, +#endif + {"home", required_argument, NULL, 'd'}, + {"expire", required_argument, NULL, 'e'}, + {"inactive", required_argument, NULL, 'f'}, + {"groups", required_argument, NULL, 'G'}, + {"gid", required_argument, NULL, 'g'}, + {"skel", required_argument, NULL, 'k'}, + {"shell", required_argument, NULL, 's'}, + {"version", no_argument, NULL, 'v'}, + {"save-defaults", no_argument, NULL, '\251'}, + {"show-defaults", no_argument, NULL, '\252'}, + {"service", required_argument, NULL, '\253'}, + {"usage", no_argument, NULL, '\254'}, + {"help", no_argument, NULL, '\255'}, + {NULL, 0, NULL, '\0'} +}; +static const char *short_options_D = "b:Dd:e:f:G:g:k:s:v"; + +struct default_t +{ + gid_t group; + char *home; + long int inactive; + long int expire; + char *shell; + char *skel; + unsigned int groupscnt; + char **groups; + int create_mail_spool; + int umask; +}; + +/* This function converts a comma seperated list of groups + (a group can be a groupname or a group id) into a table + of group ids. It returns 0 on success. */ +static int +convert_grpopt_to_name (const char *arg, char **grouplist, gid_t *groupid, + const char *use_service) +{ + group_t *gr_data; + + if (isdigit (*arg)) + { + gid_t gid; + int err = strtoid (arg, &gid); + + if (err == -1) /* invalid number */ + { + fprintf (stderr, + _("%s: Invalid numeric argument `%s' for group ID.\n"), + program, arg); + return E_BAD_ARG; + } + gr_data = find_group_data (NULL, gid, use_service); + + if (gr_data == NULL || gr_data->service == S_NONE) + { + if (use_service) + { + fprintf (stderr, _("%s: Group `%u' not found in service `%s'.\n"), + program, gid, use_service); + return E_NOTFOUND; + } + else + { + fprintf (stderr, _("%s: Unknown group `%u'.\n"), program, gid); + return E_BAD_ARG; + } + } + } + else + { + gr_data = find_group_data (arg, 0, use_service); + if (gr_data == NULL || gr_data->service == S_NONE) + { + if (use_service) + { + fprintf (stderr, _("%s: Group `%s' not found in service `%s'.\n"), + program, arg, use_service); + return E_NOTFOUND; + } + else + { + fprintf (stderr, _("%s: Unknown group `%s'.\n"), program, arg); + return E_BAD_ARG; + } + } + } + + + if (grouplist) + *grouplist = strdup (gr_data->gr.gr_name); + if (groupid) + *groupid = gr_data->gr.gr_gid; + return 0; +} + +/* Load the config file (/etc/default/useradd) */ +static int +load_defaults (const char *configfile, struct default_t *data) +{ + FILE *fp; + char *buf = NULL; + size_t buflen = 0; + int errors = 0; + + fp = fopen (configfile, "r"); + if (NULL == fp) + return -1; + + + data->umask = -1; + + while (!feof (fp)) + { + char *tmp, *cp; +#if defined(HAVE_GETLINE) + ssize_t n = getline (&buf, &buflen, fp); +#elif defined (HAVE_GETDELIM) + ssize_t n = getdelim (&buf, &buflen, '\n', fp); +#else + ssize_t n; + + if (buf == NULL) + { + buflen = 8096; + buf = malloc (buflen); + } + buf[0] = '\0'; + fgets (buf, buflen - 1, fp); + if (buf != NULL) + n = strlen (buf); + else + n = 0; +#endif /* HAVE_GETLINE / HAVE_GETDELIM */ + cp = buf; + + if (n < 1) + break; + + tmp = strchr (cp, '#'); /* remove comments */ + if (tmp) + *tmp = '\0'; + while (isspace ((int) *cp)) /* remove spaces and tabs */ + ++cp; + if (*cp == '\0') /* ignore empty lines */ + continue; + + if (cp[strlen (cp) - 1] == '\n') + cp[strlen (cp) - 1] = '\0'; + + if (strncasecmp (cp, "GROUP=", 6) == 0) + { + struct group *grp; + gid_t grpid; + + if (cp[6] != '\0' && strtoid (&cp[6], &grpid) == 0) + /* GID in numeric form */ + data->group = grpid; + else if ((grp = getgrnam (&cp[6])) != NULL) + data->group = grp->gr_gid; + else + { + ++errors; + fprintf (stderr, _("%s: Unknown group `%s' in %s.\n"), + program, cp, configfile); + } + + continue; + } + else if (strncasecmp (cp, "HOME=", 5) == 0) + { + char *home; + + home = &cp[5]; + + if (strcspn (home, ":\n") != strlen (home) || *home != '/') + { + ++errors; + fprintf (stderr, _("%s: Invalid home directory `%s' in %s.\n"), + program, home, configfile); + } + else + data->home = strdup (home); + + continue; + } + else if (strncasecmp (cp, "INACTIVE=", 9) == 0) + { + long int inactive; + char *ep; + + inactive = strtol (&cp[9], &ep, 10); + if (*ep != '\0' || + ((inactive == LONG_MAX || inactive == LONG_MIN) + && errno == ERANGE)) /* invalid number */ + { + ++errors; + fprintf (stderr, _("%s: Invalid numeric argument `%s' for `INACTIVE' in %s.\n"), + program, &cp[9], configfile); + } + else + data->inactive = inactive; + continue; + } + else if (strncasecmp (cp, "EXPIRE=", 7) == 0) + { + if (cp[7] == '\0' || strcmp (&cp[7], "1969-12-31") == 0) + data->expire = -1; + else + { + long int expire; + char *ep; + + expire = str2date (&cp[7]); + if (expire == -1) + { + if (((expire = strtol (&cp[7], &ep, 10)) == 0 && *ep) || + expire < -1) + { + fprintf (stderr, + _("%s: Expiredate `%s' is no date and no integer value >= -1 in %s.\n"), + program, &cp[7], configfile); + ++errors; + } + } + else + data->expire = expire; + } + continue; + } + else if (strncasecmp (cp, "SHELL=", 6) == 0) + { + if (strcspn (&cp[6], ",=\":*\n") != strlen (&cp[6]) || + *&cp[6] != '/') + { + ++errors; + fprintf (stderr, _("%s: Invalid shell `%s' in %s.\n"), + program, &cp[6], configfile); + } + else + data->shell = strdup (&cp[6]); + + continue; + } + else if (strncasecmp (cp, "SKEL=", 5) == 0) + { + if (access (&cp[5], F_OK) != 0) + { + ++errors; + fprintf (stderr, + _("%s: Skel directory \"%s\" in %s does not exist.\n"), + program, &cp[5], configfile); + } + else + data->skel = strdup (&cp[5]); + continue; + } + else if (strncasecmp (cp, "GROUPS=", 7) == 0) + { + char *arg = strdupa (&cp[7]); + unsigned int err = 0, i, j; + + j = 1; + for (i = 0; i < strlen (arg); i++) + if (arg[i] == ',') + ++j; + + data->groups = malloc (sizeof (char *) * j); + data->groupscnt = 0; + + do + { + char *c = strchr (arg, ','); + if (c) + *c++ = '\0'; + + if (arg && *arg) + { + if (convert_grpopt_to_name (arg, + &data->groups[data->groupscnt], + NULL, NULL) != 0) + ++err; + else + { + data->groupscnt++; + if (data->groupscnt > j) + abort (); + } + } + arg = c; + } + while (arg); + + if (err) + { + data->groupscnt = 0; + free (data->groups); + data->groups = NULL; + ++errors; + } + continue; + } + else if (strncasecmp (cp, "CREATE_MAIL_SPOOL=", 18) == 0) + { + if (strcasecmp (&cp[18], "yes") == 0) + data->create_mail_spool = 1; + else if (strcasecmp (&cp[18], "no") == 0) + data->create_mail_spool = 0; + else + { + ++errors; + fprintf (stderr, _("%s: Invalid value `%s' for option CREATE_MAIL_SPOOL in %s.\n"), + program, &cp[18], configfile); + } + continue; + } + else if (strncasecmp (cp, "UMASK=", 6) == 0) + { + long int myumask; + char *ep; + + myumask = strtol (&cp[6], &ep, 0); + if (*ep != '\0' || + ((myumask == LONG_MAX || myumask == LONG_MIN) + && errno == ERANGE)) /* invalid number */ + { + ++errors; + fprintf (stderr, _("%s: Invalid numeric argument `%s' for `UMASK' in %s.\n"), + program, &cp[6], configfile); + } + else + data->umask = myumask; + continue; + } + } + fclose (fp); + + if (buf) + free (buf); + + /* If we don't had an UMASK= entry, try to get the UMASK value + from /etc/login.defs */ + if (data->umask == -1) + data->umask = getlogindefs_num ("UMASK", 077); + + return errors; +} + +static void +print_defaults (const struct default_t *data) +{ + unsigned int i; + + printf ("GROUP=%u\n", (unsigned int) data->group); + printf ("HOME=%s\n", data->home); + printf ("INACTIVE=%li\n", data->inactive); + if (data->expire == -1) + fputs ("EXPIRE=\n", stdout); + else + printf ("EXPIRE=%s\n", date2str (data->expire * SCALE)); + printf ("SHELL=%s\n", data->shell); + printf ("SKEL=%s\n", data->skel); + printf ("GROUPS="); + + for (i = 0; i < data->groupscnt; i++) + { + if (i != 0) + printf (","); + printf ("%s", data->groups[i]); + } + printf ("\n"); + + printf ("CREATE_MAIL_SPOOL=%s\n", data->create_mail_spool?"yes":"no"); + printf ("UMASK=0%o\n", data->umask); +} + +/* Write the config file (/etc/default/useradd) */ +static int +write_defaults (const char *configfile, struct default_t *data) +{ + const char *tmpsuffix = ".tmpXXXXXX"; + FILE *fp, *new_fp; + char *buf = NULL, *cp; + size_t buflen = 0; + char tmpname[strlen (configfile) + strlen (tmpsuffix) + 1]; + struct stat oldmode; + int new_fd, ret; + int group_written = 0, home_written = 0, inactive_written = 0; + int expire_written = 0, shell_written = 0, groups_written = 0; + int skel_written = 0, create_mail_spool_written = 0, umask_written = 0; + + fp = fopen (configfile, "r"); + if (NULL == fp) + return -1; + + cp = stpcpy (tmpname, configfile); + strcpy (cp, tmpsuffix); + + if (fstat (fileno (fp), &oldmode) < 0) + { + fprintf (stderr, _("Can't stat `%s': %m\n"), configfile); + fclose (fp); + return -1; + } + + /* Open a temp file */ + new_fd = mkstemp (tmpname); + if (new_fd == -1) + { + fprintf (stderr, _("Can't create `%s': %m\n"), tmpname); + fclose (fp); + return -1; + } + if (fchmod (new_fd, oldmode.st_mode) < 0) + { + fprintf (stderr, + _("Cannot change permissions for `%s': %s\n"), + tmpname, strerror (errno)); + fclose (fp); + close (new_fd); + unlink (tmpname); + return -1; + } + if (fchown (new_fd, oldmode.st_uid, oldmode.st_gid) < 0) + { + fprintf (stderr, + _("Cannot change owner/group for `%s': %s\n"), + tmpname, strerror (errno)); + fclose (fp); + close (new_fd); + unlink (tmpname); + return -1; + } + if (copy_xattr (configfile, tmpname) != 0) + { + fclose (fp); + close (new_fd); + unlink (tmpname); + return -1; + } + + new_fp = fdopen (new_fd, "w+"); + if (new_fp == NULL) + { + fprintf (stderr, _("Can't open `%s': %m\n"), configfile); + fclose (fp); + close (new_fd); + unlink (tmpname); + return -1; + } + + while (!feof (fp)) + { + char *tmp; +#if defined(HAVE_GETLINE) + ssize_t n = getline (&buf, &buflen, fp); +#elif defined (HAVE_GETDELIM) + ssize_t n = getdelim (&buf, &buflen, '\n', fp); +#else + ssize_t n; + + if (buf == NULL) + { + buflen = 8096; + buf = malloc (buflen); + } + buf[0] = '\0'; + fgets (buf, buflen - 1, fp); + if (buf != NULL) + n = strlen (buf); + else + n = 0; +#endif /* HAVE_GETLINE / HAVE_GETDELIM */ + + if (n < 1) + break; + + cp = strdupa (buf); + + tmp = strchr (cp, '#'); /* remove comments */ + if (tmp) + *tmp = '\0'; + while (isspace ((int) *cp)) /* remove spaces and tabs */ + ++cp; + if (*cp == '\0') /* ignore empty lines */ + { + fputs (buf, new_fp); + continue; + } + if (cp[strlen (cp) - 1] == '\n') + cp[strlen (cp) - 1] = '\0'; + + if (strncasecmp (cp, "GROUP=", 6) == 0) + { + fprintf (new_fp, "GROUP=%u\n", data->group); + group_written = 1; + continue; + } + else if (strncasecmp (cp, "HOME=", 5) == 0) + { + fprintf (new_fp, "HOME=%s\n", data->home); + home_written = 1; + continue; + } + else if (strncasecmp (cp, "INACTIVE=", 9) == 0) + { + fprintf (new_fp, "INACTIVE=%li\n", data->inactive); + inactive_written = 1; + continue; + } + else if (strncasecmp (cp, "EXPIRE=", 7) == 0) + { + if (data->expire < 0) + fputs ("EXPIRE=\n", new_fp); + else + fprintf (new_fp, "EXPIRE=%s\n", date2str (data->expire * SCALE)); + expire_written = 1; + continue; + } + else if (strncasecmp (cp, "SHELL=", 6) == 0) + { + fprintf (new_fp, "SHELL=%s\n", data->shell); + shell_written = 1; + continue; + } + else if (strncasecmp (cp, "SKEL=", 5) == 0) + { + fprintf (new_fp, "SKEL=%s\n", data->skel); + skel_written = 1; + continue; + } + else if (strncasecmp (cp, "GROUPS=", 7) == 0) + { + unsigned int i; + + fputs ("GROUPS=", new_fp); + + for (i = 0; i < data->groupscnt; i++) + { + if (i != 0) + fputs (",", new_fp); + fputs (data->groups[i], new_fp); + } + fputs ("\n", new_fp); + groups_written = 1; + continue; + } + else if (strncasecmp (cp, "CREATE_MAIL_SPOOL=", 18) == 0) + { + fprintf (new_fp, "CREATE_MAIL_SPOOL=%s\n", + data->create_mail_spool?"yes":"no"); + create_mail_spool_written = 1; + continue; + } + else if (strncasecmp (cp, "UMASK=", 6) == 0) + { + fprintf (new_fp, "UMASK=0%o\n", data->umask); + umask_written = 1; + continue; + } + + fputs (buf, new_fp); + } + + /* Now write all entries, for which we didn't had alredy + an entry in the default useradd file. */ + if (!group_written) + fprintf (new_fp, "GROUP=%u\n", data->group); + if (!home_written) + fprintf (new_fp, "HOME=%s\n", data->home); + if (!inactive_written) + fprintf (new_fp, "INACTIVE=%li\n", data->inactive); + if (!expire_written) + { + if (data->expire < 0) + fputs ("EXPIRE=\n", new_fp); + else + fprintf (new_fp, "EXPIRE=%s\n", date2str (data->expire * SCALE)); + } + if (!shell_written) + fprintf (new_fp, "SHELL=%s\n", data->shell); + if (!skel_written) + fprintf (new_fp, "SKEL=%s\n", data->skel); + if (!groups_written) + { + unsigned int i; + + fputs ("GROUPS=", new_fp); + + for (i = 0; i < data->groupscnt; i++) + { + if (i != 0) + fputs (",", new_fp); + fputs (data->groups[i], new_fp); + } + fputs ("\n", new_fp); + } + if (!create_mail_spool_written) + fprintf (new_fp, "CREATE_MAIL_SPOOL=%s\n", + data->create_mail_spool?"yes":"no"); + if (!umask_written) + fprintf (new_fp, "UMASK=0%o\n", data->umask); + + /* Close files. */ + fclose (fp); + fclose (new_fp); + + /* Rename temporary file back to config file name. */ + ret = rename (tmpname, configfile); + unlink (tmpname); + + if (buf) + free (buf); + + /* return return value of rename, if rename succeds, everything + is ok, else we have an error. */ + return ret; +} + +static struct passwd * +files_getpwnam (const char *name) +{ + enum nss_status status; + static int buflen = 256; + static char *buffer = NULL; + static struct passwd resultbuf; + + if (buffer == NULL) + buffer = malloc (buflen); + + while ((status = + files_getpwnam_r (name, &resultbuf, buffer, buflen, + &errno)) == NSS_STATUS_TRYAGAIN + && errno == ERANGE) + { + errno = 0; + buflen += 256; + buffer = realloc (buffer, buflen); + } + if (status == NSS_STATUS_SUCCESS) + return &resultbuf; + else + return NULL; +} + +static struct passwd * +files_getpwuid (uid_t uid) +{ + enum nss_status status; + static int buflen = 256; + static char *buffer = NULL; + static struct passwd resultbuf; + + if (buffer == NULL) + buffer = malloc (buflen); + + while ((status = files_getpwuid_r (uid, &resultbuf, buffer, buflen, &errno)) + == NSS_STATUS_TRYAGAIN && errno == ERANGE) + { + errno = 0; + buflen += 256; + buffer = realloc (buffer, buflen); + } + if (status == NSS_STATUS_SUCCESS) + return &resultbuf; + else + return NULL; +} + +static struct passwd * +files_getpwent (void) +{ + enum nss_status status; + static int buflen = 256; + static char *buffer = NULL; + static struct passwd resultbuf; + + if (buffer == NULL) + buffer = malloc (buflen); + + while ((status = files_getpwent_r (&resultbuf, buffer, buflen, &errno)) + == NSS_STATUS_TRYAGAIN && errno == ERANGE) + { + errno = 0; + buflen += 256; + buffer = realloc (buffer, buflen); + } + if (status == NSS_STATUS_SUCCESS) + return &resultbuf; + else + return NULL; +} + +/* find_free_uid - find the first, free available UID. */ +static uid_t +find_free_uid (int is_system_account, int have_extrapath) +{ + const struct passwd *pwd; + uid_t userid, uid_min, uid_max; + + if (is_system_account) + { + /* Some special handling for LSB. LSB defines + the UID range as: + 1 - 99: fix assigned system accounts + 100 - 499: dynamic assigned system accounts + If we use -r, try to get a uid from the dynamic + assigned range. */ + uid_min = getlogindefs_unum ("SYSTEM_UID_MIN", 100); + uid_max = getlogindefs_unum ("SYSTEM_UID_MAX", 499); + } + else + { + uid_min = getlogindefs_unum ("UID_MIN", 500); + uid_max = getlogindefs_unum ("UID_MAX", 60000); + } + + userid = uid_min; + + /* Search the entire password file, looking for the + largest unused value. If uid_max does already exists, + skip this. */ + if (getpwuid (uid_max) == NULL) + { + setpwent (); + while ((pwd = getpwent ())) + { + if (pwd->pw_uid >= userid) + { + if (pwd->pw_uid > uid_max) + continue; + userid = pwd->pw_uid + 1; + } + } + if (have_extrapath && userid != uid_max + 1) + { + /* If the -P flag is given, not only search in the + "official" database, but also in the extra one. */ + while ((pwd = files_getpwent ())) + { + if (pwd->pw_uid >= userid) + { + if (pwd->pw_uid > uid_max) + continue; + userid = pwd->pw_uid + 1; + } + } + } + } + else + userid = uid_max + 1; /* uid_max exists, so this will be + the result of the above loop. */ + + /* If the UID we found is equal to UID_MAX+1, we will step + through the whole UID_MIN - UID_MAX range and search for + the first free UID. */ + if (userid == uid_max + 1) + { + for (userid = uid_min; userid < uid_max; userid++) + if (getpwuid (userid) == NULL) + { + if (have_extrapath) + { + /* The UID is not used in the normal database, now + look in the extra one, too. */ + if (files_getpwuid (userid) == NULL) + break; + } + else + break; + } + + if (userid == uid_max) + { + sec_log (program, MSG_NO_FREE_UID, uid_min, uid_max); + fprintf (stderr, _("%s: Can't get unique uid in range %u - %u.\n"), + program, uid_min, uid_max); + exit (E_FAILURE); + } + } + return userid; +} + +static char ** +add_gr_mem (const char *name, char **gr_mem) +{ + char **groups; + unsigned int i; + int already_added = 0; + + i = 0; + while (gr_mem[i]) + { + if (strcmp (gr_mem[i], name) == 0) + already_added = 1; + ++i; + } + ++i; /* for trailing NULL pointer */ + + if (!already_added) + ++i; + + groups = malloc (i * sizeof (char *)); + i = 0; + while (gr_mem[i]) + { + groups[i] = strdup (gr_mem[i]); + ++i; + } + + if (!already_added) + { + groups[i] = strdup (name); + ++i; + } + + groups[i] = NULL; + + return groups; +} + +/* Create the users mail spool file if it does not exist. The + permissions we be 600, if the mail directory is worldwide writeable, + else 660 onwed by the user and group 'mail'. */ +static int +create_mail_file (const char *user, uid_t uid, gid_t user_gid) +{ + int mode = 0600; + gid_t gid = user_gid; + int fd; + char *fname; + struct stat st; + char *cp; + + if ((fname = malloc (strlen (user) + + strlen (_PATH_MAILDIR) + 2)) == NULL) + { + fputs ("running out of memory!\n", stderr); + return E_MAIL_SPOOL; + } + cp = stpcpy (fname, _PATH_MAILDIR); + *cp++ = '/'; + strcpy (cp, user); + + if (access (fname, R_OK) == 0) + return 0; + + if (stat (_PATH_MAILDIR, &st) == -1) + { + fprintf (stderr, _("%s: Can't stat `%s': %m\n"), + program, _PATH_MAILDIR); + free (fname); + return E_MAIL_SPOOL; + } + + /* if directory is not worldwide writeable, the new file needs + write permissions for group 'mail'. */ + if ((st.st_mode & S_IWOTH) != S_IWOTH) + { + int buflen = 256; + char *buffer = alloca (buflen); + struct group resultbuf; + struct group *gr; + + while (getgrnam_r ("mail", &resultbuf, buffer, buflen, &gr) != 0 + && errno == ERANGE) + { + errno = 0; + buflen += 256; + buffer = alloca (buflen); + } + + /* Only writeable for group 'mail', if this group exists. */ + if (gr) + { + gid = gr->gr_gid; + mode = 0660; + } + else + fprintf (stderr, + _("%s: No group named \"mail\" exists, creating mail spool with mode 0600.\n"), + program); + } + + fd = open (fname, O_CREAT|O_EXCL|O_WRONLY|O_TRUNC, 0); + if (fd == -1) + { + fprintf (stderr, + _("%s: Can't create mail spool for user %s.\n"), + program, user); + free (fname); + return E_MAIL_SPOOL; + } + else + { + if (fchown (fd, uid, gid) < 0) + { + fprintf (stderr, + _("Cannot change owner/group for `%s': %s\n"), + fname, strerror (errno)); + unlink (fname); + free (fname); + close (fd); + return E_MAIL_SPOOL; + } + if (fchmod (fd, mode) < 0) + { + fprintf (stderr, + _("Cannot change permissions for `%s': %s\n"), + fname, strerror (errno)); + unlink (fname); + free (fname); + close (fd); + return E_MAIL_SPOOL; + } + close (fd); + } + + free (fname); + + return 0; +} + + +/* Create the users home directory if it does not exist. The + permissions will be calculated from UMASK in /etc/default/useradd. */ +static int +create_home_directory (const char *home, uid_t uid, gid_t gid, + const char *skeldir, int home_umask) +{ + int retval = 0; + + if (home == NULL || *home == '\0') + return E_HOMEDIR; + + if (access (home, F_OK) != 0) + { + char path[strlen (home) + 2]; + char *bhome, *cp; + + path[0] = '\0'; + bhome = strdup (home); + ++bhome; + + /* Check for every part of the path, if the directory + exists. If not, create it with permissions 755 and + owner root:root. */ + cp = strtok (bhome, "/"); + while (cp) + { + strcat (path, "/"); + strcat (path, cp); + if (access (path, F_OK) != 0) + { + if (mkdir (path, 0) != 0) + { + fprintf (stderr, + _("%s: Cannot create directory `%s'.\n"), + program, path); + return E_HOMEDIR; + } + if (chown (path, 0, 0) < 0) + fprintf (stderr, _("%s: Warning: chown on `%s' failed: %m\n"), + program, path); + if (chmod (path, 0755) < 0) + fprintf (stderr, _("%s: Warning: chmod on `%s' failed: %m\n"), + program, path); + } + cp = strtok (NULL, "/"); + } + if (chown (home, uid, gid) < 0) + { + fprintf (stderr, + _("Cannot change owner/group for `%s': %s\n"), + home, strerror (errno)); + retval = E_HOMEDIR; + } + if (chmod (home, 0777 & ~home_umask) < 0) + { + fprintf (stderr, _("Cannot change permissions for `%s': %s\n"), + home, strerror (errno)); + retval = E_HOMEDIR; + } + + if (skeldir != NULL && *skeldir != '\0' && access (skeldir, F_OK) == 0) + { + if (copy_dir_rec (skeldir, home, 0, uid, gid) != 0) + { + fprintf (stderr, _("%s: Copying of skel directory failed.\n"), + program); + retval = E_HOMEDIR; + } + } + } + else if (skeldir != NULL && *skeldir != '\0') + { + /* Home directory already exits, don't copy skel directory again. */ + fprintf (stderr, + _("%s: Warning: home directory already exists, not modifying it.\n"), + program); + } + + return retval; +} + +int +main (int argc, char **argv) +{ + struct default_t dflt = + { 100, "/home", -1, -1, "/bin/bash", "/etc/skel", 0, NULL, 0, 077}; + struct option *long_options = long_options_all; + const char *short_options = short_options_all; + char *use_service = NULL; +#ifdef USE_LDAP + char *binddn = NULL; +#endif + char *skeldir = NULL; + char *new_account; + char *new_group = NULL; + char *new_comment = ""; + char *new_home = NULL; + char *new_shell = NULL; + char *new_password = NULL; + char *new_groups_arg = NULL; + char **new_groups = NULL; + unsigned int new_groupscnt = 0; + uid_t new_uid = 0; + int prefer_uid = 0; + int know_uid = 0; + int system_account = 0; + int non_unique = 0; + int have_extrapath = 0; + int create_homedir = 0; + int modify_defaults = 0; + int broken_default_useradd = 0; + +#ifdef ENABLE_NLS + setlocale (LC_ALL, ""); + bindtextdomain (PACKAGE, LOCALEDIR); + textdomain (PACKAGE); +#endif + + open_sec_log (program); + + /* Before going any further, raise the ulimit and ignore + signals. */ + + init_environment (); + broken_default_useradd = load_defaults (useradd_default_file, &dflt); + + /* If the first argument is "-D" and next one also starts with "-", + go into edit mode. */ + if ((argc == 2 && (strncmp (argv[1], "--show", 6) == 0 || + strcmp (argv[1], "-D") == 0)) || + (argc > 2 && (strncmp (argv[1], "--save", 6) == 0 || + strcmp (argv[1], "-D") == 0) && argv[2][0] == '-')) + { + if (broken_default_useradd) + { + fprintf (stderr, _("%s: Reading of `%s' was not successful.\n"), + program, useradd_default_file); + return E_LOGIN_DEFS; + } + + if (argc == 2) + { + print_defaults (&dflt); + return E_SUCCESS; + } + short_options = short_options_D; + long_options = long_options_D; + modify_defaults = 1; + } + + while (1) + { + int c; + int option_index = 0; + + c = getopt_long (argc, argv, short_options, + long_options, &option_index); + if (c == (-1)) + break; + switch (c) + { + case 'c': + if (strcspn (optarg, ":\n") != strlen (optarg)) + { + fprintf (stderr, _("%s: Invalid comment `%s'.\n"), + program, optarg); + return E_BAD_ARG; + } + new_comment = optarg; + break; + case '\250': + case 'D': +#ifdef USE_LDAP + if (!modify_defaults) + binddn = optarg; +#endif + break; + case 'b': /* for compatibility with shadow useradd. */ + case 'd': + if (check_home (optarg) == -1) + { + fprintf (stderr, _("%s: Invalid home directory `%s'.\n"), + program, optarg); + return E_BAD_ARG; + } + new_home = optarg; + break; + case 'e': + if (strcmp (optarg, "1969-12-31") == 0) + dflt.expire = -1; + else + { + long int expire; + char *cp; + + expire = str2date (optarg); + if (expire == -1) + { + if (((expire = strtol (optarg, &cp, 10)) == 0 && *cp) || + expire < -1) + { + fprintf (stderr, + _("%s: Expiredate `%s' is no date and no integer value >= -1.\n"), + program, optarg); + return E_BAD_ARG; + } + } + dflt.expire = expire; + } + break; + case 'f': + { + long int inactive; + char *cp; + + inactive = strtol (optarg, &cp, 10); + if (*cp != '\0') /* invalid number */ + { + fprintf (stderr, _("%s: Invalid numeric argument `%s' for `-f'.\n"), + program, optarg); + return E_BAD_ARG; + } + dflt.inactive = inactive; + } + break; + case 'G': + /* Only save the arguments for later checking. We can find a + -P option later. */ + new_groups_arg = optarg; + break; + case 'g': + new_group = optarg; + break; + case 'k': + if (access (optarg, F_OK) != 0) + { + fprintf (stderr, + _("%s: Skel directory `%s' does not exist.\n"), + program, optarg); + return E_BAD_ARG; + } + skeldir = strdup (optarg); + break; + case 'M': + /* This is the default: don't create users home dir. + Ignored for RedHat/PLD useradd compatibility. */ + break; + case 'm': + create_homedir = 1; + break; + case 'o': + non_unique = 1; + break; + case 'P': + files_etc_dir = strdup (optarg); + have_extrapath = 1; + /* If -P option is used, set use_service to "files" if not + already set through an option. If we don't limitate to + service files, we can get trouble finding the right + source. */ + if (!use_service) + use_service = "files"; + break; + case 'p': /* set encrypted password */ + if (strcspn (optarg, ":\n") != strlen (optarg)) + { + fprintf (stderr, _("%s: Invalid characters in password `%s'.\n"), + program, optarg); + return E_BAD_ARG; + } + new_password = optarg; + break; + case 'r': + system_account = 1; + break; + case 's': + if (strcspn (optarg, ",=\":*\n") != strlen (optarg) || + *optarg != '/') + { + fprintf (stderr, _("%s: Invalid shell `%s'.\n"), + program, optarg); + return E_BAD_ARG; + } + new_shell = optarg; + break; + case 'u': + if (strtoid (optarg, &new_uid) == -1) /* invalid number */ + { + fprintf (stderr, _("%s: Invalid numeric argument `%s' for User ID.\n"), + program, optarg); + return E_BAD_ARG; + } + know_uid = 1; + break; + case 'U': + { + long int myumask; + char *cp; + + myumask = strtol (optarg, &cp, 0); + if (*cp != '\0') /* invalid number */ + { + fprintf (stderr, _("%s: Invalid numeric argument `%s' for `-U'.\n"), + program, optarg); + return E_BAD_ARG; + } + dflt.umask = myumask; + } + break; + case '\247': + if (strtoid (optarg, &new_uid) == -1) /* invalid number */ + { + fprintf (stderr, _("%s: Invalid numeric argument `%s' for User ID.\n"), + program, optarg); + return E_BAD_ARG; + } + prefer_uid = 1; + break; + case '\251': + case '\252': + if (!modify_defaults) + { + print_error (program); + return E_USAGE; + } + break; + case '\253': + if (use_service != NULL) + { + print_usage (stderr, program); + return E_BAD_ARG; + } + + if (strcasecmp (optarg, "files") == 0) + use_service = "files"; +#ifdef USE_LDAP + else if (strcasecmp (optarg, "ldap") == 0) + use_service = "ldap"; +#endif + else + { + fprintf (stderr, _("Service `%s' not supported.\n"), optarg); + print_usage (stderr, program); + return E_BAD_ARG; + } + break; + case '\255': + print_help (program); + return 0; + case 'v': + print_version (program, "2008"); + return 0; + case '\254': + print_usage (stdout, program); + return 0; + default: + print_error (program); + return E_USAGE; + } + } + + if(know_uid && prefer_uid) + { + fprintf (stderr, _("%s: You cannot use --uid and --preferred-uid at the same time.\n"), + program); + return E_BAD_ARG; + } + + if(!know_uid && prefer_uid) + { + know_uid = 1; + } + + if (new_group) + { + int retval; + gid_t gid; + + if ((retval = convert_grpopt_to_name (new_group, NULL, + &gid, use_service)) != 0) + return retval; + dflt.group = gid; + } + + if (new_groups_arg) + { + char *arg = new_groups_arg; + unsigned int errors = 0, i, j; + + j = 1; + for (i = 0; i < strlen (arg); i++) + if (arg[i] == ',') + ++j; + + new_groups = malloc (sizeof (char *) * j); + new_groupscnt = 0; + + do + { + char *cp = strchr (arg, ','); + if (cp) + *cp++ = '\0'; + + if (arg && *arg) + { + if (convert_grpopt_to_name (arg, + &new_groups[new_groupscnt], + NULL, use_service) != 0) + ++errors; + else + { + new_groupscnt++; + if (new_groupscnt > j) + abort (); + } + } + arg = cp; + } + while (arg); + + if (errors) + { + /* XXX This is more a guess than something else. */ + if (files_etc_dir) + return E_NOTFOUND; + else + return E_BAD_ARG; + } + if (modify_defaults) + { + dflt.groupscnt = new_groupscnt; + dflt.groups = new_groups; + } + } + + argc -= optind; + argv += optind; + + + if (new_password == NULL) + { + if (system_account) + new_password = "*"; + else + new_password = "!"; + } + + if (argc > 1) + { + fprintf (stderr, _("%s: Too many arguments.\n"), program); + print_error (program); + return E_USAGE; + } + else if (argc == 0 && !modify_defaults) + { + fprintf (stderr, _("%s: Too few arguments.\n"), program); + print_error (program); + return E_USAGE; + } + else if (skeldir && !(create_homedir || modify_defaults)) + { + print_usage (stderr, program); + return E_USAGE; + } + else + { + int buflen = 256; + char *buffer = alloca (buflen); + struct passwd resultbuf; + struct passwd *pw; + + /* Determine our own user name for PAM authentication. */ + while (getpwuid_r (getuid (), &resultbuf, buffer, buflen, &pw) != 0 + && errno == ERANGE) + { + errno = 0; + buflen += 256; + buffer = alloca (buflen); + } + + if (!pw) + { + sec_log (program, MSG_NO_ACCOUNT_FOUND, getuid ()); + fprintf (stderr, _("%s: Cannot determine your user name.\n"), + program); + return E_UNKNOWN_USER; + } + + if (do_authentication (program, pw->pw_name, NULL) != 0) + { + sec_log (program, MSG_PERMISSION_DENIED, pw->pw_name, + pw->pw_uid, getuid ()); + return E_NOPERM; + } + } + + if (modify_defaults) + { + /* -D option was given and we plan to modify + entries in /etc/default/useradd. */ + + if (new_home) + dflt.home = new_home; + + if (new_shell) + dflt.shell = new_shell; + + if (skeldir) + dflt.skel = skeldir; + + if (write_defaults (useradd_default_file, &dflt) != 0) + { + sec_log (program, MSG_UPDATING_DEFAULT_CONFIG_FAILED, + useradd_default_file, getuid ()); + fprintf (stderr, _("%s: Writing of `%s' was not successful.\n"), + program, useradd_default_file); + return E_LOGIN_DEFS; + } + + sec_log (program, MSG_CONFIG_DEFAULTS_CHANGED, + dflt.group, new_home, dflt.shell, dflt.inactive, + date2str(DAY*dflt.expire), getuid ()); + + return E_SUCCESS; + } + + + /* After this, we can start creating the new account. */ + if (know_uid && !non_unique) + { + if (getpwuid (new_uid) != NULL || + (have_extrapath && files_getpwuid (new_uid) != NULL)) + { + if(prefer_uid) + { + /* the specified uid is a preferred one so we can just + * pick another one */ + know_uid = 0; + } + else + { + sec_log (program, MSG_UID_NOT_UNIQUE, new_uid, getuid ()); + fprintf (stderr, _("%s: UID %u is not unique.\n"), + program, new_uid); + return E_UID_IN_USE; + } + } + } + + new_account = argv[0]; + if (check_name (new_account) != 0) + { + sec_log (program, MSG_USER_NAME_INVALID, + new_account, getuid ()); + fprintf (stderr, _("%s: Invalid account name `%s'.\n"), + program, new_account); + return E_BAD_ARG; + } + + if (system_account && new_shell == NULL) + new_shell = "/bin/false"; + + /* Lock passwd file, so that a concurrent useradd process will not + add the user a second time or a second user with the same uid. */ + if ((use_service == NULL || strcmp (use_service, "files") == 0) && + lock_database () != 0) + { + sec_log (program, MSG_PASSWD_FILE_ALREADY_LOCKED); + fputs (_("Cannot lock password file: already locked.\n"), stderr); + return E_PWDBUSY; + } + else if (getpwnam (new_account) != NULL || + (have_extrapath && files_getpwnam (new_account) != NULL)) + { /* User does already exists. */ + sec_log (program, MSG_USER_ALREADY_EXISTS, new_account, getuid ()); + fprintf (stderr, _("%s: Account `%s' already exists.\n"), + program, new_account); + return E_NAME_IN_USE; + } + else + { + user_t pw_data; + char homebuf[strlen (dflt.home) + strlen (new_account) + 2]; + char shadowfile[strlen (files_etc_dir) + 8]; + char *cp; + unsigned int i; + int retval = E_SUCCESS; + + memset (&pw_data, 0, sizeof (pw_data)); + + /* check if we have shadow support. */ + cp = stpcpy (shadowfile, files_etc_dir); + strcpy (cp, "/shadow"); + pw_data.use_shadow = (access (shadowfile, F_OK) == 0); + if (use_service) + { + if (strcmp (use_service, "files") == 0) + pw_data.service = S_LOCAL; + else if (strcmp (use_service, "ldap") == 0) + pw_data.service = S_LDAP; + } + else + pw_data.service = S_LOCAL; + + pw_data.todo = DO_CREATE; + + if (new_home == NULL) + { + snprintf (homebuf, sizeof (homebuf), "%s/%s", dflt.home, + new_account); + new_home = homebuf; + } + + pw_data.pw.pw_name = new_account; + if (pw_data.use_shadow) + pw_data.pw.pw_passwd = "x"; + else + pw_data.pw.pw_passwd = new_password; + + pw_data.pw.pw_uid = know_uid ? new_uid : find_free_uid (system_account, + have_extrapath); + pw_data.pw.pw_gid = dflt.group; + pw_data.pw.pw_gecos = new_comment; + pw_data.pw.pw_dir = new_home; + pw_data.pw.pw_shell = new_shell ? : dflt.shell; + + if (pw_data.use_shadow) + { + pw_data.sp.sp_namp = new_account; + pw_data.sp.sp_pwdp = new_password; + pw_data.sp.sp_lstchg = time ((time_t *) 0) / (24L * 3600L); + pw_data.sp.sp_min = getlogindefs_num ("PASS_MIN_DAYS", -1); + pw_data.sp.sp_max = getlogindefs_num ("PASS_MAX_DAYS", -1); + pw_data.sp.sp_warn = getlogindefs_num ("PASS_WARN_AGE", -1); + pw_data.sp.sp_inact = dflt.inactive; + pw_data.sp.sp_expire = dflt.expire; + pw_data.sp.sp_flag = -1; + } + + sec_log (program, MSG_NEW_USER_ADDED, + pw_data.pw.pw_name, (unsigned int) pw_data.pw.pw_uid, + (unsigned int) pw_data.pw.pw_gid, pw_data.pw.pw_dir, + pw_data.pw.pw_shell, getuid ()); + + /* Clear old log entries, but only if this UID is not shared + with another account. */ + if (getpwuid (pw_data.pw.pw_uid) == NULL && + (!have_extrapath || files_getpwuid (pw_data.pw.pw_uid) == NULL)) + { + int fd; + + if ((fd = open ("/var/log/faillog", O_RDWR)) >= 0) + { + struct faillog fl; + + memset (&fl, 0, sizeof (fl)); + if ((lseek (fd, (off_t) sizeof (fl) * pw_data.pw.pw_uid, SEEK_SET) + == (off_t)-1) || (write (fd, &fl, sizeof (fl)) == -1)) + fprintf (stderr, + _("%s: Error: Cannot clear old faillog entry: %s\n"), + program, strerror (errno)); + close (fd); + } + + if ((fd = open (_PATH_LASTLOG, O_RDWR, 0)) >= 0) + { + struct lastlog ll; + + memset (&ll, 0, sizeof (ll)); + if ((lseek (fd, (off_t) sizeof (ll) * pw_data.pw.pw_uid, SEEK_SET) + == (off_t)-1) || (write (fd, &ll, sizeof (ll)) == -1)) + fprintf (stderr, + _("%s: Error: Cannot clear old lastlog entry: %s\n"), + program, strerror (errno)); + close (fd); + } + } + +#ifdef USE_LDAP + if (pw_data.service == S_LDAP) + { + if (binddn == NULL) + { + binddn = get_caller_dn (); + if (binddn == NULL) + { + fprintf (stderr, _("%s: Cannot add user to LDAP database without DN.\n"), + program); + } + else pw_data.binddn = strdup (binddn); + } + else + pw_data.binddn = strdup (binddn); + + if (pw_data.oldclearpwd == NULL) + { + cp = get_ldap_password (pw_data.binddn); + + if (cp) + pw_data.oldclearpwd = strdup (cp); + else + { + fprintf (stderr, + _("%s: User not added to LDAP database.\n"), + program); + return E_FAILURE; + } + } + } +#endif + + if (write_user_data (&pw_data, 1) != 0) + return E_FAILURE; + + /* If user does not specify extra secondary groups, add the + default one. With one exception: Don't add default extra + groups to system accounts. */ + if (new_groups == NULL && !system_account) + { + new_groupscnt = dflt.groupscnt; + new_groups = dflt.groups; + } + + for (i = 0; i < new_groupscnt; i++) + { + group_t *gr_data = find_group_data (new_groups[i], 0, use_service); + + if (gr_data == NULL || gr_data->service == S_NONE) + { + if (use_service == NULL) + fprintf (stderr, + _("%s: ERROR: Cannot find group `%s' anymore!\n"), + program, new_groups[i]); + else + fprintf (stderr, + _("%s: Cannot find group `%s' in service `%s', ignored.\n"), + program, new_groups[i], use_service); + retval = E_NOTFOUND; + } + else + { + gr_data->todo = DO_MODIFY; +#ifdef USE_LDAP + if (gr_data->service == S_LDAP) + { + if (binddn == NULL) + { + binddn = get_caller_dn (); + if (binddn == NULL) + { + fprintf (stderr, + _("%s: Cannot add user to groups stored in LDAP database without DN.\n"), + program); + } + } + + if (binddn == NULL) + { + fprintf (stderr, + _("%s: User not added to LDAP group `%s'.\n"), + program, gr_data->gr.gr_name); + free_group_t (gr_data); + retval = E_GRP_UPDATE; + continue; + } + + gr_data->binddn = strdup (binddn); + + if (pw_data.oldclearpwd == NULL) + { + cp = get_ldap_password (binddn); + + if (cp) + pw_data.oldclearpwd = strdup (cp); + else + { + fprintf (stderr, + _("%s: User not added to LDAP group `%s'.\n"), + program, gr_data->gr.gr_name); + free_group_t (gr_data); + retval = E_GRP_UPDATE; + continue; + } + } + + if (pw_data.oldclearpwd) + gr_data->oldclearpwd = strdup (pw_data.oldclearpwd); + } +#endif + gr_data->new_gr_mem = add_gr_mem (pw_data.pw.pw_name, + gr_data->gr.gr_mem); + if (write_group_data (gr_data, 1) != 0) + { + fprintf (stderr, + _("%s: User not added to LDAP group `%s'.\n"), + program, gr_data->gr.gr_name); + retval = E_GRP_UPDATE; + } + else + { + sec_log (program, MSG_USER_ADDED_TO_GROUP, + pw_data.pw.pw_name, gr_data->gr.gr_name, + gr_data->gr.gr_gid, getuid ()); + } + } + free_group_t (gr_data); + } + +#ifdef HAVE_NSCD_FLUSH_CACHE + /* flush NSCD cache, else creating of home directory could fail + because of unknown user. */ + nscd_flush_cache ("passwd"); + nscd_flush_cache ("group"); +#endif + + if (use_service == NULL || strcmp (use_service, "files") == 0) + ulckpwdf (); + + if (dflt.create_mail_spool) + { + int ret = create_mail_file (pw_data.pw.pw_name, + pw_data.pw.pw_uid, + pw_data.pw.pw_gid); + if (ret != 0) + return ret; + sec_log (program, MSG_MAIL_FILE_CREATED, + pw_data.pw.pw_name, getuid ()); + } + + if (create_homedir) + { + int ret = create_home_directory (new_home, pw_data.pw.pw_uid, + pw_data.pw.pw_gid, + skeldir ? : dflt.skel, dflt.umask); + if (ret != 0) + return ret; + + sec_log (program, MSG_HOME_DIR_CREATED, + pw_data.pw.pw_name, pw_data.pw.pw_uid, new_home, + getuid ()); + } + + i = call_script ("USERADD_CMD", pw_data.pw.pw_name, pw_data.pw.pw_uid, + pw_data.pw.pw_gid, pw_data.pw.pw_dir, program); + if (i != 0) + { + fprintf (stderr, _("%s: USERADD_CMD fails with exit code %d.\n"), + program, i); + retval = E_FAILURE; + } + + return retval; + } + + return E_SUCCESS; +} diff --git a/src/userdel.8 b/src/userdel.8 new file mode 100644 index 0000000..ca97c05 --- /dev/null +++ b/src/userdel.8 @@ -0,0 +1,79 @@ +.\" -*- nroff -*- +.\" Copyright (C) 2003 Thorsten Kukuk +.\" Author: Thorsten Kukuk +.\" +.\" This program is free software; you can redistribute it and/or modify +.\" it under the terms of the GNU General Public License version 2 as +.\" published by the Free Software Foundation. +.\" +.\" 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +.\" +.TH userdel 8 "October 2003" "pwdutils" +.SH NAME +userdel \- delete an user account +.SH SYNOPSIS +.TP 8 +\fBuserdel\fR [\fB-D \fIbinddn\fR] [\fB-P \fIpath\fR] [\fB-r\fR[\fB-f\fR]] +.br +[\fB--service \fIservice\fR] [\fB--help\fR] [\fB-u\fR] [\fB-v\fR] \fIaccount\fR +.SH DESCRIPTION +\fBuserdel\fR deletes an user account from the local system files or +a LDAP database and removes all entries that refer to \fIaccount\fR from the +group database. Before the \fIaccount\fR is removed, the USERDEL_PRECMD +command as defined in +.BR login.defs (5) +is called, after removal the USERDEL_POSTCMD command is called. +.SH OPTIONS +.TP +.B "\-r, \-\-remove-home" +Remove the whole home directory and the mail spool of the specified +account. Files located in other directories will have to be searched +for and deleted manually. +.TP +.B "\-f, \-\-force" +This option is used to force the removal of files, even if not owned +by the account. +.TP +.BI "\-\-service" " service" +Add the account to a special directory. The default is \fIfiles\fR, +but \fIldap\fR is also valid. +.TP +.BI "\-D, \-\-binddn" " binddn" +Use the Distinguished Name binddn to bind to the LDAP directory. +The user will be prompted for a password for simple authentication. +.TP +.BI "\-P, \-\-path" " path" +The \fIpasswd\fR and \fIshadow\fR files are located below +the specified directory path. \fBchpasswd\fR will use this files, +not \fI/etc/passwd\fR and \fI/etc/shadow\fR. +.TP +.B "\-\-help" +Print a list of valid options with a short description. +.TP +.B "\-u, \-\-usage" +Print a short list of valid options. +.TP +.B "\-v, \-\-version" +Print the version number and exit. +.SH FILES +passwd \- user account information +.br +shadow \- shadow user account information +.br +group \- group information +.SH SEE ALSO +.BR passwd (1), +.BR login.defs (5), +.BR passwd (5), +.BR shadow (5), +.BR useradd (8), +.BR usermod (8) +.SH AUTHOR +Thorsten Kukuk diff --git a/src/userdel.c b/src/userdel.c new file mode 100644 index 0000000..f3a5806 --- /dev/null +++ b/src/userdel.c @@ -0,0 +1,667 @@ +/* Copyright (C) 2003, 2004, 2005, 2009, 2010 Thorsten Kukuk + Author: Thorsten Kukuk + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License version 2 as + published by the Free Software Foundation. + + 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#ifdef HAVE_LIBNSCD_H +#include +#endif + +#ifdef USE_LDAP +#include "libldap.h" +#endif + +#include "i18n.h" +#include "public.h" +#include "group.h" +#include "logging.h" +#include "logindefs.h" +#include "read-files.h" +#include "error_codes.h" + +static void +print_usage (FILE *stream, const char *program) +{ + fprintf (stream, _("Usage: %s [-D binddn] [-P path] [-r [-f]] user\n"), program); +} + +static void +print_help (const char *program) +{ + print_usage (stdout, program); + fprintf (stdout, _("%s - delete a user and related files\n\n"), program); + + fputs (_(" -r Remove home directory and mail spool\n"), + stdout); + fputs (_(" -f Force removal of files, even if not owned by user\n"), + stdout); +#ifdef USE_LDAP + fputs (_(" -D binddn Use dn \"binddn\" to bind to the LDAP directory\n"), + stdout); +#endif + fputs (_(" -P path Search passwd, shadow and group file in \"path\"\n"), + stdout); + fputs (_(" --service srv Add account to nameservice 'srv'\n"), stdout); + fputs (_(" --help Give this help list\n"), stdout); + fputs (_(" -u, --usage Give a short usage message\n"), stdout); + fputs (_(" -v, --version Print program version\n"), stdout); + fputs (_("Valid services for --service are: files, ldap\n"), stdout); +} + +static const char *program = "userdel"; + +static struct option long_options[] = { +#ifdef USE_LDAP + {"binddn", required_argument, NULL, 'D' }, +#endif + {"force", no_argument, NULL, 'f'}, + {"remove-home", no_argument, NULL, 'r'}, + {"path", required_argument, NULL, 'P'}, + {"version", no_argument, NULL, 'v'}, + {"service", required_argument, NULL, '\253'}, + {"usage", no_argument, NULL, 'u'}, + {"help", no_argument, NULL, '\255'}, + {NULL, 0, NULL, '\0'} +}; +static const char *short_options = "D:frP:uv"; + +static int +is_owned_by (const char *path, uid_t uid) +{ + struct stat st; + if (lstat (path, &st) != 0) + return -1; + return (st.st_uid == uid); +} + +static struct passwd * +files_getpwent (void) +{ + enum nss_status status; + static int buflen = 256; + static char *buffer = NULL; + static struct passwd resultbuf; + + if (buffer == NULL) + buffer = malloc (buflen); + + while ((status = files_getpwent_r (&resultbuf, buffer, buflen, &errno)) + == NSS_STATUS_TRYAGAIN && errno == ERANGE) + { + errno = 0; + buflen += 256; + buffer = realloc (buffer, buflen); + } + if (status == NSS_STATUS_SUCCESS) + return &resultbuf; + else + return NULL; +} + +static struct group * +files_getgrent (void) +{ + enum nss_status status; + static int buflen = 256; + static char *buffer = NULL; + static struct group resultbuf; + + if (buffer == NULL) + buffer = malloc (buflen); + + while ((status = files_getgrent_r (&resultbuf, buffer, buflen, &errno)) + == NSS_STATUS_TRYAGAIN && errno == ERANGE) + { + errno = 0; + buflen += 256; + buffer = realloc (buffer, buflen); + } + if (status == NSS_STATUS_SUCCESS) + return &resultbuf; + else + return NULL; +} + +static int +in_use_by_other_users (const char *dir, const char *user, + int have_extrapath) +{ + struct passwd *pw; + size_t dirlen = strlen (dir); + int retval = 0; + + setpwent (); + + while ((pw = getpwent ())) + { + /* don't count ourself. */ + if (strcmp (pw->pw_name, user) == 0) + continue; + /* Another user can have the same directory or a subdirectory + of our own directory as home directory. */ + if ((dirlen < strlen (pw->pw_dir) && strncmp (dir, pw->pw_dir, dirlen) == 0 + && pw->pw_dir[dirlen] == '/') || strcmp (dir, pw->pw_dir) == 0) + { + fprintf (stderr, + _("%s: directory `%s' is in use by `%s'.\n"), + program, dir, pw->pw_name); + retval = 1; + } + } + + endpwent (); + + if (have_extrapath) + while ((pw = files_getpwent ())) + { + /* don't count ourself. */ + if (strcmp (pw->pw_name, user) == 0) + continue; + /* Another user can have the same directory or a subdirectory + of our own directory as home directory. */ + if (strncmp (dir, pw->pw_dir, dirlen) == 0) + { + fprintf (stderr, + _("%s: directory `%s' is in use by `%s'.\n"), + program, dir, pw->pw_name); + retval = 1; + } + } + + return retval; +} + +static int +remove_from_secondary_groups (user_t *pw_data, int have_extrapath) +{ + struct item_t { + char *value; + struct item_t *next; + } *list = NULL, *item; + struct group *gr; + int retval = E_SUCCESS; + + if (have_extrapath) + { + while ((gr = files_getgrent ())) + { + unsigned int i; + + for (i = 0; gr->gr_mem[i]; i++) + { + if (strcmp (gr->gr_mem[i], pw_data->pw.pw_name) == 0) + { + item = malloc (sizeof (*item)); + item->value = strdup (gr->gr_name); + item->next = list; + list = item; + } + } + } + } + else + { + setgrent (); + + while ((gr = getgrent ())) + { + unsigned int i; + + for (i = 0; gr->gr_mem[i]; i++) + { + if (strcmp (gr->gr_mem[i], pw_data->pw.pw_name) == 0) + { + item = malloc (sizeof (*item)); + item->value = strdup (gr->gr_name); + item->next = list; + list = item; + } + } + } + + endgrent (); + } + + item = list; + while (item != NULL) + { + group_t *gr_data = find_group_data (item->value, 0, NULL); + + if (gr_data == NULL || gr_data->service == S_NONE) + { + fprintf (stderr, + _("%s: ERROR: cannot find group `%s' anymore!\n"), + program, item->value); + if (retval == E_SUCCESS) + retval = E_NOTFOUND; + } + else + { + gr_data->todo = DO_MODIFY; + +#ifdef USE_LDAP + if (gr_data->service == S_LDAP) + { + if (pw_data->binddn == NULL) + { + pw_data->binddn = get_caller_dn (); + if (pw_data->binddn == NULL) + { + fprintf (stderr, _("%s: Cannot remove user from groups stored in LDAP database without DN.\n"), + program); + } + } + + if (pw_data->binddn == NULL) + { + fprintf (stderr, + _("%s: User not removed from LDAP group `%s'.\n"), + program, gr_data->gr.gr_name); + item = item->next; + free_group_t (gr_data); + retval = E_GRP_UPDATE; + continue; + } + + gr_data->binddn = strdup (pw_data->binddn); + + if (pw_data->oldclearpwd == NULL) + { + char *cp = get_ldap_password (pw_data->binddn); + + if (cp) + pw_data->oldclearpwd = strdup (cp); + else + { + fprintf (stderr, + _("%s: User not removed from LDAP group `%s'.\n"), + program, gr_data->gr.gr_name); + item = item->next; + free_group_t (gr_data); + retval = E_GRP_UPDATE; + continue; + } + } + } +#endif + if (pw_data->oldclearpwd) + gr_data->oldclearpwd = strdup (pw_data->oldclearpwd); + + gr_data->new_gr_mem = remove_gr_mem (pw_data->pw.pw_name, + gr_data->gr.gr_mem); + if (write_group_data (gr_data, 1) != 0) + { + sec_log (program, MSG_ERROR_REMOVE_USER_FROM_GROUP, + pw_data->pw.pw_name, pw_data->pw.pw_uid, + gr_data->gr.gr_name, gr_data->gr.gr_gid, getuid ()); + fprintf (stderr, + _("%s: User not removed from group `%s'.\n"), + program, gr_data->gr.gr_name); + retval = E_GRP_UPDATE; + } + else + { + sec_log (program, MSG_USER_REMOVED_FROM_GROUP, + pw_data->pw.pw_name, gr_data->gr.gr_name, + gr_data->gr.gr_gid, getuid ()) + } + } + + item = item->next; + free_group_t (gr_data); + } + return retval; +} + +/* XXX */ +void +init_environment (void) +{ + struct rlimit rlim; + + /* Don't create a core file. */ + rlim.rlim_cur = rlim.rlim_max = 0; + setrlimit (RLIMIT_CORE, &rlim); + + /* Set all limits to unlimited to avoid to run in any + problems later. */ + rlim.rlim_cur = rlim.rlim_max = RLIM_INFINITY; + setrlimit (RLIMIT_AS, &rlim); + setrlimit (RLIMIT_CPU, &rlim); + setrlimit (RLIMIT_DATA, &rlim); + setrlimit (RLIMIT_FSIZE, &rlim); + setrlimit (RLIMIT_NOFILE, &rlim); + setrlimit (RLIMIT_RSS, &rlim); + setrlimit (RLIMIT_STACK, &rlim); + + /* Ignore all signals which can make trouble later. */ + signal (SIGALRM, SIG_IGN); + signal (SIGXFSZ, SIG_IGN); + signal (SIGHUP, SIG_IGN); + /* signal (SIGINT, SIG_IGN); */ + signal (SIGPIPE, SIG_IGN); + /* signal (SIGQUIT, SIG_IGN); */ + /* signal (SIGTERM, SIG_IGN); */ + signal (SIGTSTP, SIG_IGN); + signal (SIGTTOU, SIG_IGN); + + umask (077); +} + +int +main (int argc, char **argv) +{ + char *use_service = NULL; +#ifdef USE_LDAP + char *binddn = NULL; +#endif + char *remove_user; + int have_extrapath = 0; + int remove_flag = 0; + int force_removal = 0; + user_t *pw_data; + int retval = E_SUCCESS; + int i; + +#ifdef ENABLE_NLS + setlocale (LC_ALL, ""); + bindtextdomain (PACKAGE, LOCALEDIR); + textdomain (PACKAGE); +#endif + + open_sec_log (program); + + /* Before going any further, raise the ulimit and ignore + signals. */ + + init_environment (); + + while (1) + { + int c; + int option_index = 0; + + c = getopt_long (argc, argv, short_options, + long_options, &option_index); + if (c == (-1)) + break; + switch (c) + { +#ifdef USE_LDAP + case 'D': + binddn = optarg; + break; +#endif + case 'f': + force_removal = 1; + break; + case 'P': + files_etc_dir = strdup (optarg); + have_extrapath = 1; + /* If -P option is used, set service to "files" if not already + set through an option. If we don't limitate to service files, + we can get trouble finding the right source. */ + if (!use_service) + use_service = "files"; + break; + case 'r': + remove_flag = 1; + break; + case '\253': + if (use_service != NULL) + { + print_usage (stderr, program); + return E_BAD_ARG; + } + + if (strcasecmp (optarg, "files") == 0) + use_service = "files"; +#ifdef USE_LDAP + else if (strcasecmp (optarg, "ldap") == 0) + use_service = "ldap"; +#endif + else + { + fprintf (stderr, _("Service `%s' not supported.\n"), optarg); + print_usage (stderr, program); + return E_BAD_ARG; + } + break; + case '\255': + print_help (program); + return 0; + case 'u': + print_usage (stdout, program); + return 0; + case 'v': + print_version (program, "2005"); + return 0; + default: + print_error (program); + return E_USAGE; + } + } + + argc -= optind; + argv += optind; + + if (argc > 1) + { + fprintf (stderr, _("%s: Too many arguments.\n"), program); + print_error (program); + return E_USAGE; + } + else if (argc == 0) + { + fprintf (stderr, _("%s: Too few arguments.\n"), program); + print_error (program); + return E_USAGE; + } + else + { + int buflen = 256; + char *buffer = alloca (buflen); + struct passwd resultbuf; + struct passwd *pw; + + /* Determine our own user name for PAM authentication. */ + while (getpwuid_r (getuid (), &resultbuf, buffer, buflen, &pw) != 0 + && errno == ERANGE) + { + errno = 0; + buflen += 256; + buffer = alloca (buflen); + } + + if (!pw) + { + fprintf (stderr, _("%s: Cannot determine your user name.\n"), + program); + return E_UNKNOWN_USER; + } + + if (do_authentication ("shadow", pw->pw_name, NULL) != 0) + { + sec_log (program, MSG_PERMISSION_DENIED, pw->pw_name, + pw->pw_uid, getuid ()); + return E_NOPERM; + } + } + + remove_user = argv[0]; + + pw_data = do_getpwnam (remove_user, use_service); + if (pw_data == NULL || pw_data->service == S_NONE) + { + sec_log (program, MSG_UNKNOWN_USER, remove_user, getuid ()); + if (use_service) + fprintf (stderr, _("%s: User `%s' is not known to service `%s'.\n"), + program, remove_user, use_service); + else + fprintf (stderr, _("%s: Unknown user `%s'.\n"), program, + remove_user); + return E_UNKNOWN_USER; + } + + if (is_logged_in (remove_user)) + { + fprintf (stderr, _("%s: account `%s' is currently in use.\n"), + program, remove_user); + return E_USER_BUSY; + } + +#ifdef USE_LDAP + if (binddn) + { + pw_data->binddn = strdup (binddn); + if (pw_data->service == S_LDAP) + { + char *cp = get_ldap_password (binddn); + if (cp) + pw_data->oldclearpwd = strdup (cp); + } + } +#endif + + i = call_script ("USERDEL_PRECMD", pw_data->pw.pw_name, pw_data->pw.pw_uid, + pw_data->pw.pw_gid, pw_data->pw.pw_dir, program); + if (i != 0) + { + fprintf (stderr, _("%s: USERDEL_PRECMD fails with exit code %d.\n"), + program, i); + return E_FAILURE; + } + + /* Lock passwd file, so that a concurrent useradd process will not + add the user a second time or a second user with the same uid. */ + if (pw_data->service == S_LOCAL && lock_database () != 0) + { + sec_log (program, MSG_PASSWD_FILE_ALREADY_LOCKED); + fputs (_("Cannot lock password file: already locked.\n"), stderr); + return E_PWDBUSY; + } + + if (remove_flag) + { + char *cp; + int ret; + + if (asprintf (&cp, "%s/%s", _PATH_MAILDIR, pw_data->pw.pw_name) < 1) + return E_FAILURE; + + /* Remove the mail file only if owned by user or -f was given. */ + ret = is_owned_by (cp, pw_data->pw.pw_uid); + if (ret == 0 && !force_removal) + { + sec_log (program, MSG_NOT_OWNED_BY_USER, + cp, pw_data->pw.pw_name, pw_data->pw.pw_uid, getuid ()); + fprintf (stderr, _("%s: `%s' is not owned by `%s', not removed.\n"), + program, cp, pw_data->pw.pw_name); + } + else if (ret == 1 || (ret == 0 && force_removal)) + { + if (unlink (cp) == -1) + fprintf (stderr, _("%s: warning: can't remove `%s': %s"), + program, cp, strerror (errno)); + } + + /* Remove the home directory only, if owned by the user and + not used by any other user or -f was given. */ + ret = is_owned_by (pw_data->pw.pw_dir, pw_data->pw.pw_uid); + if (ret == 0 && !force_removal) + { + sec_log (program, MSG_NOT_OWNED_BY_USER, + pw_data->pw.pw_dir, pw_data->pw.pw_name, + pw_data->pw.pw_uid, getuid ()); + fprintf (stderr, _("%s: `%s' is not owned by `%s', not removed.\n"), + program, pw_data->pw.pw_dir, pw_data->pw.pw_name); + } + else if (ret == 1 || (ret == 0 && force_removal)) + { + if (!in_use_by_other_users (pw_data->pw.pw_dir, + pw_data->pw.pw_name, + have_extrapath) || force_removal) + { + if (remove_dir_rec (pw_data->pw.pw_dir) != 0) + fprintf (stderr, _("%s: warning: can't remove `%s': %s"), + program, pw_data->pw.pw_dir, strerror (errno)); + else + { + sec_log (program, MSG_HOME_DIR_REMOVED, + pw_data->pw.pw_name, pw_data->pw.pw_uid, + pw_data->pw.pw_dir, getuid ()); + } + } + else + fprintf (stderr, _("%s: directory `%s' not removed.\n"), + program, pw_data->pw.pw_dir); + } + } + + retval = remove_from_secondary_groups (pw_data, have_extrapath); + + pw_data->todo = DO_DELETE; + if (write_user_data (pw_data, 1) != 0) + { + sec_log (program, MSG_ERROR_REMOVING_USER, + pw_data->pw.pw_name, pw_data->pw.pw_uid, getuid ()); + fprintf (stderr, _("%s: error deleting user `%s'.\n"), + program, pw_data->pw.pw_name); + free_user_t (pw_data); + return E_FAILURE; + } + else + sec_log (program, MSG_USER_DELETED, + pw_data->pw.pw_name, pw_data->pw.pw_uid, getuid ()); + +#ifdef HAVE_NSCD_FLUSH_CACHE + /* flush NSCD cache to remove user really from the system. */ + nscd_flush_cache ("passwd"); + nscd_flush_cache ("group"); +#endif + + if (pw_data->service == S_LOCAL) + ulckpwdf (); + + i = call_script ("USERDEL_POSTCMD", pw_data->pw.pw_name, pw_data->pw.pw_uid, + pw_data->pw.pw_gid, pw_data->pw.pw_dir, program); + if (i != 0) + { + fprintf (stderr, _("%s: USERDEL_POSTCMD fails with exit code %d.\n"), + program, i); + return E_FAILURE; + } + + free_user_t (pw_data); + + return retval; +} diff --git a/src/usermod.8 b/src/usermod.8 new file mode 100644 index 0000000..9f4cffa --- /dev/null +++ b/src/usermod.8 @@ -0,0 +1,158 @@ +.\" -*- nroff -*- +.\" Copyright (C) 2003, 2005, 2006, 2010 Thorsten Kukuk +.\" Author: Thorsten Kukuk +.\" +.\" This program is free software; you can redistribute it and/or modify +.\" it under the terms of the GNU General Public License version 2 as +.\" published by the Free Software Foundation. +.\" +.\" 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +.\" +.TH usermod 8 "Feb 2010" "pwdutils" +.SH NAME +usermod \- modify a user account +.SH SYNOPSIS +.TP 8 +\fBusermod\fR [\fB-D \fIbinddn\fR] [\fB-P \fIpath\fR] [\fB-g \fIgid\fR [\fB-o\fR]] [\fB-p \fIpassword\fR] +.br +[\fB--service \fIservice\fR] [\fB--help\fR] [\fB--usage\fR] [\fB-v\fR] \fIaccount\fR +.SH DESCRIPTION +\fBusermod\fR modifies an user account using the values specified +on the command line. +.SH OPTIONS +.TP +.BI "\-A, \-\-add\-to\-group" " group,..." +With this option a list of groups can be specified, +which the user should become a member of. Each group is separated +from the next one only by a comma, without whitespace. +.TP +.BI "\-c, \-\-comment" " comment" +This option specifies the new users finger information. +It is normally modified using the +.BR chfn (1) +utility. +.TP +.BI "\-d, \-\-home" " homedir" +This option specifies the new home directory of the user. +.TP +.BI "\-e, \-\-expire" " expire" +With this option the date when the account will be expired can +be changed. \fIexpiredate\fR has to be specified as number of +days since January 1st, 1970. The date may also be expressed in +the format YYYY-MM-DD. +.TP +.BI "\-f, \-\-inactive" " inactive" +This option is used to set the number of days of inactivity after +a password has expired before the account is locked. A user whose +account is locked must contact the system administrator before +being able to use the account again. +A value of -1 disables this feature. +.TP +.BI "\-G, \-\-groups" " group,..." +With this option a list of supplementary groups can be specified, +which the user should become a member of. Each group is separated +from the next one only by a comma, without whitespace. The user is +removed from all other groups not specified. +.TP +.BI "\-g, \-\-gid" " gid" +The group name or number of the user's new primary group. The group +name must exist and a group number must refer to an already existing +group. +.TP +.BI "\-l, \-\-login" " name" +Specify the new account name for the user. The account name must begin +with an alphabetic character and the rest of the string should be from +the POSIX portable character class. Nothing else is changed. +.TP +.B "\-m, \-\-move_home" +Move the user's home directory to the new directory specified with the +.B "\-d" +option. If the old directory does not exist, nothing is done. If the +new directory already exists, the program aborts with an error. +.TP +.B "\-o, \-\-non-unique" +Allow duplicate (non-unique) User IDs. +.TP +.BI "\-p, \-\-password" " password" +Encrypted password as returned by +.BR crypt (3) +as the new password. +.TP +.BI "\-R, \-\-remove\-from\-group" " group,..." +With this option a list of groups can be specified, from +which the user should be removed. Each group is separated +from the next one only by a comma, without whitespace. +.TP +.BI "\-s, \-\-shell" " shell" +Specify user's new login shell. The value of \fIshell\fR must be a +valid executable file. It is normally modified using the +.BR chsh (1) +utility. +.TP +.BI "\-u, \-\-uid" " uid" +Change the userid to be the given number. This +value must be positive and unique (unless the +.B "\-o" +option is used). +Any file with the old UID of the user and which is located in +the directory tree rooted at the user's home directory will be +changed to be owned by the new UID automatically. +.TP +.BI "\-D, \-\-binddn" " binddn" +Use the Distinguished Name binddn to bind to the LDAP directory. +The user will be prompted for a password for simple authentication. +.TP +.BI "\-L, \-\-lock" +A system administrator can lock the account of the specified user. +.TP +.B "\-U, \-\-unlock" +A system administrator can unlock the specified account, if the +account is not passwordless afterwards (it will not unlock an +account that has only "!" as a password). +.TP +.BI "\-P, \-\-path" " path" +The \fIpasswd\fR and \fIshadow\fR files are located below the +specified directory path. +\fBusermod\fR will use this files, not \fI/etc/passwd\fR and +\fI/etc/shadow\fR. +.TP +.BI "\-\-service" " service" +Modify the account from a special directory. The default is \fIfiles\fR, +but \fIldap\fR is also valid. +.TP +.B "\-\-help" +Print a list of valid options with a short description. +.TP +.B "\-\-usage" +Print a short list of valid options. +.TP +.B "\-v, \-\-version" +Print the version number and exit. +.SH NOTES +\fBusermod\fR will not allow you to change the name, User ID or +home directory of a user, which is logged in. \fBusermod\fR will +not change the User ID of running processes and not the ownership +of crontab and at jobs. +.SH FILES +/etc/group \- group information +.br +/etc/passwd \- user account information +.br +/etc/shadow \- shadow user account information +.SH SEE ALSO +.BR passwd (1), +.BR login.defs (5), +.BR group (5), +.BR passwd (5), +.BR shadow (5), +.BR useradd (8), +.BR userdel (8) +.SH AUTHOR +Thorsten Kukuk diff --git a/src/usermod.c b/src/usermod.c new file mode 100644 index 0000000..72c0715 --- /dev/null +++ b/src/usermod.c @@ -0,0 +1,1829 @@ +/* Copyright (C) 2003, 2004, 2005, 2006, 2010 Thorsten Kukuk + Author: Thorsten Kukuk + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License version 2 as + published by the Free Software Foundation. + + 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#ifdef HAVE_LIBNSCD_H +#include +#endif + +#ifdef USE_LDAP +#include "libldap.h" +#endif + +#include "i18n.h" +#include "public.h" +#include "group.h" +#include "logging.h" +#include "utf8conv.h" +#include "logindefs.h" +#include "read-files.h" +#include "error_codes.h" + +static void +print_usage (FILE * stream, const char *program) +{ + fprintf (stream, _("Usage: %s ...\n"), program); +} + +static void +print_help (const char *program) +{ + print_usage (stdout, program); + fprintf (stdout, _("%s - modify a user account\n\n"), program); + + fputs (_(" -c comment Set the GECOS field for the new account\n"), + stdout); + fputs (_ + (" -D binddn Use dn \"binddn\" to bind to the LDAP directory\n"), + stdout); + fputs (_(" -d homedir Home directory for the new user\n"), stdout); + fputs (_(" -e expire Date on which the new account will be disabled\n"), + stdout); + fputs (_(" -f inactive Days after a password expires until account is \ +disabled\n"), stdout); + fputs (_(" -G group,... List of supplementary groups\n"), stdout); + fputs (_(" -g gid Name/number of the users primary group\n"), + stdout); + fputs (_(" -l login Change login name.\n"), stdout); + fputs (_(" -m Move home directory to the new path\n"), stdout); + fputs (_(" -o Allow duplicate (non-unique) UID\n"), stdout); + fputs (_(" -A group,... List of groups the user should be added to\n"), + stdout); + fputs (_(" -R group,... List of groups the user should be removed from\n"), + stdout); + fputs (_(" -P path Search passwd, shadow and group file in \"path\"\n"), + stdout); + fputs (_(" -p password Encrypted password as returned by crypt(3)\n"), + stdout); + fputs (_(" -s shell Name of the user's login shell\n"), stdout); + fputs (_(" -u uid Change the userid to the given number\n"), + stdout); + fputs (_(" --service srv Use nameservice 'srv'\n"), stdout); + fputs (_(" -L Locks the password entry for \"user\"\n"), + stdout); + fputs (_(" -U Try to unlock the password entry for \"user\"\n"), + stdout); + fputs (_(" --help Give this help list\n"), stdout); + fputs (_(" --usage Give a short usage message\n"), stdout); + fputs (_(" -v, --version Print program version\n"), stdout); + fputs (_("Valid services are: files, ldap\n"), stdout); +} + +static const char *program = "usermod"; + +static struct option long_options[] = { + {"comment", required_argument, NULL, 'c'}, + {"gecos", required_argument, NULL, 'c'}, +#ifdef USE_LDAP + {"binddn", required_argument, NULL, 'D'}, +#endif + {"home", required_argument, NULL, 'd'}, + {"expire", required_argument, NULL, 'e'}, + {"inactive", required_argument, NULL, 'f'}, + {"groups", required_argument, NULL, 'G'}, + {"add-to-groups", required_argument, NULL, 'A'}, + {"remove-from-groups", required_argument, NULL, 'R'}, + {"gid", required_argument, NULL, 'g'}, + {"login", required_argument, NULL, 'l'}, + {"lock", required_argument, NULL, 'L'}, + {"move-home", no_argument, NULL, 'm'}, + {"non-unique", no_argument, NULL, 'o'}, + {"path", required_argument, NULL, 'P'}, + {"password", required_argument, NULL, 'p'}, + {"shell", required_argument, NULL, 's'}, + {"uid", required_argument, NULL, 'u'}, + {"unlock", required_argument, NULL, 'U'}, + {"version", no_argument, NULL, 'v'}, + {"service", required_argument, NULL, '\253'}, + {"usage", no_argument, NULL, '\254'}, + {"help", no_argument, NULL, '\255'}, + {NULL, 0, NULL, '\0'} +}; +static const char *short_options = "A:c:D:d:e:f:G:g:l:LmoP:p:R:s:u:Uv"; + +/* This function converts a comma seperated list of groups + (a group can be a groupname or a group id) into a table + of group ids. It returns 0 on success. */ +static int +convert_grpopt_to_name (const char *arg, char **grouplist, gid_t *groupid, + const char *use_service) +{ + group_t *gr_data; + + if (isdigit (*arg)) + { + gid_t gid; + + if (strtoid (arg, &gid) == -1) /* invalid number */ + { + fprintf (stderr, _("%s: Invalid numeric argument `%s'.\n"), + program, arg); + return E_BAD_ARG; + } + gr_data = find_group_data (NULL, gid, use_service); + + if (gr_data == NULL || gr_data->service == S_NONE) + { + if (use_service) + { + fprintf (stderr, + _("%s: Group `%u' not found in service `%s'.\n"), + program, gid, use_service); + return E_NOTFOUND; + } + else + { + fprintf (stderr, _("%s: Unknown group `%u'.\n"), program, gid); + return E_BAD_ARG; + } + } + } + else + { + gr_data = find_group_data (arg, 0, use_service); + if (gr_data == NULL || gr_data->service == S_NONE) + { + if (use_service) + { + fprintf (stderr, + _("%s: Group `%s' not found in service `%s'.\n"), + program, utf8_to_locale (arg), use_service); + return E_NOTFOUND; + } + else + { + fprintf (stderr, _("%s: Unknown group `%s'.\n"), program, + utf8_to_locale (arg)); + return E_BAD_ARG; + } + } + } + + + if (grouplist) + *grouplist = strdup (gr_data->gr.gr_name); + if (groupid) + *groupid = gr_data->gr.gr_gid; + return 0; +} + +static struct passwd * +files_getpwnam (const char *name) +{ + enum nss_status status; + static int buflen = 256; + static char *buffer = NULL; + static struct passwd resultbuf; + + if (buffer == NULL) + buffer = malloc (buflen); + + while ((status = + files_getpwnam_r (name, &resultbuf, buffer, buflen, + &errno)) == NSS_STATUS_TRYAGAIN + && errno == ERANGE) + { + errno = 0; + buflen += 256; + buffer = realloc (buffer, buflen); + } + if (status == NSS_STATUS_SUCCESS) + return &resultbuf; + else + return NULL; +} + +static struct passwd * +files_getpwuid (uid_t uid) +{ + enum nss_status status; + static int buflen = 256; + static char *buffer = NULL; + static struct passwd resultbuf; + + if (buffer == NULL) + buffer = malloc (buflen); + + while ((status = files_getpwuid_r (uid, &resultbuf, buffer, buflen, &errno)) + == NSS_STATUS_TRYAGAIN && errno == ERANGE) + { + errno = 0; + buflen += 256; + buffer = realloc (buffer, buflen); + } + if (status == NSS_STATUS_SUCCESS) + return &resultbuf; + else + return NULL; +} + +static struct group * +files_getgrent (void) +{ + enum nss_status status; + static int buflen = 256; + static char *buffer = NULL; + static struct group resultbuf; + + if (buffer == NULL) + buffer = malloc (buflen); + + while ((status = files_getgrent_r (&resultbuf, buffer, buflen, &errno)) + == NSS_STATUS_TRYAGAIN && errno == ERANGE) + { + errno = 0; + buflen += 256; + buffer = realloc (buffer, buflen); + } + if (status == NSS_STATUS_SUCCESS) + return &resultbuf; + else + return NULL; +} + +static char ** +add_gr_mem (const char *name, char **gr_mem) +{ + char **groups; + unsigned int i; + int already_added = 0; + + i = 0; + while (gr_mem[i]) + { + if (strcmp (gr_mem[i], name) == 0) + already_added = 1; + ++i; + } + ++i; /* for trailing NULL pointer */ + + if (!already_added) + ++i; + + groups = malloc (i * sizeof (char *)); + i = 0; + while (gr_mem[i]) + { + groups[i] = strdup (gr_mem[i]); + ++i; + } + + if (!already_added) + { + groups[i] = strdup (name); + ++i; + } + + groups[i] = NULL; + + return groups; +} + +static char ** +rename_gr_mem (const char *name, char **gr_mem, const char *new_name) +{ + char **groups; + unsigned int i; + + for (i = 0; gr_mem[i]; i++) ; + ++i; /* for trailing NULL pointer */ + + groups = malloc ((i + 1) * sizeof (char *)); + if (groups == NULL) + return NULL; + + for (i = 0; gr_mem[i]; i++) + { + if (strcmp (name, gr_mem[i]) != 0) + groups[i] = strdup (gr_mem[i]); + else + groups[i] = strdup (new_name); + } + + groups[i] = NULL; + + return groups; +} + +static int +rename_in_secondary_groups (user_t *pw_data, int have_extrapath) +{ + struct item_t { + char *value; + struct item_t *next; + } *list = NULL, *item; + struct group *gr; + int retval = E_SUCCESS; + + if (have_extrapath) + { + while ((gr = files_getgrent ())) + { + unsigned int i; + + for (i = 0; gr->gr_mem[i]; i++) + { + if (strcmp (gr->gr_mem[i], pw_data->pw.pw_name) == 0) + { + item = malloc (sizeof (*item)); + item->value = strdup (gr->gr_name); + item->next = list; + list = item; + } + } + } + } + else + { + setgrent (); + + while ((gr = getgrent ())) + { + unsigned int i; + + for (i = 0; gr->gr_mem[i]; i++) + { + if (strcmp (gr->gr_mem[i], pw_data->pw.pw_name) == 0) + { + item = malloc (sizeof (*item)); + item->value = strdup (gr->gr_name); + item->next = list; + list = item; + } + } + } + + endgrent (); + } + + item = list; + while (item != NULL) + { + group_t *gr_data = find_group_data (item->value, 0, NULL); + + if (gr_data == NULL || gr_data->service == S_NONE) + { + fprintf (stderr, + _("%s: ERROR: Cannot find group `%s' anymore!\n"), + program, utf8_to_locale (item->value)); + if (retval == E_SUCCESS) + retval = E_NOTFOUND; + } + else + { + gr_data->todo = DO_MODIFY; + +#ifdef USE_LDAP + if (gr_data->service == S_LDAP) + { + if (pw_data->binddn == NULL) + { + sec_log (program, MSG_ERROR_RENAME_USER_IN_GROUP, + pw_data->pw.pw_name, pw_data->pw.pw_uid, + gr_data->gr.gr_name, + gr_data->gr.gr_gid, getuid ()); + fprintf (stderr, + _("%s: User not renamed in LDAP group `%s'.\n"), + program, utf8_to_locale (gr_data->gr.gr_name)); + item = item->next; + free_group_t (gr_data); + retval = E_GRP_UPDATE; + continue; + } + + gr_data->binddn = strdup (pw_data->binddn); + + if (pw_data->oldclearpwd == NULL) + { + sec_log (program, MSG_ERROR_RENAME_USER_IN_GROUP, + pw_data->pw.pw_name, + pw_data->pw.pw_uid, gr_data->gr.gr_name, + gr_data->gr.gr_gid, getuid ()); + fprintf (stderr, + _("%s: User not renamed from LDAP group `%s'.\n"), + program, utf8_to_locale (gr_data->gr.gr_name)); + item = item->next; + free_group_t (gr_data); + retval = E_GRP_UPDATE; + continue; + } + } +#endif + if (pw_data->oldclearpwd) + gr_data->oldclearpwd = strdup (pw_data->oldclearpwd); + + gr_data->new_gr_mem = rename_gr_mem (pw_data->pw.pw_name, + gr_data->gr.gr_mem, + pw_data->new_name); + if (write_group_data (gr_data, 1) != 0) + { + sec_log (program, MSG_ERROR_RENAME_USER_IN_GROUP, + pw_data->pw.pw_name, + pw_data->pw.pw_uid, gr_data->gr.gr_name, + gr_data->gr.gr_gid, getuid ()); + fprintf (stderr, + _("%s: User not renamed in group `%s'.\n"), + program, utf8_to_locale (gr_data->gr.gr_name)); + retval = E_GRP_UPDATE; + } + else + { + sec_log (program, MSG_USER_RENAMED_IN_GROUP, + pw_data->new_name, pw_data->pw.pw_name, + pw_data->pw.pw_uid, gr_data->gr.gr_name, + gr_data->gr.gr_gid, getuid ()); + } + + item = item->next; + } + + free_group_t (gr_data); + } + + return retval; +} + +/* Move the users home directory to new location. */ +static int +move_home_directory (const char *oldhome, const char *newhome) +{ + struct stat st; + + if (oldhome == NULL || *oldhome == '\0' || + newhome == NULL || *newhome == '\0') + return E_HOMEDIR; + + /* Does the old directory exist? */ + if (stat (oldhome, &st) < 0) + return 0; /* No old homedirectory, but no error, too. */ + + /* Don't try to move it if it is not a directory. + Some admins have the bad idea to use a file as home + directory. */ + if (!S_ISDIR (st.st_mode)) + return E_HOMEDIR; + + if (access (newhome, F_OK) == 0) + return E_HOMEDIR; + else + { + char path[strlen (newhome) + 2]; + char *bhome, *cp; + + path[0] = '\0'; + bhome = strdup (newhome); + ++bhome; + + /* Check for every part of the path, if the directory + exists. If not, create it with permissions 755 and + owner root:root. */ + cp = strtok (bhome, "/"); + while (cp) + { + strcat (path, "/"); + strcat (path, cp); + if (access (path, F_OK) != 0) + { + if (mkdir (path, 0) != 0) + { + fprintf (stderr, + _("%s: Cannot create directory `%s'.\n"), + program, path); + return E_HOMEDIR; + } + if (chown (path, 0, 0) < 0) + fprintf (stderr, _("%s: Warning: chown on `%s' failed: %m\n"), + program, path); + if (chmod (path, 0755) < 0) + fprintf (stderr, _("%s: Warning: chmod on `%s' failed: %m\n"), + program, path); + } + cp = strtok (NULL, "/"); + } + /* we have this created to much, remove it again. */ + rmdir (newhome); + } + + if (rename (oldhome, newhome) == -1) + { + if (errno == EXDEV) + { + if (mkdir (newhome, st.st_mode & 0777)) + { + fprintf (stderr, _("Can't create `%s': %m\n"), + newhome); + return E_HOMEDIR; + } + if (chown (newhome, st.st_uid, st.st_gid)) + { + fprintf (stderr, _("%s: Warning: chown on `%s' failed: %m\n"), + program, newhome); + rmdir (newhome); + return E_HOMEDIR; + } + if (copy_dir_rec (oldhome, newhome, 1, 0, 0) == 0) + remove_dir_rec (oldhome); /* only remove if no error occured. */ + else + { + fprintf (stderr, _("%s: Cannot copy directory %s to %s.\n"), + program, oldhome, newhome); + return E_HOMEDIR; + } + } + else + { + fprintf (stderr, _("%s: Cannot rename directory %s to %s.\n"), + program, oldhome, newhome); + return E_HOMEDIR; + } + } + + return 0; +} + +/* XXX Make this generic and put it into libpwdutils. */ +static int +remove_from_secondary_groups (user_t *pw_data, int have_extrapath, + const char *name) +{ + struct item_t { + char *value; + struct item_t *next; + } *list = NULL, *item; + struct group *gr; + int retval = E_SUCCESS; + + if (have_extrapath) + { + while ((gr = files_getgrent ())) + { + unsigned int i; + + for (i = 0; gr->gr_mem[i]; i++) + { + if (strcmp (gr->gr_mem[i], name) == 0) + { + item = malloc (sizeof (*item)); + item->value = strdup (gr->gr_name); + item->next = list; + list = item; + } + } + } + } + else + { + setgrent (); + + while ((gr = getgrent ())) + { + unsigned int i; + + for (i = 0; gr->gr_mem[i]; i++) + { + if (strcmp (gr->gr_mem[i], name) == 0) + { + item = malloc (sizeof (*item)); + item->value = strdup (gr->gr_name); + item->next = list; + list = item; + } + } + } + + endgrent (); + } + + item = list; + while (item != NULL) + { + group_t *gr_data = find_group_data (item->value, 0, NULL); + + if (gr_data == NULL || gr_data->service == S_NONE) + { + fprintf (stderr, + _("%s: ERROR: Cannot find group `%s' anymore!\n"), + program, utf8_to_locale (item->value)); + if (retval == E_SUCCESS) + retval = E_NOTFOUND; + } + else + { + gr_data->todo = DO_MODIFY; + +#ifdef USE_LDAP + if (gr_data->service == S_LDAP) + { + if (pw_data->binddn == NULL) + { + pw_data->binddn = get_caller_dn (); + if (pw_data->binddn == NULL) + { + fprintf (stderr, _("%s: Cannot remove user from groups stored in LDAP database without DN.\n"), + program); + } + } + + if (pw_data->binddn == NULL) + { + sec_log (program, MSG_ERROR_REMOVE_USER_FROM_GROUP, + pw_data->pw.pw_name, pw_data->pw.pw_uid, + gr_data->gr.gr_name, + gr_data->gr.gr_gid, getuid ()); + fprintf (stderr, + _("%s: User not removed from LDAP group `%s'.\n"), + program, utf8_to_locale (gr_data->gr.gr_name)); + item = item->next; + free_group_t (gr_data); + retval = E_GRP_UPDATE; + continue; + } + + gr_data->binddn = strdup (pw_data->binddn); + + if (pw_data->oldclearpwd == NULL) + { + char *cp = get_ldap_password (pw_data->binddn); + + if (cp) + pw_data->oldclearpwd = strdup (cp); + else + { + sec_log (program, MSG_ERROR_REMOVE_USER_FROM_GROUP, + pw_data->pw.pw_name, pw_data->pw.pw_uid, + gr_data->gr.gr_name, + gr_data->gr.gr_gid, getuid ()); + fprintf (stderr, + _("%s: User not removed from LDAP group `%s'.\n"), + program, utf8_to_locale (gr_data->gr.gr_name)); + item = item->next; + free_group_t (gr_data); + retval = E_GRP_UPDATE; + continue; + } + } + } +#endif + if (pw_data->oldclearpwd) + gr_data->oldclearpwd = strdup (pw_data->oldclearpwd); + + gr_data->new_gr_mem = remove_gr_mem (name, + gr_data->gr.gr_mem); + if (write_group_data (gr_data, 1) != 0) + { + sec_log (program, MSG_ERROR_REMOVE_USER_FROM_GROUP, + pw_data->pw.pw_name, pw_data->pw.pw_uid, + gr_data->gr.gr_name, + gr_data->gr.gr_gid, getuid ()); + fprintf (stderr, + _("%s: User not removed from group `%s'.\n"), + program, utf8_to_locale (gr_data->gr.gr_name)); + retval = E_GRP_UPDATE; + } + else + { + sec_log (program, MSG_USER_REMOVED_FROM_GROUP, + pw_data->pw.pw_name, gr_data->gr.gr_name, + gr_data->gr.gr_gid, getuid ()); + } + + item = item->next; + } + + free_group_t (gr_data); + } + + return retval; +} + + +int +main (int argc, char **argv) +{ + char *use_service = NULL; + user_t *pw_data; +#ifdef USE_LDAP + char *binddn = NULL; +#endif + char *modify_account; + char *new_group = NULL; + gid_t new_gid = 0; + char *new_comment = NULL; + char *new_home = NULL; + char *old_home = NULL; + char *new_shell = NULL; + char *new_login = NULL; + char *new_password = NULL; + char *new_groups_arg = NULL; + char *add_groups_arg = NULL; + char *remove_groups_arg = NULL; + char **new_groups = NULL; + unsigned int new_groupscnt = 0; + char **del_groups = NULL; + unsigned int del_groupscnt = 0; + uid_t new_uid = 0; + char *know_uid = NULL; + int non_unique = 0; + int have_extrapath = 0; + int move_homedir = 0; + long int new_expire = -1; + int know_expire = 0; + long int new_inactive = -1; + int know_inactive = 0; + int retval = E_SUCCESS; + int lock_password = 0; + int unlock_password = 0; + int a_flg = 0; + +#ifdef ENABLE_NLS + setlocale (LC_ALL, ""); + bindtextdomain (PACKAGE, LOCALEDIR); + textdomain (PACKAGE); +#endif + + open_sec_log (program); + + /* Before going any further, raise the ulimit and ignore + signals. */ + + init_environment (); + + while (1) + { + int c; + int option_index = 0; + + c = getopt_long (argc, argv, short_options, + long_options, &option_index); + if (c == (-1)) + break; + switch (c) + { + case 'a': + a_flg = 1; + break; + case 'c': + if (strcspn (optarg, ":\n") != strlen (optarg)) + { + fprintf (stderr, _("%s: Invalid comment `%s'.\n"), + program, optarg); + return E_BAD_ARG; + } + new_comment = locale_to_utf8 (optarg); + break; + case 'D': +#ifdef USE_LDAP + binddn = optarg; +#endif + break; + case 'd': + if (check_home (optarg) == -1) + { + fprintf (stderr, _("%s: Invalid home directory `%s'.\n"), + program, optarg); + return E_BAD_ARG; + } + new_home = locale_to_utf8 (optarg); + break; + case 'e': + if (strcmp (optarg, "1969-12-31") == 0) + { + new_expire = -1; + know_expire = 1; + } + else + { + long int expire; + char *cp; + + expire = str2date (optarg); + if (expire == -1) + { + if (((expire = strtol (optarg, &cp, 10)) == 0 && *cp) || + expire < -1) + { + fprintf (stderr, + _("%s: Expiredate `%s' is no date and no integer value >= -1.\n"), + program, optarg); + return E_BAD_ARG; + } + } + new_expire = expire; + know_expire = 1; + } + break; + case 'f': + { + long int inactive; + char *cp; + + inactive = strtol (optarg, &cp, 10); + if (*cp != '\0') /* invalid number */ + { + fprintf (stderr, _("%s: Invalid numeric argument `%s'.\n"), + program, optarg); + return E_BAD_ARG; + } + new_inactive = inactive; + know_inactive = 1; + } + break; + case 'G': + if (add_groups_arg || remove_groups_arg) + { + print_usage (stderr, program); + return E_BAD_ARG; + } + /* Only save the arguments for later checking. We can find a + -P option later. */ + new_groups_arg = locale_to_utf8 (optarg); + break; + case 'A': + if (new_groups_arg) + { + print_usage (stderr, program); + return E_BAD_ARG; + } + /* Only save the arguments for later checking. We can find a + -P option later. */ + add_groups_arg = locale_to_utf8 (optarg); + break; + case 'R': + if (new_groups_arg) + { + print_usage (stderr, program); + return E_BAD_ARG; + } + /* Only save the arguments for later checking. We can find a + -P option later. */ + remove_groups_arg = locale_to_utf8 (optarg); + break; + case 'g': + new_group = locale_to_utf8 (optarg); + break; + case 'l': + new_login = locale_to_utf8 (optarg); + break; + case 'L': + if (unlock_password) + { + print_usage (stderr, program); + return E_BAD_ARG; + } + lock_password = 1; + break; + case 'm': + move_homedir = 1; + break; + case 'o': + non_unique = 1; + break; + case 'P': + files_etc_dir = strdup (optarg); + have_extrapath = 1; + /* If -P option is used, set use_service to "files" if not + already set through an option. If we don't limitate to + service files, we can get trouble finding the right + source. */ + if (!use_service) + use_service = "files"; + break; + case 'p': /* set encrypted password */ + if (strcspn (optarg, ":\n") != strlen (optarg)) + { + fprintf (stderr, + _("%s: Invalid characters in password `%s'.\n"), + program, optarg); + return E_BAD_ARG; + } + new_password = optarg; + break; + case 's': + if (strcspn (optarg, ",=\":*\n") != strlen (optarg) || + *optarg != '/') + { + fprintf (stderr, _("%s: Invalid shell `%s'.\n"), + program, optarg); + return E_BAD_ARG; + } + new_shell = optarg; + break; + case 'u': + { + char *cp; + + new_uid = strtoul (optarg, &cp, 10); + if (*cp != '\0') /* invalid number */ + { + fprintf (stderr, _("%s: Invalid numeric argument `%s'.\n"), + program, optarg); + return E_BAD_ARG; + } + know_uid = optarg; + } + break; + case 'U': + if (lock_password) + { + print_usage (stderr, program); + return E_BAD_ARG; + } + unlock_password = 1; + break; + case '\253': + if (use_service != NULL) + { + print_usage (stderr, program); + return E_BAD_ARG; + } + + if (strcasecmp (optarg, "files") == 0) + use_service = "files"; +#ifdef USE_LDAP + else if (strcasecmp (optarg, "ldap") == 0) + use_service = "ldap"; +#endif + else + { + fprintf (stderr, _("Service `%s' not supported.\n"), optarg); + print_usage (stderr, program); + return E_BAD_ARG; + } + break; + case '\255': + print_help (program); + return 0; + case 'v': + print_version (program, "2006"); + return 0; + case '\254': + print_usage (stdout, program); + return 0; + default: + print_error (program); + return E_USAGE; + } + } + + argc -= optind; + argv += optind; + + if (a_flg) /* -a -G is identical to -A */ + { + if (add_groups_arg) + { + print_usage (stderr, program); + return E_BAD_ARG; + } + add_groups_arg = new_groups_arg; + new_groups_arg = NULL; + } + + if (argc > 1) + { + fprintf (stderr, _("%s: Too many arguments.\n"), program); + print_error (program); + return E_USAGE; + } + else if (argc == 0) + { + fprintf (stderr, _("%s: Too few arguments.\n"), program); + print_error (program); + return E_USAGE; + } + else if (move_homedir && !new_home) + { + print_usage (stderr, program); + return E_USAGE; + } + else + { + int buflen = 256; + char *buffer = alloca (buflen); + struct passwd resultbuf; + struct passwd *pw; + + /* Determine our own user name for PAM authentication. */ + while (getpwuid_r (getuid (), &resultbuf, buffer, buflen, &pw) != 0 + && errno == ERANGE) + { + errno = 0; + buflen += 256; + buffer = alloca (buflen); + } + + if (!pw) + { + sec_log (program, MSG_NO_ACCOUNT_FOUND, getuid ()); + fprintf (stderr, _("%s: Cannot determine your user name.\n"), + program); + return E_UNKNOWN_USER; + } + + if (do_authentication ("shadow", pw->pw_name, NULL) != 0) + { + sec_log (program, MSG_PERMISSION_DENIED, pw->pw_name, + pw->pw_uid, getuid ()); + return E_NOPERM; + } + } + + modify_account = locale_to_utf8 (argv[0]); + /* Check, if the account we should modify exist. */ + pw_data = do_getpwnam (modify_account, use_service); + if (pw_data == NULL || pw_data->service == S_NONE) + { /* User does not exist. */ + sec_log (program, MSG_UNKNOWN_USER, modify_account, getuid ()); + fprintf (stderr, _("%s: Account `%s' does not exist.\n"), + program, utf8_to_locale (modify_account)); + return E_NOTFOUND; + } + + old_home = strdupa (pw_data->pw.pw_dir); + + /* -L, -U and -p are exclusive. */ + if ((lock_password + unlock_password > 1) || + ((lock_password + unlock_password) && new_password)) + { + print_error (program); + return E_USAGE; + } + + + if (lock_password) + { + const char *pwdp; + + if (pw_data->use_shadow) + pwdp = pw_data->sp.sp_pwdp; + else + pwdp = pw_data->pw.pw_passwd; + + if (pwdp == NULL) + pw_data->newpassword = strdup ("!"); + else if (pwdp[0] != '!') + { + pw_data->newpassword = malloc (strlen (pwdp) + 2); + if (pw_data->newpassword == NULL) + return E_FAILURE; + strcpy (&pw_data->newpassword[1], pwdp); + pw_data->newpassword[0] = '!'; + } + else + { + fprintf (stderr, _("Password for `%s' is already locked!\n"), + pw_data->pw.pw_name); + free_user_t (pw_data); + return E_FAILURE; + } + } + + if (unlock_password) + { + const char *pwdp; + + if (pw_data->use_shadow) + pwdp = pw_data->sp.sp_pwdp; + else + pwdp = pw_data->pw.pw_passwd; + + /* If the password is only "!", don't unlock it. */ + if (pwdp && pwdp[0] == '!' && strlen (pwdp) > 1) + pw_data->newpassword = strdup (&pwdp[1]); + else + { + fprintf (stderr, _("Cannot unlock the password for `%s'!\n"), + pw_data->pw.pw_name); + free_user_t (pw_data); + return E_FAILURE; + } + } + + if (new_group) + { + if ((retval = convert_grpopt_to_name (new_group, NULL, + &new_gid, use_service)) != 0) + return retval; + } + + if (new_groups_arg) + { + char *arg = new_groups_arg; + unsigned int errors = 0, i, j; + + j = 1; + for (i = 0; i < strlen (arg); i++) + if (arg[i] == ',') + ++j; + + new_groups = malloc (sizeof (char *) * j); + new_groupscnt = 0; + + do + { + char *cp = strchr (arg, ','); + if (cp) + *cp++ = '\0'; + + if (arg && *arg) + { + gid_t gid; + + if (convert_grpopt_to_name (arg, + &new_groups[new_groupscnt], + &gid, use_service) != 0) + ++errors; + else + { + /* If this group is the primary group, print error + message and ignore it. Don't exit with an error, + this would break too many existing scripts. */ + if ((new_group && + strcmp (new_group, new_groups[new_groupscnt]) == 0) || + (gid == pw_data->pw.pw_gid)) + { + fprintf (stderr, _("%s: `%s' is primary group name.\n"), + program, + utf8_to_locale (new_groups[new_groupscnt])); + /* return E_BAD_ARG; */ + } + else + { + new_groupscnt++; + if (new_groupscnt > j) + abort (); + } + } + } + arg = cp; + } + while (arg); + + if (errors) + { + /* This is more a guess than something else. */ + if (files_etc_dir) + return E_NOTFOUND; + else + return E_BAD_ARG; + } + } + + /* Create list of groups, to which we should add this account. -A option. */ + /* XXX merge with new_groups_arg above. */ + if (add_groups_arg) + { + char *arg = add_groups_arg; + unsigned int errors = 0, i, j; + + j = 1; + for (i = 0; i < strlen (arg); i++) + if (arg[i] == ',') + ++j; + + new_groups = malloc (sizeof (char *) * j); + new_groupscnt = 0; + + do + { + char *cp = strchr (arg, ','); + if (cp) + *cp++ = '\0'; + + if (arg && *arg) + { + gid_t gid; + + if (convert_grpopt_to_name (arg, + &new_groups[new_groupscnt], + &gid, use_service) != 0) + ++errors; + else + { + /* If this group is the primary group, print error + message and ignore it. Don't exit with an error, + this would break too many existing scripts. */ + if ((new_group && + strcmp (new_group, new_groups[new_groupscnt]) == 0) || + (gid == pw_data->pw.pw_gid)) + { + fprintf (stderr, _("%s: `%s' is primary group name.\n"), + program, + utf8_to_locale (new_groups[new_groupscnt])); + /* return E_BAD_ARG; */ + } + else + { + new_groupscnt++; + if (new_groupscnt > j) + abort (); + } + } + } + arg = cp; + } + while (arg); + + if (errors) + { + /* This is more a guess than something else. */ + if (files_etc_dir) + return E_NOTFOUND; + else + return E_BAD_ARG; + } + } + + /* Create list of groups, to which we should add this account. -R option. */ + /* XXX merge with new_groups_arg above. */ + if (remove_groups_arg) + { + char *arg = remove_groups_arg; + unsigned int errors = 0, i, j; + + j = 1; + for (i = 0; i < strlen (arg); i++) + if (arg[i] == ',') + ++j; + + del_groups = malloc (sizeof (char *) * j); + del_groupscnt = 0; + + do + { + char *cp = strchr (arg, ','); + if (cp) + *cp++ = '\0'; + + if (arg && *arg) + { + gid_t gid; + + if (convert_grpopt_to_name (arg, + &del_groups[del_groupscnt], + &gid, use_service) != 0) + ++errors; + else + { + del_groupscnt++; + if (del_groupscnt > j) + abort (); + } + } + arg = cp; + } + while (arg); + + if (errors) + { + /* This is more a guess than something else. */ + if (files_etc_dir) + return E_NOTFOUND; + else + return E_BAD_ARG; + } + } + + /* Check if user is logged in. */ + if ((new_login || know_uid || new_home) && + is_logged_in (modify_account)) + { + sec_log (program, MSG_ACCOUNT_IN_USE, modify_account, + pw_data->pw.pw_uid, getuid ()); + fprintf (stderr, _("%s: Account `%s' is currently in use.\n"), + program, utf8_to_locale (modify_account)); + return E_USER_BUSY; + } + + /* After this, we can start modifying the existing account. */ + if (know_uid != NULL && !non_unique) + { + if (getpwuid (new_uid) != NULL || + (have_extrapath && files_getpwuid (new_uid) != NULL)) + { + sec_log (program, MSG_UID_NOT_UNIQUE, new_uid, getuid ()); + fprintf (stderr, _("%s: UID %u is not unique.\n"), + program, new_uid); + return E_UID_IN_USE; + } + } + + /* If account should be renamed, check that the new name is valid + and does not already exist. */ + if (new_login) + { + if (check_name (new_login) != 0) + { + sec_log (program, MSG_USER_NAME_INVALID, + new_login, getuid ()); + fprintf (stderr, _("%s: Invalid account name `%s'.\n"), + program, utf8_to_locale (new_login)); + return E_BAD_ARG; + } + else + { + if (getpwnam (new_login) != NULL || + (have_extrapath && files_getpwnam (new_login) != NULL)) + { + sec_log (program, MSG_USER_ALREADY_EXISTS, + new_login, getuid ()); + fprintf (stderr, _("%s: Account `%s' already exists.\n"), + program, utf8_to_locale (new_login)); + return E_NAME_IN_USE; + } + } + } + + /* Lock passwd file, so that a concurrent usermod process will not + add the user a second time or a second user with the same uid. */ + if ((use_service == NULL || strcmp (use_service, "files") == 0) && + lock_database () != 0) + { + sec_log (program, MSG_PASSWD_FILE_ALREADY_LOCKED); + fputs (_("Cannot lock password file: already locked.\n"), stderr); + return E_PWDBUSY; + } + else if (new_login || new_password || know_uid || new_group || + new_comment || new_home || new_shell || know_inactive || + know_expire || lock_password || unlock_password) + { + /* Only change passwd/shadow file if there are really changes. */ + + pw_data->todo = DO_MODIFY; + if (new_login) + pw_data->new_name = strdup (new_login); + if (know_uid) + { + pw_data->have_new_uid = 1; + pw_data->new_uid = new_uid; + } + if (new_group) + { + pw_data->have_new_gid = 1; + pw_data->new_gid = new_gid; + } + if (new_comment) + pw_data->new_gecos = strdup (new_comment); + if (new_home) + pw_data->new_home = strdup (new_home); + if (new_shell) + pw_data->new_shell = strdup (new_shell); + + if (know_inactive || know_expire) + { + if (pw_data->use_shadow) + { + pw_data->spn = pw_data->sp; + pw_data->sp_changed = 1; + + if (know_inactive) + pw_data->spn.sp_inact = new_inactive; + + if (know_expire) + pw_data->spn.sp_expire = new_expire; + } + else + { + fprintf (stderr, + _("%s: Shadow passwords required for -e and -f.\n"), + program); + return E_NO_SHADOW; + } + } + + if (new_password) + { + pw_data->newpassword = strdup (new_password); + if (pw_data->use_shadow) + { + pw_data->spn.sp_lstchg = time ((time_t *) 0) / SCALE; + pw_data->sp_changed = 1; + } + } + +#ifdef USE_LDAP + if (pw_data->service == S_LDAP) + { + if (binddn == NULL) + { + binddn = get_caller_dn (); + if (binddn == NULL) + { + fprintf (stderr, + _("%s: Cannot modify user in LDAP database without DN.\n"), + program); + } + else + pw_data->binddn = strdup (binddn); + } + else + pw_data->binddn = strdup (binddn); + + if (pw_data->oldclearpwd == NULL) + { + char *cp = get_ldap_password (pw_data->binddn); + + if (cp) + pw_data->oldclearpwd = strdup (cp); + else + { + fprintf (stderr, + _("%s: User not modified in LDAP database.\n"), + program); + return E_FAILURE; + } + } + } +#endif + + if (write_user_data (pw_data, 1) != 0) + { + sec_log (program, MSG_ERROR_MODIFYING_USER, + pw_data->pw.pw_name, pw_data->pw.pw_uid, + getuid()) + return E_FAILURE; + } + else + { + if (new_login) + sec_log (program, MSG_USER_NAME_CHANGED, + pw_data->new_name, pw_data->pw.pw_name, + pw_data->pw.pw_uid, getuid ()); + if (new_password) + sec_log (program, MSG_PASSWORD_CHANGED, + pw_data->pw.pw_name, pw_data->pw.pw_uid, getuid ()); + if (pw_data->new_uid) + sec_log (program, MSG_USER_ID_CHANGED, + pw_data->pw.pw_name, pw_data->new_uid, + pw_data->pw.pw_uid, getuid ()); + if (new_comment) + sec_log (program, MSG_GECOS_CHANGED, + pw_data->pw.pw_name, pw_data->pw.pw_uid, + pw_data->new_gecos, pw_data->pw.pw_gecos, getuid ()); + if (new_group) + sec_log (program, MSG_PRIMARY_GROUP_CHANGED, + pw_data->pw.pw_name, pw_data->pw.pw_uid, pw_data->new_gid, + pw_data->pw.pw_gid , getuid ()); + if (new_home) + sec_log (program, MSG_HOME_DIR_CHANGED, + pw_data->pw.pw_name, pw_data->pw.pw_uid, + pw_data->new_home, pw_data->pw.pw_dir, getuid ()); + if (new_shell) + sec_log (program, MSG_SHELL_CHANGED, + pw_data->pw.pw_name, pw_data->pw.pw_uid, + pw_data->new_shell, pw_data->pw.pw_shell, getuid ()); + if (know_inactive) + sec_log (program, MSG_INACTIVE_DAYS_CHANGED, + pw_data->pw.pw_name, pw_data->pw.pw_uid, + pw_data->spn.sp_inact, pw_data->sp.sp_inact, getuid ()); + if (know_expire) + sec_log (program, MSG_EXPIRE_DATE_CHANGED, + pw_data->pw.pw_name, pw_data->pw.pw_uid, + date2str(DAY*pw_data->spn.sp_expire), + date2str(DAY*pw_data->sp.sp_expire), getuid ()); + } + +#ifdef HAVE_NSCD_FLUSH_CACHE + /* flush NSCD cache, else later calls could get obsolete data. */ + nscd_flush_cache ("passwd"); +#endif + } + + /* Change the login name in group entries, too. + But only, if we don't need to remove them all later. */ + if (new_login && (new_groups_arg == NULL || new_groupscnt == 0)) + { + if (rename_in_secondary_groups (pw_data, have_extrapath) != 0) + retval = E_FAILURE; + + /* Make sure, written group changes will be active now. */ +#ifdef HAVE_NSCD_FLUSH_CACHE + nscd_flush_cache ("group"); +#endif + } + + /* Now we need to change the group file (-G/-A option). */ + if (new_groups_arg || add_groups_arg) + { + unsigned int i; + int ret; + + if (new_groups_arg) + { + /* Remove user from all groups. */ + if (new_login) + ret = remove_from_secondary_groups (pw_data, have_extrapath, + new_login); + else + ret = remove_from_secondary_groups (pw_data, have_extrapath, + pw_data->pw.pw_name); + if (ret != 0) + retval = ret; + } + + for (i = 0; i < new_groupscnt; i++) + { + group_t *gr_data = find_group_data (new_groups[i], 0, use_service); + + + if (gr_data == NULL || gr_data->service == S_NONE) + { + if (use_service == NULL) + fprintf (stderr, + _("%s: ERROR: Cannot find group `%s' anymore!\n"), + program, utf8_to_locale (new_groups[i])); + else + fprintf (stderr, + _("%s: Cannot find group `%s' in service `%s', ignored.\n"), + program, utf8_to_locale (new_groups[i]), use_service); + retval = E_NOTFOUND; + } + else + { + gr_data->todo = DO_MODIFY; +#ifdef USE_LDAP + if (gr_data->service == S_LDAP) + { + if (binddn == NULL) + { + binddn = get_caller_dn (); + if (binddn == NULL) + { + fprintf (stderr, + _("%s: Cannot add user to groups stored in LDAP database without DN.\n"), + program); + } + } + + if (binddn == NULL) + { + fprintf (stderr, + _("%s: User not added to LDAP group `%s'.\n"), + program, + utf8_to_locale (gr_data->gr.gr_name)); + free_group_t (gr_data); + retval = E_GRP_UPDATE; + continue; + } + + gr_data->binddn = strdup (binddn); + + if (pw_data->oldclearpwd == NULL) + { + char *cp = get_ldap_password (binddn); + + if (cp) + pw_data->oldclearpwd = strdup (cp); + else + { + fprintf (stderr, + _("%s: User not added to LDAP group `%s'.\n"), + program, + utf8_to_locale (gr_data->gr.gr_name)); + free_group_t (gr_data); + retval = E_GRP_UPDATE; + continue; + } + } + + if (pw_data->oldclearpwd) + gr_data->oldclearpwd = strdup (pw_data->oldclearpwd); + } +#endif + gr_data->new_gr_mem = add_gr_mem (modify_account, + gr_data->gr.gr_mem); + if (write_group_data (gr_data, 1) != 0) + { + fprintf (stderr, + _("%s: User not added to LDAP group `%s'.\n"), + program, + utf8_to_locale (gr_data->gr.gr_name)); + retval = E_GRP_UPDATE; + } + else + { + sec_log (program, MSG_USER_ADDED_TO_GROUP, + pw_data->pw.pw_name, gr_data->gr.gr_name, + gr_data->gr.gr_gid, getuid ()); + } + /* Make sure, written group changes will be active now. */ +#ifdef HAVE_NSCD_FLUSH_CACHE + nscd_flush_cache ("group"); +#endif + } + free_group_t (gr_data); + } + } + + /* Now we need to change the group file (-R option). */ + /* XXX merge with above. */ + if (remove_groups_arg) + { + unsigned int i; + + for (i = 0; i < del_groupscnt; i++) + { + group_t *gr_data = find_group_data (del_groups[i], 0, use_service); + + + if (gr_data == NULL || gr_data->service == S_NONE) + { + if (use_service == NULL) + fprintf (stderr, + _("%s: ERROR: cannot find group `%s' anymore!\n"), + program, utf8_to_locale (del_groups[i])); + else + fprintf (stderr, + _("%s: Cannot find group `%s' in service `%s', ignored.\n"), + program, utf8_to_locale (del_groups[i]), use_service); + retval = E_NOTFOUND; + } + else + { + gr_data->todo = DO_MODIFY; +#ifdef USE_LDAP + if (gr_data->service == S_LDAP) + { + if (binddn == NULL) + { + binddn = get_caller_dn (); + if (binddn == NULL) + { + fprintf (stderr, + _("%s: Cannot remove user from groups stored in LDAP database without DN.\n"), + program); + } + } + + if (binddn == NULL) + { + fprintf (stderr, + _("%s: User not removed from LDAP group `%s'.\n"), + program, + utf8_to_locale (gr_data->gr.gr_name)); + free_group_t (gr_data); + retval = E_GRP_UPDATE; + continue; + } + + gr_data->binddn = strdup (binddn); + + if (pw_data->oldclearpwd == NULL) + { + char *cp = get_ldap_password (binddn); + + if (cp) + pw_data->oldclearpwd = strdup (cp); + else + { + fprintf (stderr, + _("%s: User not removed from LDAP group `%s'.\n"), + program, + utf8_to_locale (gr_data->gr.gr_name)); + free_group_t (gr_data); + retval = E_GRP_UPDATE; + continue; + } + } + + if (pw_data->oldclearpwd) + gr_data->oldclearpwd = strdup (pw_data->oldclearpwd); + } +#endif + gr_data->new_gr_mem = remove_gr_mem (modify_account, + gr_data->gr.gr_mem); + if (write_group_data (gr_data, 1) != 0) + { + fprintf (stderr, + _("%s: User not removed from LDAP group `%s'.\n"), + program, + utf8_to_locale (gr_data->gr.gr_name)); + retval = E_GRP_UPDATE; + } + else + { + sec_log (program, MSG_USER_ADDED_TO_GROUP, + pw_data->pw.pw_name, gr_data->gr.gr_name, + gr_data->gr.gr_gid, getuid ()); + } + /* Make sure, written group changes will be active now. */ +#ifdef HAVE_NSCD_FLUSH_CACHE + nscd_flush_cache ("group"); +#endif + } + free_group_t (gr_data); + } + } + + if (move_homedir) + if (move_home_directory (old_home, new_home) != 0) + retval = E_FAILURE; + + /* If UID has changed, change the UID of the homedirectory, too. */ + if (know_uid) + { + int fd; + int ret; + char *home = new_home ? new_home : old_home; + + /* Only change the UID of the home directory, if it exist. + Else ignore it. */ + if (access (home, F_OK) == 0) + { + /* If know_uid is set, change UID on filesystem of file + in the home directory. */ + ret = chown_dir_rec (home, pw_data->pw.pw_uid, new_uid, + pw_data->pw.pw_gid, + new_group ? new_gid : pw_data->pw.pw_gid); + if (ret != 0) + retval = E_FAILURE; + } + + /* Relocate the "lastlog/faillog" entries for the user. */ + if ((fd = open ("/var/log/faillog", O_RDWR)) >= 0) + { + struct faillog fl; + + if (lseek (fd, (off_t) sizeof (fl) * pw_data->pw.pw_uid, SEEK_SET) + == (off_t) -1) + { + fprintf (stderr, _("%s: Error: Cannot copy faillog entry: %s\n"), + program, strerror (errno)); + retval = E_FAILURE; + } + else + if (read (fd, &fl, sizeof (fl)) == sizeof (fl)) + { + if ((lseek (fd, (off_t) sizeof (fl) * new_uid, SEEK_SET) + == (off_t) -1) || (write (fd, &fl, sizeof (fl)) == -1)) + { + fprintf (stderr, + _("%s: Error: Cannot copy faillog entry: %s\n"), + program, strerror (errno)); + retval = E_FAILURE; + } + } + close (fd); + } + + if ((fd = open (_PATH_LASTLOG, O_RDWR, 0)) >= 0) + { + struct lastlog ll; + + if (lseek (fd, (off_t) sizeof (ll) * pw_data->pw.pw_uid, SEEK_SET) + == (off_t) -1) + { + fprintf (stderr, _("%s: Error: Cannot copy lastlog entry: %s\n"), + program, strerror (errno)); + retval = E_FAILURE; + } + else + if (read (fd, &ll, sizeof ll) == sizeof ll) + { + if ((lseek (fd, (off_t) sizeof (ll) * new_uid, SEEK_SET) + == (off_t) -1) || (write (fd, &ll, sizeof (ll)) == -1)) + { + fprintf (stderr, + _("%s: Error: Cannot copy faillog entry: %s\n"), + program, strerror (errno)); + retval = E_FAILURE; + } + } + close (fd); + } + } + if (use_service == NULL || strcmp (use_service, "files") == 0) + ulckpwdf (); + + return retval; +} diff --git a/src/vigr.8 b/src/vigr.8 new file mode 100644 index 0000000..ff72d7a --- /dev/null +++ b/src/vigr.8 @@ -0,0 +1 @@ +.so man8/vipw.8 diff --git a/src/vipw.8 b/src/vipw.8 new file mode 100644 index 0000000..1c02580 --- /dev/null +++ b/src/vipw.8 @@ -0,0 +1,69 @@ +.\" -*- nroff -*- +.\" Copyright (C) 2003 Thorsten Kukuk +.\" Author: Thorsten Kukuk +.\" +.\" This program is free software; you can redistribute it and/or modify +.\" it under the terms of the GNU General Public License version 2 as +.\" published by the Free Software Foundation. +.\" +.\" 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +.\" +.TH vipw 8 "October 2003" "pwdutils" +.SH NAME +vipw,vigr \- edit the password, group or shadow file +.SH SYNOPSIS +\fBvipw\fR [\fB-g\fR|\fB-p\fR|\fB-s\fR] +.br +\fBvigr\fR [\fB-g\fR|\fB-p\fR|\fB-s\fR] +.SH DESCRIPTION +\fBvipw\fR/\fBvigr\fR edits the \fIpasswd\fR,\fIgroup\fR or +\fIshadow\fR file after setting the appropriate locks to prevent +file corruption. \fBvipw\fR edits per default the \fI/etc/passwd\fR +file, \fBvigr\fR the \fI/etc/group\fR file. +Extended attributes (like ACLs or security attributes) are preserved. +.SH ENVIRONMENT +.TP +EDITOR +If the environment variable exists, the editor specified +by this variable is used instead of the default +.BR vi (1). +.SH OPTIONS +.TP +.B "\-g, \-\-group" +Edit \fI/etc/group\fR. +.TP +.B "\-p, \-\-passwd" +Edit \fI/etc/passwd\fR. +.TP +.B "\-s, \-\-shadow" +Edit \fI/etc/shadow\fR. +.TP +.B "\-u, \-\-usage" +Print a usage message and exit. +.TP +.B " \-\-help" +Print a more verbose help text and exit. +.TP +.b "-v, \-\-version" +Print version information and exit. +.SH FILES +/etc/group \ - group account information +.br +/etc/passwd \- user account information +.br +/etc/shadow \- shadow account information +.SH SEE ALSO +.BR attr (5), +.BR passwd (1), +.BR passwd (5), +.BR shadow (5), +.BR vi (1) +.SH AUTHOR +Thorsten Kukuk diff --git a/src/vipw.c b/src/vipw.c new file mode 100644 index 0000000..1860f9b --- /dev/null +++ b/src/vipw.c @@ -0,0 +1,432 @@ +/* Copyright (C) 2003, 2004, 2005 Thorsten Kukuk + Author: Thorsten Kukuk + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License version 2 as + published by the Free Software Foundation. + + 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ + + +#ifdef HAVE_CONFIG_H +#include +#endif + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "i18n.h" +#include "public.h" +#include "error_codes.h" + +#ifndef _PATH_PASSWD +#define _PATH_PASSWD "/etc/passwd" +#endif + +#ifndef _PATH_GROUP +#define _PATH_GROUP "/etc/group" +#endif + +#ifndef _PATH_SHADOW +#define _PATH_SHADOW "/etc/shadow" +#endif + +#ifndef _PATH_GSHADOW +#define _PATH_GSHADOW "/etc/gshadow" +#endif + +static void +print_usage (FILE *stream, const char *program) +{ + fprintf (stream, _("Usage: %s [-g|-p|-s]\n"), + program); +} + +static void +print_help (const char *program) +{ + print_usage (stdout, program); + fprintf (stdout, _("%s - edit the password, group or shadow file\n\n"), + program); + + fputs (_(" -g, --group Edit the /etc/group file\n"), stdout); + fputs (_(" -p, --passwd Edit the /etc/passwd file\n"), stdout); + fputs (_(" -s, --shadow Edit the /etc/shadow file\n"), stdout); + fputs (_(" --help Give this help list\n"), stdout); + fputs (_(" -u, --usage Give a short usage message\n"), stdout); + fputs (_(" -v, --version Print program version\n"), stdout); +} + +static int +call_editor (const char *file) +{ + char *editor; + pid_t pid; + + if ((editor = getenv("EDITOR")) == NULL) + editor = strdup(_PATH_VI); + + pid = fork(); + if (pid < 0) /* Error */ + { + fprintf (stderr, _("Cannot fork: %s\n"), strerror (errno)); + return E_FAILURE; + } + else if (pid == 0) /* Child */ + { + char *argp[] = {"sh", "-c", NULL, NULL}; + char *buffer; + int i; + + for (i = 3; i < getdtablesize (); i++) + close (i); + + /* Reset all signals which parent ignores. */ + signal (SIGALRM, SIG_DFL); + signal (SIGXFSZ, SIG_DFL); + signal (SIGHUP, SIG_DFL); + signal (SIGINT, SIG_DFL); + signal (SIGPIPE, SIG_DFL); + signal (SIGQUIT, SIG_DFL); + signal (SIGTERM, SIG_DFL); + signal (SIGTSTP, SIG_DFL); + signal (SIGTTOU, SIG_DFL); + + if (asprintf (&buffer, "%s %s", editor, file) < 0) + { + fputs ("running out of memory!\n", stderr); + return E_FAILURE; + } + argp[2] = buffer; + + execv (_PATH_BSHELL, argp); + _exit (127); + } + else /* Parent */ + { + int status; + + while ((pid = waitpid (pid, &status, WUNTRACED)) > 0) + { + /* the editor suspended, so suspend us as well */ + if (WIFSTOPPED (status)) + { + kill (getpid (), SIGSTOP); + kill (pid, SIGCONT); + } + else + break; + } + + if (pid == -1 || !WIFEXITED (status) || WEXITSTATUS (status)) + return E_FAILURE; + } + + return 0; +} + +static int +edit (const char *file, const char *program, int shadow) +{ + struct stat before, after, orig; + int new_fd, old_fd; + char *tmpname; + int retval = 0; +#ifdef WITH_SELINUX + security_context_t prev_context; +#endif + + if (asprintf (&tmpname, "%s.%sXXXXXX", file, program) < 0) + { + fputs ("running out of memory!\n", stderr); + return E_FAILURE; + } + + if (lock_database () != 0) + { + fprintf (stderr, _("Cannot lock `%s': already locked.\n"), file); + return E_PWDBUSY; + } + +#ifdef WITH_SELINUX + if (set_default_context (file, &prev_context) < 0) + { + ulckpwdf (); + free (tmpname); + return E_FAILURE; + } +#endif + new_fd = mkstemp (tmpname); +#ifdef WITH_SELINUX + if (restore_default_context (prev_context) < 0) + { + if (new_fd >= 0) + close (new_fd); + ulckpwdf (); + free (tmpname); + return E_FAILURE; + } +#endif + if (new_fd == -1) + { + fprintf (stderr, _("Can't create `%s': %m\n"), tmpname); + ulckpwdf (); + free (tmpname); + return E_FAILURE; + } + /* for the case somebody uses really an old glibc with + insecure mkstemp. */ + fchmod (new_fd, S_IRUSR|S_IWUSR); + + old_fd = open (file, O_RDONLY); + if (old_fd == -1) + { + /* if the file does not exist, it could be that the + user will create them. */ + if (errno != ENOENT) + { + fprintf (stderr, "%s: %s\n", file, strerror (errno)); + close (new_fd); + unlink (tmpname); + ulckpwdf (); + free (tmpname); + return E_FAILURE; + } + /* Set orig struct for chmod/chown to usefull values for + new files. */ + orig.st_uid = 0; + orig.st_gid = 0; + if (shadow) + orig.st_mode = S_IRUSR|S_IWUSR; + else + orig.st_mode = S_IRUSR|S_IWUSR|S_IRGRP|S_IROTH; + } + else + { + char buffer[4096]; + int cnt; + + while ((cnt = read (old_fd, buffer, sizeof (buffer))) > 0) + { + if (write (new_fd, buffer, cnt) != cnt) + { + fprintf (stderr, _("Cannot copy `%s': %s\n"), + file, strerror (errno)); + cnt = -1; + break; + } + } + if (cnt < 0) /* Remove file if copy failed. */ + { + fprintf (stderr, _("Cannot copy `%s': %s\n"), + file, strerror (errno)); + close (old_fd); + close (new_fd); + unlink (tmpname); + ulckpwdf (); + free (tmpname); + return E_FAILURE; + } + if (fstat (old_fd, &orig)) + { + fprintf (stderr, _("Can't stat `%s': %m\n"), file); + return E_FAILURE; + } + close (old_fd); + } + close (new_fd); + + if (stat (tmpname, &before)) + { + fprintf (stderr, _("Can't stat `%s': %m\n"), tmpname); + return E_FAILURE; + } + + if (call_editor (tmpname) != 0) + { + unlink (tmpname); + free (tmpname); + ulckpwdf (); + return E_FAILURE; + } + + if (stat (tmpname, &after)) + { + fprintf (stderr, _("Can't stat `%s': %m\n"), tmpname); + return E_FAILURE; + } + + if (before.st_mtime == after.st_mtime && + before.st_size == after.st_size) + fprintf (stderr, _("%s: no changes made\n"), program); + else + { + char *old; + + /* Set modes of temporary file to the from the original one. */ + if (chmod (tmpname, orig.st_mode) < 0) + { + fprintf (stderr, + _("Cannot change permissions for `%s': %s\n"), + tmpname, strerror (errno)); + unlink (tmpname); + return E_FAILURE; + } + if (chown (tmpname, orig.st_uid, orig.st_gid) < 0) + { + fprintf (stderr, + _("Cannot change owner/group for `%s': %s\n"), + tmpname, strerror (errno)); + unlink (tmpname); + return E_FAILURE; + } + + if (copy_xattr (file, tmpname) != 0) + { + unlink (tmpname); + retval = E_FAILURE; + } + else if (asprintf (&old, "%s.old", file) < 0) + { + fputs ("running out of memory!\n", stderr); + unlink (tmpname); + retval = E_FAILURE; + } + else + { + /* Replace original file with edited one. */ + unlink (old); + if (link (file, old) < 0) + fprintf (stderr, + _("Warning: cannot create backup file: %m\n")); + rename (tmpname, file); + } + } + + ulckpwdf (); + free (tmpname); + return retval; +} + +int +main (int argc, char *argv[]) +{ + char *program; + int vipw; + int shadow = 0; + char *cp; + +#ifdef ENABLE_NLS + setlocale(LC_ALL, ""); + bindtextdomain(PACKAGE, LOCALEDIR); + textdomain(PACKAGE); +#endif + + /* Before going any further, raise the ulimit and ignore + signals. */ + init_environment (); + + /* determine name of binary, which specifies edit mode. */ + program = ((cp = strrchr (*argv, '/')) ? cp + 1 : *argv); + if (strcmp (program, "vigr") == 0) + vipw = 0; /* Edit group file. */ + else + { + /* Edit passwd or shadow file. */ + program = "vipw"; + vipw = 1; + } + + while (1) + { + int c; + int option_index = 0; + static struct option long_options[] = { + {"group", no_argument, NULL, 'g' }, + {"passwd", no_argument, NULL, 'p' }, + {"shadow", no_argument, NULL, 's' }, + {"version", no_argument, NULL, 'v' }, + {"usage", no_argument, NULL, 'u' }, + {"help", no_argument, NULL, '\255' }, + {NULL, 0, NULL, '\0'} + }; + + c = getopt_long (argc, argv, "gpsVvu", + long_options, &option_index); + if (c == (-1)) + break; + switch (c) + { + case 'g': + vipw = 0; + break; + case 'p': + vipw = 1; + break; + case 's': + /* Yes, vigr -s will edit gshadow, not shadow! + Undocumented feature to be compatible with other + implementations. */ + shadow = 1; + break; + case '\255': + print_help (program); + return 0; + case 'V': /* RH compatibility. */ + case 'v': + print_version (program, "2005"); + return 0; + case 'u': + print_usage (stdout, program); + return 0; + default: + print_error (program); + return E_USAGE; + } + } + + argc -= optind; + argv += optind; + + if (argc > 0) + { + fprintf (stderr, _("%s: Too many arguments.\n"), program); + print_error (program); + return E_USAGE; + } + + if (vipw) + { + if (shadow) + return edit (_PATH_SHADOW, program, shadow); + else + return edit (_PATH_PASSWD, program, shadow); + } + else + { + if (shadow) + return edit (_PATH_GSHADOW, program, shadow); + else + return edit (_PATH_GROUP, program, shadow); + } + + /* never reached! */ + return E_FAILURE; +} -- 2.7.4